#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' 退出 : ccc 保存数据项到节点 新节点作为当前节点的下一节点 当前节点指向新节点,完成组链 新节点分配内存 输入新节点数据项2 '0' 退出 : ddd 保存数据项到节点 新节点作为当前节点的下一节点 当前节点指向新节点,完成组链 新节点分配内存 输入新节点数据项2 '0' 退出 : 0 节点输入完毕 打印链表 数据项1 数据项2 1 aaa 2 bbb 3 ccc 4 ddd 释放节点 1 释放节点 2 释放节点 3 释放节点 4 */ |