《c++实现单链表的操作》由会员分享,可在线阅读,更多相关《c++实现单链表的操作(10页珍藏版)》请在金锄头文库上搜索。
1、3 .设有一单向链表的结点的结构,定义如下:Struct PhoneBook Char name20; Char number15; PhoneBook *next;Bingo(1)编写一个函数PhoneBook *insert(PhoneBook *head, PhoneBook *phonenum);将一条记录phonenum 插入到按姓名排序的电话本head中,插入后链表保持有序。Bingo(2)编写一个函数PhoneBook *delete_node(PhoneBook *head, char *name);将电话本head中姓名为name的记录删除。(3) 编写一个函数 PhoneB
2、ook *find(PhoneBook *head, char *s);在电话本head 中查找姓名或电话号码为s的记录。(4) 编写一个函数void List_name(PhoneBook *head, char *s);将电话本中所有姓s的记录列举出来。Bingo(5) 编写一个函数void print(PhoneBook *head); 将电话本head中的记录按顺序输出。#include#include#includetypedef struct phonebookchar name20;char number10;struct phonebook *next;linklist;lin
3、klist *head,*p;/带头结点的尾插法建立单链表linklist *creat()linklist *head,*r,*s;int n=0;head=malloc(sizeof(linklist);head-next=NULL;s=head;r=head;printf(建立单链表,请输入姓名和号码,当输入超过6组时,建立结束:n);gets(s-name);gets(s-number);while(n!=5)s=malloc(sizeof(linklist);printf(建立单链表,请输入姓名和号码,当输入超过6组时,建立结束:n);gets(s-name);gets(s-numb
4、er);r-next=s;r=s;n+;r-next=NULL;return head;/带头结点的尾插法建立要插入信息的单链表linklist *creat1()linklist *head,*r,*s;head=malloc(sizeof(linklist);head-next=NULL;s=head;r=head;printf(只建立一个元素的单链表phonenum,请输入姓名和号码:n);gets(s-name);gets(s-number);r-next=NULL;return head;/单链表的输出函数void print(linklist *head)linklist *p;p
5、=head;printf(输出单链表:n);if(p!=NULL)doprintf(%st%s,p-name,p-number);p=p-next;printf(n);while(p!=NULL);/单链表的排序函数void paixu(linklist *head)linklist *p,*q,*small;char temp20,temp110;for(p=head-next;p-next!=NULL;p=p-next)small=p; for(q=p-next;q;q=q-next)if(strcmp(q-name,small-name)name);strcpy(temp1,p-numb
6、er);strcpy(p-name,small-name);strcpy(p-number,small-number);strcpy(small-name,temp);strcpy(small-number,temp1);printf(排序后输出:n);print(head); /插入函数linklist *insert(linklist *head,linklist *phonenum)linklist *p,*s,*q;s=phonenum; q=head;while(strcmp(q-next-name,s-name)next;p=q-next;q-next=s;s-next=p;ret
7、urn (head);/删除函数void del_node(linklist *head,char *name)linklist *p,*q;q=head;while(strcmp(q-next-name,name)!=0)q=q-next;p=q-next;q-next=p-next;free(p);/查找函数linklist *find(linklist *head,char *s)linklist *p,*q;p=head-next;/*while(p!=NULL)if(strcmp(p-name,s)=0)|strcmp(p-number,s)=0)printf(%st%st,p-na
8、me,p-number);*/while(p!=NULL)/q=malloc(sizeof(linklist);if(strcmp(p-name,s)=0)|(strcmp(p-number,s)=0)q=p;return q;void List_name(linklist *head, char *s)linklist *p;p=head-next;while(p!=NULL)if(strcmp(p-name,s)=0)printf(%st%st,p-name,p-number);break;void main()linklist *head,*phonenum,*p;int i;char
9、iname20,s20;printf(*n);printf(1.建立单链表n);printf(2.排序n);printf(3.建立一个phonenum并按顺序插入n);printf(4.删除n);printf(5.查找n);printf(*n);loop:printf(请做出选择:n); scanf(%d,&i);if(i6)printf(选择错误请重新选择:n);goto loop;switch(i)case 1:printf(您选择的是建立单链表n);goto loop1; break;case 2:printf(您选择的是对单链表排序n);goto loop2; break;case 3
10、:printf(您选择了插入操作n);goto loop3;break;case 4:printf(您选择了删除操作n);goto loop4;break;case 5:printf(您选择了查找操作n);goto loop5;break;loop1:head=creat();print(head);printf(n);goto loop;loop2:paixu(head);goto loop;loop3:phonenum=creat1();insert(head,phonenum);printf(插入新信息phonenum后:n);print(head);goto loop;loop4:printf(请输入你要删除信息的姓名:n);gets(iname);del_node(head,iname);print(head);goto loop;loop5:printf(请输入你要查找的名字或者号码:n);gets(s);List_name(head,s);goto loop;