C++ 双向链表简单实现通讯录
来源:互联网 发布:cloudstack基本网络 编辑:程序博客网 时间:2024/05/01 04:32
#include<iostream>#include <stdlib.h>#include<string>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 *head = &p0;//函数声明void enter(Directory*);void display_list();void display_menu(Directory*);void key_ramove(string);Directory* find_load(string);Directory* load();int main(){ cout<<"==1.添加==2.删除==3.查找==4.查看通讯录=="<<endl; int i = 0; string key; while(1) { cin>>i; switch(i){ case 1: load(); cout<<"添加完成!!!"<<endl; cout<<"==1.添加==2.删除==3.查找==4.查看通讯录=="<<endl; break; case 2: cout<<"请输入名字:"; cin>>key; key_ramove(key); cout<<"==1.添加==2.删除==3.查找==4.查看通讯录=="<<endl; break; case 3: cout<<"请输入名字:"; cin>>key; display_menu(find_load(key)); cout<<"==1.添加==2.删除==3.查找==4.查看通讯录=="<<endl; break; case 4: display_list(); cout<<"==1.添加==2.删除==3.查找==4.查看通讯录=="<<endl; break; default: break; } } return 0;}/*************************************************** 返回类型:Directory** 函数作用:新建节点插入,链表***************************************************/Directory* load(){ Directory *p = new Directory; //给这个新节点分配空间 enter(p); //后面有这个函数的解释 p->next = head->next; //p的下一个指向头指针指向节点的下一个 head->next = p; //头指针指向节点的下一个指向p p->prev = head; //p的上一个指向头指针指向节点的下一个 head = p; //头指针指向p return p; //把这新节点输出}/*************************************************** 返回类型:void* 函数作用:单个节点查找* 传入参数:名字***************************************************/Directory* find_load(string key_name) //思路和删除一样,找到后打印这个节点就行了{ Directory *p; p = head; for(p; p->prev != NULL ;p = p->prev) { if(p->Name == key_name ) { return p; } } return NULL;}/*************************************************** 返回类型:void* 函数作用:单个节点删除* 传入参数:名字***************************************************/void key_ramove(string key_name){ Directory *p; //定义结构体类型的指针 p = head; //指向当前头指针所指向的节点 for(p; p->prev != NULL ;p = p->prev) //循环找名字和key_name一样的节点,直到p的的上一个节点为空 { if(p->Name == key_name ) { p->prev->next = p->next; //p的上一个的下一个指向p的下一个 p->next->prev = p->prev; //p的下一个的上一个指向p的上一个 free(p); //释放p的空间 } }}/*************************************************** 返回类型:void* 函数作用:单个节点输入* 传入参数:Directtory(自己定义的结构体)型指针,***************************************************/void enter(Directory *P ){ char jubge; //用来判断的变量 string name, mobile; cout<<"输入姓名:"; cin>>name; P->Name = name; cout<<"输入电话:"; cin>>mobile; P->Mobile = mobile; cout<<"是否完善信息?(Y/N)"<<endl; cin>>jubge; if(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 = "中国"; P->STATE = "NULL"; }}/*************************************************** 返回类型:void* 函数作用:打印通讯录(所有人名字,逆序)***************************************************/void display_list(){ Directory *p; //定义结构体类型的指针 p = head; // 让p 等于当前head指针所指的节点 int i = 1; //显示序号 cout<<"=================通讯录================="<<endl; while(p->prev != NULL) { cout<<i<<": "<<p->Name<<endl; //打印p指针对应节点的名字 cout<<" --------------------------------- "<<endl; p = p->prev; //指针指向上一个节点 i++; } cout<<"========================================"<<endl;}/*************************************************** 返回类型 Directory* 函数作用:打印详细信息***************************************************/void display_menu(Directory *P){ if(P == NULL) // 判断 如果P为空,则打印没有这个人 { cout<<"没有此人!! "<<endl; }else{ cout<<"* * * * * * * * * * * * * * * * * * * * "<<endl; cout<<"* 姓名: "<<P->Name<<endl; cout<<"* 电话: "<<P->Mobile<<endl; cout<<"* 微信: "<<P->Wechatnumber<<endl; cout<<"* 街道: "<<P->STREET<<endl; cout<<"* 城市: "<<P->CITY<<endl; cout<<"* 国家:"<<P->STATE<<endl; cout<<"* * * * * * * * * * * * * * * * * * * * "<<endl; }}
阅读全文
0 0
- C++ 双向链表简单实现通讯录
- C简单实现双向链表
- C语言实现简单通讯录
- c语言实现简单通讯录
- 利用 双向循环链表 实现通讯录的功能
- 简单易懂的C语言实现双向链表代码
- 双向链表简单实现
- C语言课程设计通讯录链表实现
- 用c语言链表实现通讯录
- c语言链表实现通讯录
- C语言实现的简单通讯录例子
- C语言实现简单的通讯录
- 【C语言】实现一个简单的通讯录
- 简单c编程之实现通讯录
- 用C语言实现简单通讯录
- C语言实现简单的电子通讯录
- C语言实现简单电子通讯录
- C/C++/JAVA 双向链表实现
- 打造浪漫的Android表白程序
- pandas—Dataframe操作(选取 插入 删除)
- 存储器层次结构1
- LDD3 study note 3
- 把android中图片局部区域改为透明
- C++ 双向链表简单实现通讯录
- 微信支付:“当前页面的URL未注册”
- 1.安装cocos2d-js环境(Linux)
- 汇总 Vue 中大家最爱问的高频问题
- IAR 编译 ZStack-CC2530生成 HEX 文件完全配置
- Java中的队列API——Queue
- Hash 学习
- LOL中那些不可错过的精彩对局!!!
- 贪心专练4 区间覆盖