#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
*/