您的当前位置:首页正文

数据结构-链表操作-C++

2024-09-15 来源:意榕旅游网
数据结构 C++ 链表管理 联系人管理

//file main.cpp

#include #include #include #include \"class.cpp\" using namespace std;

void InitList(Person *&L);//初始化 void Destroy(Person *&L);//全部销毁

bool ListEmpty(Person * L);//判断表是否为空;空=true;非空=false; int ListLength(Person *L);//求表长 void Display(Person *L);//输出

PersonInfo InputInfo(char _name[]);//输入联系人,结构体对象 void Inset(Person *&L,PersonInfo per);//头插法插入

bool FindPerson(Person *L,char _name[]);//判断联系人是否存在 void getPerson(Person *L ,char _name[]);//查找指定联系人 void Delete_data(Person *& L,char _name[]);//删除目标元素 void SaveFile(Person *L );//保存到文件中 void GetFromFile(Person *& L);//读取文件 void Order();

int scan();//扫描输入的数据 void main() { cout<<\"***通讯录***\"<>judgeName; if (!FindPerson(list,judgeName))

{ Inset(list,InputInfo(judgeName)); } break;

case 2://输出所有联系人 if(!ListEmpty(list)) { Display(list); } else cout<<\"通讯录为空\"<case 3://查找指定联系人 cout<<\"请输入姓名: \"; cin>>judgeName; getPerson(list,judgeName); break;

case 4://删除联系人 cout<<\"请输入姓名: \"; cin>>judgeName; Delete_data(list,judgeName); break; case 5://统计 if (ListEmpty(list)) { cout<<\"通讯录为空\"<case 7://保存到磁盘 SaveFile(list); cout<<\"保存成功!\"<} }

void Order() { cout<<\"0.弹出菜单\"<int scan() { int i=-1; cin>>i; if (i>=0&&i<=10) { return i; } else return -1; }

//初始化

void InitList(Person *&L)

{//带有头结点,头结点不存放数据 L->next=NULL; }

//全部销毁

void Destroy(Person *&L) { Person *pre=L->next,*p=pre->next; while (p!=NULL) { free(pre); pre=p; p=pre->next; }

free(pre); L->next=NULL; }

//判断表是否为空

bool ListEmpty(Person * L) { return(L->next==NULL); }

//求表长

int ListLength(Person *L) { int n=0; Person *p=L; while (p->next!=NULL) { n++; p=p->next; } return n; }

//输出

void Display(Person *L) { Person *p=L->next;//头结点不带数据 while (p!=NULL) { cout<<\"姓名: \"<data.name<data.phone<data.e_mail<data.address<next; } }

//输入联系人

PersonInfo InputInfo(char _name[]) { PersonInfo p; //p.name=_name; strcpy(p.name,_name); cout<<\"请输入电话号码: \";

cin>>p.phone; cout<<\"请输入电子邮件地址: \"; cin>>p.e_mail; cout<<\"请输入地址: \"; cin>>p.address; cout<<\"已录入完成\"<//头插法

void Inset(Person *&L,PersonInfo per) { Person * pp=new Person; pp->data=per; pp->next=L->next; L->next=pp; }

//判断联系人是否存在

bool FindPerson(Person *L,char _name[]) { Person *p=L->next; while (p!=NULL&&(strcmp(p->data.name,_name)!=0)) { p=p->next; } if (p==NULL) { return false;//没找到 } else { cout<<\"已存在联系人\"<data.name<data.phone<data.e_mail<data.address<//查找指定联系人

void getPerson(Person *L ,char _name[]) {

Person *p=L->next; while (p!=NULL&&(strcmp(p->data.name,_name)!=0)) { p=p->next; } if (p==NULL) { cout<<\"没找到...\"<data.name<data.phone<data.e_mail<data.address<//删除目标元素

void Delete_data(Person * & L,char _name[]) { Person * pre=L,*p=L->next; while (p!=NULL && (strcmp(p->data.name,_name)!=0)) { pre=p; p=p->next; } if (p==NULL) { cout<<\"未找到该联系人\"<next=p->next; free(p); cout<<\"已删除\"<//保存文件

void SaveFile(Person *L ) { ofstream outfile(\"user.dat\ if (!outfile) { cerr<<\"open error !\"<} outfile<next;//头结点不带数据 while (p!=NULL) { outfile<data.name<<\" \"; outfile<data.phone<<\" \"; outfile<data.e_mail<<\" \"; outfile<data.address<<\" \"; p=p->next; } outfile.close(); }

//读取文件

void GetFromFile(Person *& L) { ifstream infile(\"user.dat\ if (!infile) { return ; } else { Person *s,*r; int i=0,total=0; r=L;//r始终指向头结点 infile>>total; for (i=0;i>s->data.name; infile>>s->data.phone; infile>>s->data.e_mail; infile>>s->data.address; r->next=s;//将s插入到r之后 r=s; } r->next=NULL; infile.close(); } }

//file class.cpp

//定义通讯录每个人的个人信息结构体类型 struct PersonInfo { char name[20];//姓名 char phone[20];//电话号码 char e_mail[20];//邮箱 char address[50];//地址 };

//定义通讯录链表的结构体类型 struct Person { PersonInfo data; Person * next; };

因篇幅问题不能全部显示,请点此查看更多更全内容