您好,登錄后才能下訂單哦!
小編這次要給大家分享的是C++雙向鏈表如何實現(xiàn)簡單通訊錄,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
#include<iostream> #include<fstream> #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; //頭節(jié)點初始化 Directory p0 = {"0","0","0","0","0","0","0",NULL,NULL}; Directory pn = {"0","0","0","0","0","0","0",NULL,NULL}; //設(shè)置頭指針,指向頭節(jié)點 Directory *head = &p0; //函數(shù)聲明 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<<"========================================"<<endl; cout<<"= 通 訊 錄 ="<<endl; cout<<"= ="<<endl; cout<<"= ="<<endl; cout<<"= 1.添加 2.刪除 3.查找 4.查看通訊錄 ="<<endl; cout<<"========================================"<<endl; int i = 0; //定義按鍵變量,存放鍵值 string key; //定義字符串變量,存放輸入的字符串 p0.next = &pn; //這倆句是初始化頭尾節(jié)點,頭尾節(jié)點連起來 pn.prev = &p0; while(1) { cin>>i; //輸入i,用于選擇第幾個功能 switch(i){ //選擇,i等于幾,就執(zhí)行case幾 case 1: load(); //新建節(jié)點并插入鏈表 cout<<endl; cout<<"添加完成?。?!"<<endl; printf_a(); break; case 2: cout<<"請輸入名字:"; cin>>key; key_ramove(key); //刪除節(jié)點,就是刪除一個人的信息 printf_a(); break; case 3: cout<<"請輸入名字:"; cin>>key; display_menu(find_load(key)); //打印找到節(jié)點內(nèi)的信息,find_load(key)為找節(jié)點用的遍歷函數(shù) printf_a(); / break; case 4: display_list(); //打印所有節(jié)點的名字 printf_a(); break; case 5: display_listfiile(); //把所有節(jié)點的信息輸入到"address.txt"文件 break; default: break; } } return 0; } /************************************************** * 返回類型:void * 函數(shù)作用:打印菜單 ***************************************************/ void printf_a() { cout<<"----------------------------------------"<<endl; cout<<"- 1.添加 2.刪除 3.查找 4.查看通訊錄 -"<<endl; cout<<"- 5.導(dǎo)出txt文檔 -"<<endl; cout<<"----------------------------------------"<<endl; } /************************************************** * 返回類型:Directory* * 函數(shù)作用:新建節(jié)點插入,鏈表 ***************************************************/ Directory* load() { Directory *p = new Directory; //給這個新節(jié)點分配空間 enter(p); p->next = head->next; //p的下一個指向頭指針指向節(jié)點的下一個 head->next = p; //頭指針指向節(jié)點的下一個指向p p->prev = head; //p的上一個指向指針指向節(jié)點的下一個 p->next->prev = p; head = p; //頭指針指向p return p; } /************************************************** * 返回類型:void * 函數(shù)作用:單個節(jié)點查找 * 傳入?yún)?shù):名字 10分 ***************************************************/ 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; } /************************************************** * 返回類型:void * 函數(shù)作用:單個節(jié)點刪除 * 傳入?yún)?shù):名字 15分 ***************************************************/ int key_ramove(string key_name) { Directory *p; //定義結(jié)構(gòu)體類型的指針 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; //刪除后,退出函數(shù) } } cout<<"沒有此人!?。。?quot;<<endl; return 0; } /************************************************** * 返回類型:void * 函數(shù)作用:單個節(jié)點輸入 * 傳入?yún)?shù):Directtory(自己定義的結(jié)構(gòu)體)型指針, 5分 ***************************************************/ void enter(Directory *P ) { char jubge; //用來判斷的變量 string name, mobile; cout<<"輸入姓名:"; cin>>name; P->Name = name; //把輸入的字符串放到,當(dāng)前指針指向的節(jié)點 cout<<"輸入電話:"; cin>>mobile; P->Mobile = mobile; //把輸入的字符串放到,當(dāng)前指針指向的節(jié)點 cout<<"是否完善信息?(Y/N)"<<endl; cin>>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以外都會執(zhí)行這個 P->Wechatnumber = "NULL"; P->STREET = "NULL"; P->CITY = "NULL"; P->STATE = "china"; } } /************************************************** * 返回類型:void * 函數(shù)作用:打印通訊錄(所有人名字,逆序) ***************************************************/ void display_list() { Directory *p; //定義結(jié)構(gòu)體類型的指針 p = head; // 讓p 等于當(dāng)前head指針?biāo)傅墓?jié)點 int i = 1; //顯示序號 cout<<endl; cout<<"*******************************************"<<endl; cout<<" 通 訊 錄 "<<endl; cout<<"------------------------------------------"<<endl; while(p->prev != NULL) //循環(huán),知道p指向節(jié)點的prev指針指向NULL { cout<<" "<<i<<": "<<p->Name<<endl; //打印p指針對應(yīng)節(jié)點的名字 cout<<"------------------------------------------"<<endl; p = p->prev; //指針指向上一個節(jié)點 i++; } cout<<"*******************************************"<<endl; cout<<endl; } void display_listfiile() { Directory *p; //定義結(jié)構(gòu)體類型的指針 p = &pn; // 讓p 等于當(dāng)前head指針?biāo)傅墓?jié)點 int i = 1; //顯示序號 ofstream fout("address.txt"); //打開address.txt文件,沒有自動創(chuàng)建 while(p->prev != NULL) //循環(huán),知道p指向節(jié)點的prev指針指向NULL { fout << i <<":" << p->Name <<endl; //把當(dāng)前節(jié)點的名字輸出到address.txt文件 fout <<" " << p->Mobile <<endl; fout <<" " << p->Wechatnumber <<endl; fout <<" " << p->STREET <<endl; fout <<" " << p->CITY <<endl; fout <<" " << p->STATE <<endl; fout <<endl; p = p->prev; //指針指向上一個節(jié)點 i++; } fout.close(); //關(guān)閉文件流 } /************************************************** * 返回類型 Directory * 函數(shù)作用:打印詳細信息 ***************************************************/ 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; } }
看完這篇關(guān)于C++雙向鏈表如何實現(xiàn)簡單通訊錄的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。