本文实例为大家分享了C++双向链表实现简单通讯录的具体代码,供大家参考,具体内容如下
#include#include #include #include using namespace std; typedef struct Directory { string Name; string Mobile; string Wechatnumber; string STREET; string CITY; string EIP; string STATE; struct Directory* next; struct Directory* prev; }Directory; //头节点初始化 Directory p0 = {"0","0","0","0","0","0","0",NULL,NULL}; Directory pn = {"0","0","0","0","0","0","0",NULL,NULL}; //设置头指针,指向头节点 Directory *head = &p0; //函数声明 void enter(Directory*); void display_list(); void printf_a(); void display_menu(Directory*); int key_ramove(string); void display_listfiile(); Directory* find_load(string); Directory* load(); int main() { cout<<"========================================"< >i; //输入i,用于选择第几个功能 switch(i){//选择,i等于几,就执行case几 case 1: load();//新建节点并插入链表 cout< >key; key_ramove(key); //删除节点,就是删除一个人的信息 printf_a(); break; case 3: cout<<"请输入名字:"; cin>>key; display_menu(find_load(key)); //打印找到节点内的信息,find_load(key)为找节点用的遍历函数 printf_a(); / break; case 4: display_list(); //打印所有节点的名字 printf_a(); break; case 5: display_listfiile(); //把所有节点的信息输入到"address.txt"文件 break; default: break; } } return 0; } void printf_a() { cout<<"----------------------------------------"< next = head->next; //p的下一个指向头指针指向节点的下一个 head->next = p;//头指针指向节点的下一个指向p p->prev = head;//p的上一个指向指针指向节点的下一个 p->next->prev = p; head = p; //头指针指向p return p; } Directory* find_load(string key_name) { Directory *p; p = &pn; for(p; p->prev != NULL ;p = p->prev) { if(p->Name == key_name ) { return p; } } return NULL; } int key_ramove(string key_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的空间 return 0; //删除后,退出函数 } } cout<<"没有此人!!!!"< >name; P->Name = name; //把输入的字符串放到,当前指针指向的节点 cout<<"输入电话:"; cin>>mobile; P->Mobile = mobile; //把输入的字符串放到,当前指针指向的节点 cout<<"是否完善信息?(Y/N)"< >jubge; if(jubge == 'y' || jubge == 'Y') { string wechatnumber; //微信 string street; //街道 string city; //城市 string eip; //邮编 string state; //国家 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 display_list() { Directory *p; //定义结构体类型的指针 p = head; // 让p 等于当前head指针所指的节点 int i = 1; //显示序号 cout< prev != NULL) //循环,知道p指向节点的prev指针指向NULL { cout<<" "<Name< prev; //指针指向上一个节点 i++; } cout<<"*******************************************"< prev != NULL)//循环,知道p指向节点的prev指针指向NULL { fout << i <<":" << p->Name < Mobile < Wechatnumber < STREET < CITY < STATE < prev; //指针指向上一个节点 i++; } fout.close(); //关闭文件流 } void display_menu(Directory *P) { if(P == NULL) // 判断 如果P为空,则打印没有这个人 { cout<<"没有此人!! "< Name< Mobile< Wechatnumber< STREET< CITY< STATE< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



