#include <stdlib.h>
#define MAX 10
struct List {
int number;
char name[MAX];
struct List *Next;
};
typedef struct List Node;
typedef Node *Link;
Link createList(Link Head) {
int newNumber;
char newName[MAX];
Link Pointer;
Link New;
int i;
printf("首节点内存分配\n");
Head = (Link)malloc(sizeof(Node));
if(Head == NULL) {
printf("首节点内存分配错误\n");
}
else {
newNumber = 1;
printf("输入首节点数据项2 ( <=10 char ) : ");
scanf("%s",newName);
printf("保存数据项到首节点\n");
Head->number = newNumber;
for(i=0;i<MAX;i++) {
Head->name[i] = newName[i];
}
Head->Next = NULL;
printf("建立指向首节点的节点\n");
Pointer = Head;
while(1) {
newNumber++;
printf("新节点分配内存\n");
New = (Link)malloc(sizeof(Node));
if(New == NULL) {
printf("新节点内存分配失败\n");
}
else {
printf("输入新节点数据项2 '0' 退出 : ");
scanf("%s",newName);
if(newName[0] == '0') {
printf("节点输入完毕\n");
break;
}
printf("保存数据项到节点\n");
New->number = newNumber;
for(i=0;i<MAX;i++) {
New->name[i] = newName[i];
}
New->Next = NULL;
printf("新节点作为当前节点的下一节点\n");
Pointer->Next = New;
printf("当前节点指向新节点,完成组链\n");
Pointer = New;
}
}
return Head;
}
}
void printList(Link Head) {
Link Pointer;
Pointer = Head;
printf("打印链表\n数据项1\t数据项2\n");
while(Pointer != NULL) {
printf("%d\t",Pointer->number);
printf("%s\n",Pointer->name);
Pointer = Pointer->Next;
}
}
void freeList(Link Head) {
Link Pointer;
while(Head != NULL) {
Pointer = Head;
Head = Head->Next;
printf("释放节点 %d\n",Pointer->number);
free(Pointer);
}
}
int main() {
Link Head;
Head = createList(Head);
if(Head != NULL) {
printList(Head);
freeList(Head);
}
return 0;
}
/*
D:\>CAPAFList
首节点内存分配
输入首节点数据项2 ( <=10 char ) : aaa
保存数据项到首节点
建立指向首节点的节点
新节点分配内存
输入新节点数据项2 '0' 退出 : bbb
保存数据项到节点
新节点作为当前节点的下一节点
当前节点指向新节点,完成组链
新节点分配内存
输入新节点数据项2 '0' 退出 : clearcase/" target="_blank" >ccc
保存数据项到节点
新节点作为当前节点的下一节点
当前节点指向新节点,完成组链
新节点分配内存
输入新节点数据项2 '0' 退出 : ddd
保存数据项到节点
新节点作为当前节点的下一节点
当前节点指向新节点,完成组链
新节点分配内存
输入新节点数据项2 '0' 退出 : 0
节点输入完毕
打印链表
数据项1 数据项2
1 aaa
2 bbb
3 ccc
4 ddd
释放节点 1
释放节点 2
释放节点 3
释放节点 4
*/