C++双向链表实现简单通讯录
本文实例为大家分享了C++双向链表实现简单通讯录的具体代码,供大家参考,具体内容如下
#include#include #include #include usingnamespacestd; typedefstructDirectory { stringName; stringMobile; stringWechatnumber; stringSTREET; stringCITY; stringEIP; stringSTATE; structDirectory*next; structDirectory*prev; }Directory; //头节点初始化 Directoryp0={"0","0","0","0","0","0","0",NULL,NULL}; Directorypn={"0","0","0","0","0","0","0",NULL,NULL}; //设置头指针,指向头节点 Directory*head=&p0; //函数声明 voidenter(Directory*); voiddisplay_list(); voidprintf_a(); voiddisplay_menu(Directory*); intkey_ramove(string); voiddisplay_listfiile(); Directory*find_load(string); Directory*load(); intmain() { cout<<"========================================"< >i;//输入i,用于选择第几个功能 switch(i){//选择,i等于几,就执行case几 case1: load();//新建节点并插入链表 cout< >key; key_ramove(key);//删除节点,就是删除一个人的信息 printf_a(); break; case3: cout<<"请输入名字:"; cin>>key; display_menu(find_load(key));//打印找到节点内的信息,find_load(key)为找节点用的遍历函数 printf_a();/ break; case4: display_list();//打印所有节点的名字 printf_a(); break; case5: display_listfiile();//把所有节点的信息输入到"address.txt"文件 break; default: break; } } return0; } /************************************************** *返回类型:void *函数作用:打印菜单 ***************************************************/ voidprintf_a() { cout<<"----------------------------------------"< next=head->next;//p的下一个指向头指针指向节点的下一个 head->next=p;//头指针指向节点的下一个指向p p->prev=head;//p的上一个指向指针指向节点的下一个 p->next->prev=p; head=p;//头指针指向p returnp; } /************************************************** *返回类型:void *函数作用:单个节点查找 *传入参数:名字10分 ***************************************************/ Directory*find_load(stringkey_name) { Directory*p; p=&pn; for(p;p->prev!=NULL;p=p->prev) { if(p->Name==key_name) { returnp; } } returnNULL; } /************************************************** *返回类型:void *函数作用:单个节点删除 *传入参数:名字15分 ***************************************************/ intkey_ramove(stringkey_name) { Directory*p;//定义结构体类型的指针 p=&pn; for(p;p->prev!=NULL;p=p->prev) { if(p->Name==key_name) { head=pn.prev; p->prev->next=p->next;//p的上一个的下一个指向p的下一个 p->next->prev=p->prev;//p的下一个的上一个指向p的上一个 free(p);//释放p的空间 return0;//删除后,退出函数 } } cout<<"没有此人!!!!"< >name; P->Name=name;//把输入的字符串放到,当前指针指向的节点 cout<<"输入电话:"; cin>>mobile; P->Mobile=mobile;//把输入的字符串放到,当前指针指向的节点 cout<<"是否完善信息?(Y/N)"< >jubge; if(jubge=='y'||jubge=='Y') { stringwechatnumber;//微信 stringstreet;//街道 stringcity;//城市 stringeip;//邮编 stringstate;//国家 cout<<"微信:"; cin>>wechatnumber; P->Wechatnumber=wechatnumber; cout<<"街道:"; cin>>street; P->STREET=street; cout<<"城市:"; cin>>city; P->CITY=city; cout<<"国家:"; cin>>state; P->STATE=state; }else{//除了输入y以外都会执行这个 P->Wechatnumber="NULL"; P->STREET="NULL"; P->CITY="NULL"; P->STATE="china"; } } /************************************************** *返回类型:void *函数作用:打印通讯录(所有人名字,逆序) ***************************************************/ voiddisplay_list() { Directory*p;//定义结构体类型的指针 p=head;//让p等于当前head指针所指的节点 inti=1;//显示序号 cout< prev!=NULL)//循环,知道p指向节点的prev指针指向NULL { cout<<""<Name< prev;//指针指向上一个节点 i++; } cout<<"*******************************************"< prev!=NULL)//循环,知道p指向节点的prev指针指向NULL { fout<Name< Mobile< Wechatnumber< STREET< CITY< STATE< prev;//指针指向上一个节点 i++; } fout.close();//关闭文件流 } /************************************************** *返回类型Directory *函数作用:打印详细信息 ***************************************************/ voiddisplay_menu(Directory*P) { if(P==NULL)//判断如果P为空,则打印没有这个人 { cout<<"没有此人!!"< Name< Mobile< Wechatnumber< STREET< CITY< STATE< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。