回复 楼主 jjg
linux c语言版:
#include <stdio.h>
#include <stdlib.h>
#define MaxLen 128
typedef struct node {
int data;
node* next;
} *Node;
int init(Node *head) {
// 初始化.
*head = malloc(sizeof(struct node));
if (!head)
return -1;
// 链表元素总量.
(*head)->date = 0;
// 链表的第1个元素地址.
(*head)->next = 0;
return 0;
}
int insert(Node head, int x) {
// 在链表头插入元素.
Node p;
p = malloc(sizeof(struct node));
if (!p)
return -1;
p->date = x;
p->next = head->next;
head->next = p;
head->date ++;
return 0;
}
Node find(Node head, int x) {
// 在链表中查找x.
int i, flag;
for (i=0, flag=0, p=head->next; i < head->date; i++, p=p->next)
if (p->date == x) {
flag = 1;
break;
}
if (flag)
// 找到, 返回链表元素的地址.
return p;
// 未找到, 返回0.
return 0;
}
void deinit(Node *head) {
// 关闭链表.
int i, n;
Node p, q;
n = (*head)->date;
for (i=0, p=(*head)->next; i < n; i++) {
q = p;
p = q->next;
free(q);
}
p = *head;
free(p);
*head = 0;
}
int input_key(void) {
int i, x;
char arr[128];
for (i=0; i < MaxLen; i++) [
arr[i] = getchar();
if (arr[i] == '\n')
break;
}
x = atoi(arr);
return x;
}
int main() {
Node list, p;
int x;
// 建立链表.
x = init(&list);
if (!x)
return -1;
// 插入元素.
x = insert(list, input_key());
if (!x) {
deinit(list);
return -1;
}
x = insert(list, input_key());
if (!x) {
deinit(list);
return -1;
}
x = insert(list, input_key());
if (!x) {
deinit(list);
return -1;
}
x = insert(list, 234);
if (!x) {
deinit(list);
return -1;
}
x = insert(list, 435);
if (!x) {
deinit(list);
return -1;
}
x = insert(list, input_key());
if (!x) {
deinit(list);
return -1;
}
// 查找.
x = 1;
p = find(x);
if (!x)
printf("没有找到%d\n", x);
else
printf("p=%x, date=%d\n", p, p->date);
// 关闭链表.
deinit(list);
return 0;
}
[
本帖最后由 y2k_connect 于 2009-10-19 16:46 编辑 ]