#include #include #include #define N 20 typedef struct Person{ char Tel[N]; char Name[N]; char Address[2*N]; struct Person *next; }Person,*Linklist; //输入函数 void InPut(Linklist p) { printf("\n 请输入通讯者姓名:\n"); scanf("%s",p->Name); printf("\n 请输入通讯者联系电话:\n"); scanf("%s",p->Tel); printf("\n 请输入通讯者地址:\n"); scanf("%s",p->Address); } //输出单个联系人的信息 void PutNode(Linklist p) { printf("\n 通讯者姓名:\n%s",p->Name); printf("\n 通讯者联系电话:\n%s",p->Tel); printf("\n 通讯者地址:\n%s\n\n",p->Address); } //回收内存函数 void Release(Linklist L) { Linklist z,p; p=L; while(p!=NULL) { z=p->next; free(p); p=z; } } //建立链表的函数 Linklist CreatList() { int tem1; Linklist s,p,L; printf("\n 输入通讯者信息:\n 输入非零整数开始;或者输入'0'退出:\n"); scanf("%d",&tem1); L=(Linklist)malloc(sizeof(Person)); L->next=NULL; s=L; while(tem1!=0){ p=(Linklist)malloc(sizeof(Person)); InPut(p); p->next=s->next;s->next=p;s=p; printf("\n 输入学生信息:\n 输入非零整数继续;或者输入'0'退出:\n"); scanf("%d",&tem1); } return L; } //向通讯录中第i 个位置前插入一个联系人的函数 void ListInsert(Linklist L,int i) { int j=0; Linklist s,p; p=L; while(p&&jnext;++j;} if(!p||j>i-1) exit(0); s=(Linklist)malloc(sizeof(Person)); InPut(s); s->next=p->next; p->next=s; } //删除通讯录中第i 个联系人的函数 void ListDelete(Linklist L,int i) { int j=0; Linklist p,q; p=L; while(p->next&&jnext;++j;} if(!(p->next)||j>i-1) exit(0); q=p->next;p->next=q->next; printf("您将删除的联系人信息为:\n"); PutNode(q); free(q); } //输出通讯录中的所有联系人信息 void OutPut(Linklist L) { Linklist p; p=L->next; printf("输出所有联系人信息:\n"); while(p!=NULL) { PutNode(p); p=p->next; } } //按姓名查找的函数 Linklist FindName(Linklist p) { char tem[N]; printf("\n 请输入要查找同学的姓名:\n"); scanf("%s",t...