C语言版用链表实现通讯录“标头.h”#include<stdio.h>#include<stdlib.h>#include<string.h>#define Len sizeof(Lnode)int seat;//全局变量,用于存储通讯录成员信息typedef struct Lnode{int number; //学号char name[20];//名字double telenum;//电话struct Lnode *next;//定义一个指向下一个节点的指针} Lnode,*LinkList;//把struct Lnode*重定义为LinkListLinkList creatIncreLink();void deleteElem(LinkList l,int i);int delName(LinkList l,char name[]);int delNum(LinkList l,int n);void insertYouxu(LinkList l,LinkList Elem);void printList(LinkList l);LinkList prior(LinkList l,LinkList p);int searchName(LinkList l,char name[]);int searchNum(LinkList l,int n);#include<stdio.h>#include"标头.h"LinkList creatIncreLink(){LinkList p;int num=1,number;double telenum;char name[20],temp;LinkList L,P;L=(LinkList)malloc(Len); //创建头结点L->next = NULL;printf("请输入学生学号、姓名和电话号码,建立通讯录,以'-1'为输入结果标志\n");printf("请输入学号 %d:");scanf("%d",&number);printf("请输入姓名 %d:");temp=getchar();gets(name);printf("请输入电话号码 %d:");scanf("%lf",&telenum);while (number >= 0){p = (LinkList)malloc(Len); //新分配结点p->number = number;p->telenum = telenum;strcpy(p->name,name);insertYouxu(L,p); //有序地插入新结点num++;printf("请输入学号 %d:",&num);scanf("%d",&number);printf("请输入姓名 %d:",num);temp=getchar();gets(name);printf("请输入电话号码 %d:",num);scanf("%lf",&telenum);}return(L);}void deleteElem(LinkList l,int i) //删除函数{LinkList p=l,q;//让p指向lint j=0;//循环变量jwhile(p->next&&j<i-1) //循环让p指向第i个元素的前驱 {p=p->next;j++;}if(p->next==0) //判断下一个元素是否为空printf("ERROR");q=p->next;//将p指向第i个元素p->next=q->next;//p的next指向q的nextfree(q);//释放q链表}int delName(LinkList l,char name[]){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL)printf("该链表中没有元素");else{while(p!=NULL){if(strcmp(p->name,name)!=0){flag=1;printf("%s",p->name);p=p->next;deleteElem(l,seat);}else{p=p->next;seat++;}}if(flag==1)printf("被删除");}return flag;}int delNum(LinkList l,int n){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL)printf("没有元素");else{while(p!=NULL){if(p->number<=n){if(p->number==n){flag=1;printf("%d",p->number);p=p->next;deleteElem(l,seat);}}else{p=p->next;seat++;}}printf("被删除");}return flag;}void insertYouxu(LinkList l,LinkList Elem){LinkList p=l->next;while(p!=NULL&&Elem->number>=p->number) {if(p->number==Elem->number){printf("重复输入\n");return;}p=p->next;}if(p==NULL){p=prior(l,p);Elem->next=NULL;p->next=Elem;}else{p=prior(l,p);Elem->next=p->next;p->next=Elem;}}void printList(LinkList l){LinkList p=l;int n=1;printf("内容");if(l==NULL||l->next==NULL)printf("没有元素\n");elsewhile(p->next!=NULL){printf(" - %-9d",n,p->next->number);printf(" %-5s %.0f\n",p->next->name,p->next->telenum); p=p->next;n++;}}LinkList prior(LinkList l, LinkList p){LinkList p_prior=l;if(l->next==NULL)return(l);while(p_prior->next!=p)p_prior=p_prior->next;return(p_prior);}int searchName(LinkList l,char name[]){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL||l==NULL)printf("查找失败");else{while(p!=NULL){if(!strcmp(p->name,name)){flag=1;printf("要查找的是%d位通讯录成员\n",seat);printf("学号:%d 名字:%s 电话:%f\n",p->number,p->name,p->telenum); }p->next;seat++;}}return flag;}int searchNum(LinkList l,int n){int flag=0;LinkList p=l->next;seat=1;if(l->next==NULL)printf("查找失败");else{while(p!=NULL){if(p->number<=n)if(p->number==n){flag=1;printf("要查找的是%d个成员\n",seat);printf("学号:%d 姓名:%s 电话:%f",p->number,p->telenum,p->telenum); }p=p->next;seat++;}}return flag;}int main(void){LinkList l=NULL,p;int flag=0;int menu;char temp;system("color 3f");printf("输入1通讯录的建立\n");printf("输入2插入通讯录\n");printf("输入3查询通讯录\n");printf("输入4删除通讯录\n");printf("输入5显示通讯录信息\n");printf("输入0退出\n");scanf("%d",&menu);while(menu!=0){switch(menu){case 1:l=creatIncreLink();printf("建立通讯录\n");printList(l);flag=1;break;case 2:if(flag==1){int number;double telenum;char name[20];char temp;printf("请输入学号\n");scanf("%d",&number);printf("请输入姓名\n");scanf("%s",&name[20]);printf("请输入电话号码");scanf("%f",&telenum);p=(LinkList)malloc(Len);p->number=number;strcpy(p->name,name);p->telenum=telenum;insertYouxu(l,p);printf("插入后\n");printList(l);}else{printf("error\n");}break;case 3:int way,n,s;char na[20],temp;if(l!=NULL){if(flag){printf("选择查找方式1,按学号查找2按姓名"); scanf("%d",&way);if(way==1){printf("请输入学号\n");scanf("%d",&n);s=searchNum(l,n);if(s==0)printf("shibai");}else if(way==2){printf("请输入姓名");temp=getchar();gets (na);s=searchName(l,na);if(s==2)printf("失败");}else printf("无记录");}break;}else printf("无记录");break;case 4:printf("1,按序号删除2 按学号,3按姓名\n"); scanf("%d",&way);if(way==1){int n;printf("请输入序号");scanf("%d",&n);printf("删除后\n");deleteElem(l,n);printList(l);}else if(way==2){int n,f;printf("请输入学号");scanf("%d",&n);f=delNum(l,n);if(f!=0){printf("删除后");printList(l);}else printf("失败");}else if(way==3){char na[20],temp;int f;printf("输入姓名");temp=getchar();gets(na);f=delName(l,na);if(f!=0){printf("删除后");printList(l);}else printf("失败");}else printf("error\n");break;case 5:printf("内容如下\n");printList(l);break;case 0:exit(0);default:printf("重新输入"); }printf("选择\n");scanf("%d",&menu);}}。