




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
/實驗報告實驗名稱單鏈表通訊錄一、實驗?zāi)康氖炀氄莆站€性表的類型定義方法、存儲方法及其基本運(yùn)算〔元素的插入、刪除等的實現(xiàn)方法,培養(yǎng)綜合運(yùn)用所學(xué)知識,根據(jù)具體問題進(jìn)行數(shù)據(jù)結(jié)構(gòu)設(shè)計和算法設(shè)計的能力。二、實驗內(nèi)容1.用帶頭結(jié)點(diǎn)的單鏈表作存儲結(jié)構(gòu),實現(xiàn)通訊錄單鏈表的建立、查詢、修改、排序、合并、統(tǒng)計、結(jié)點(diǎn)的查找、移動以及通訊錄鏈表的輸出功能。三、實驗要求設(shè)計要求:為了實現(xiàn)通訊錄管理的操作功能,首先設(shè)計一個含有多個菜單項的主控菜單程序,然后再為這些菜單項配上相應(yīng)的功能。主控菜單設(shè)計要求:菜單內(nèi)容程序運(yùn)行后,給出9個菜單項的內(nèi)容和輸入提示:1.創(chuàng)建通訊錄鏈表;2.將姓名為Name的好友的手機(jī)號改為MTel;3.輸出通訊錄;4.插入姓名為Name、手機(jī)號為MTel的好友信息,將鏈表中姓名≤Name的結(jié)點(diǎn)放到該結(jié)點(diǎn)的前面,將姓名>Name的結(jié)點(diǎn)放到該結(jié)點(diǎn)后面5.將通訊錄按照好友姓名進(jìn)行非遞減排序;6.將兩個按姓名非遞減排序的通訊錄合并為一個,姓名相同且手機(jī)號相同的好友記錄在結(jié)果中只保留一個;7.統(tǒng)計籍貫是"XX"的好友人數(shù);8.將通訊錄中倒數(shù)第k個結(jié)點(diǎn)之后的所有結(jié)點(diǎn)移到頭結(jié)點(diǎn)后面〔保持結(jié)點(diǎn)間的先后順序;9.將通訊錄的正中間位置結(jié)點(diǎn)之后的全部結(jié)點(diǎn)倒置;0.退出管理系統(tǒng)請選擇0—9:菜單設(shè)計要求:使用數(shù)字0—9來選擇菜單項,其它輸入則不起作用。四、實驗概要設(shè)計1>功能框圖五.使用說明1.運(yùn)行環(huán)境:VC6.02.首先選擇主控菜單中的操作1,即建表,然后進(jìn)行其它操作.六.實驗截圖<見下頁>七實驗體會附源程序代碼:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineNewsp<TxlList*>malloc<sizeof<structTxlList>>typedefstructTxlList { char Name[16]; //姓名 charMTel[11]; //手機(jī)號 char Tel[9]; //固定電話 char EMail[16]; //郵箱地址 char BornAddr[20]; //籍貫<值域:"北京"、"上海"、"XX"等等,只寫城市名稱>char BroadN[50];//博客名 structTxlList*next; //指針域 }TxlList,*TxlLink;voidLbuild1<TxlLink&T>{//創(chuàng)建文件 FILE*fp; TxlLinkq; q=Newsp; q=T; intNUM; charfilename[20]; printf<"\n*請輸入要創(chuàng)建的通訊錄名:\n">; gets<filename>; if<<fp=fopen<filename,"wb">>==NULL>{/*以寫方式在當(dāng)前目錄打開〔新建文件*/ printf<"can'topenfile?。?!\n">; exit<0>;//如果文件無法打開,關(guān)閉已經(jīng)打開的其它文件,結(jié)束程序。 } printf<"*請輸入要儲存的人數(shù):">; scanf<"%d",&NUM>; getchar<>; for<inta=0;a<NUM;a++>{ TxlLinkp; p=Newsp; printf<"\n*請輸入第%d個人的數(shù)據(jù),按回車鍵結(jié)束,數(shù)據(jù)若為空請輸"無"",a+1>; printf<"\n*姓名:">; gets<p->Name>; printf<"*手機(jī)號:">; gets<p->MTel>; printf<"*固定電話:">; gets<p->Tel>; printf<"*郵箱地址:">; gets<p->EMail>; printf<"*籍貫:">; gets<p->BornAddr>; printf<"*博客名:">; gets<p->BroadN>; p->next=NULL; q->next=p; q=q->next; if<fprintf<fp,"%s%s%s%s%s%s\n",p->Name,p->MTel,p->Tel,p->EMail,p->BornAddr,p->BroadN>==1>//向文件中一次寫一個結(jié)構(gòu)體量值 { printf<"filewriteerror\n">; break; } } fclose<fp>;}voidLbuild2<TxlLink&T>{//讀取文件 FILE*fp; TxlLinkq; q=Newsp; q=T; charfilename[20]; printf<"\n*請輸入要讀取的通訊表名:\n">; gets<filename>; if<<fp=fopen<filename,"rb">>==NULL>{ printf<"can'topenfile?。。n">; exit<0>;//如果文件無法打開,關(guān)閉已經(jīng)打開的其它文件,結(jié)束程序。 } while<!feof<fp>>{ TxlLinkp; p=Newsp; fscanf<fp,"%s%s%s%s%s%s",p->Name,p->MTel,p->Tel,p->EMail,p->BornAddr,p->BroadN>; q->next=p; p->next=NULL; q=q->next; } fclose<fp>;}voidBuild<TxlLink&T>{//選擇建立方式的函數(shù) intChoice; printf<"*******************************************************************">; printf<"\n*請輸入想要實現(xiàn)的功能編號:\n">; printf<"*1.新建通訊錄;\n*2.輸出已有有通訊錄;\n*其它-退出。\n*選擇為:">; scanf<"%d",&Choice>; printf<"*******************************************************************">; getchar<>; switch<Choice>{ case1: { Lbuild1<T>; break; } case2:{ Lbuild2<T>; break; } default: { printf<"無通訊錄\n\n">; break; } }}voidUpdate<TxlLink&T,char*Name,char*MTel>{//將姓名為Name的好友的手機(jī)號改為MTel; TxlLinkp; p=T->next; while<p>{ if<strcmp<p->Name,Name>==0>{ strcpy<p->MTel,MTel>; } p=p->next; }}voidBuildnew<TxlLink&T>{//創(chuàng)建一個空資料單元 chara[]="無"; strcpy<T->Name,a>; strcpy<T->MTel,a>; strcpy<T->EMail,a>; strcpy<T->BornAddr,a>; strcpy<T->BroadN,a>; strcpy<T->Tel,a>; T->next=NULL;}voidOutPut<TxlLinkT>{//輸出通訊表數(shù)據(jù) TxlLinkp; p=Newsp; p=T->next; printf<"*******************************************************************">; printf<"\n*通訊錄信息:\n姓名,手機(jī)號,固定電話,郵箱地址,籍貫,博客名分別為:\n">; while<p>{ printf<"%s%s%s%s%s%s\n",p->Name,p->MTel,p->Tel,p->EMail,p->BornAddr,p->BroadN>; p=p->next; }}voidSort<TxlLink&T>{//將該通訊錄按照好友姓名進(jìn)行非遞減排序 TxlLinkp,q,r; p=T; q=p->next; intSUM=0; while<q>{//記錄通訊表數(shù)據(jù)個數(shù) SUM++; q=q->next; } q=p->next; for<inti=0;i<SUM;i++>{ for<intj=0;j<SUM-i;j++>{ r=q->next; if<r>{ if<strcmp<q->Name,r->Name>>0>{ p->next=r; q->next=r->next; r->next=q; } p=p->next; q=p->next; } } p=T; q=p->next; r=q->next; }}voidMerge<TxlLink&T1,TxlLink&T2>{//將兩個按姓名非遞減排序的通訊錄合并為一個,姓名相同且手機(jī)號相同的好友記錄在結(jié)果中只保留一個Sort<T1>;Sort<T2>;TxlLinkp,q,r,t,head;p=T1->next;q=T2->next;head=T1;while<p||q>{ r=p; t=q; if<strcmp<p->Name,q->Name>>0> { q=q->next; head->next=t; head=head->next; head->next=NULL; printf<"w">; } elseif<strcmp<p->Name,q->Name><0> { p=p->next; head->next=r; head=head->next; head->next=NULL; } else{ if<strcmp<p->MTel,q->MTel>>0>{ q=q->next; head->next=t; head=head->next; head->next=NULL; } elseif<strcmp<p->MTel,q->MTel><0>{ p=p->next; head->next=r; head=head->next; head->next=NULL; } else{ p=p->next; free<r>; printf<"x">; } } if<!p>{ while<q>{ head->next=q; q=q->next; head=head->next; head->next=NULL; } } if<!q>{ while<p>{ head->next=p; p=p->next; head=head->next; head->next=NULL; } }}T2=T1;}voidInsert<TxlLink&T,char*Name,char*MTel>{//插入姓名為Name、手機(jī)號為MTel的好友信息,將鏈表中姓名≤Name的結(jié)點(diǎn)放到該結(jié)點(diǎn)的前面,將姓名>Name的結(jié)點(diǎn)放到該結(jié)點(diǎn)后面; Sort<T>; TxlLinkp,q,r; intn=1; r=Newsp; Buildnew<r>; strcpy<r->Name,Name>; strcpy<r->MTel,MTel>; p=T->next; q=p->next; while<q>{ if<strcmp<p->Name,r->Name>>=0> { T->next=r; r->next=p; n=0; break; } if<strcmp<p->Name,r->Name><=0>{ if<strcmp<q->Name,r->Name>>=0> { p->next=r; r->next=q; n=0; break; } } p=p->next; q=q->next; } if<n==1>{ p->next=r; }}intCount<TxlLinkT>{//統(tǒng)計籍貫是某地的好友人數(shù); intx=0; charBornAddr[20]; TxlLinkp; p=T->next; printf<"*請輸入要查詢的地址:">; gets<BornAddr>; while<p>{ if<strcmp<p->BornAddr,BornAddr>==0> x++; p=p->next; } returnx;}intNumber1<TxlLinkp,TxlLink&r,TxlLink&t,intk>{//運(yùn)用遞歸方法找到倒數(shù)第k個結(jié)點(diǎn)的地址 intx=0; TxlLinkq; if<p>{ q=p; p=p->next; x=Number1<p,r,t,k>+1; } if<k==x> r=q; if<<k+1>==x> t=q; returnx;}intNumber2<TxlLinkp,TxlLink&r,TxlLink&t,int&k>{//運(yùn)用遞歸方法找到倒數(shù)第k個的地址 intx=0; TxlLinkq; if<p>{ q=p; k++; p=p->next; x=Number2<p,r,t,k>+1; } if<<k/2>==x> r=q; if<<k/2+1>==x> t=q; returnx;}voidMoveK<TxlLink&T,intk>{//將通訊錄中倒數(shù)第k個結(jié)點(diǎn)之后的所有結(jié)點(diǎn)移到頭結(jié)點(diǎn)后面 intx; TxlLinkp,q,r,t; p=T->next; x=Number1<p,r,t,k>; T->next=r; t->next=NULL; while<r>{ q=r; r=r->next; } q->next=p;}voidReverseN<TxlLinkT>{//將通訊錄的正中間位置結(jié)點(diǎn)之后的全部結(jié)點(diǎn)倒置 intk=0; TxlLinkp,q,r,t; p=T->next; Number2<p,r,t,k>; T->next=r; t->next=NULL; while<r>{ q=r; r=r->next; } q->next=p;}intmain<void>{ TxlLinkP; intx=1; P=Newsp; Build<P>; intChoice; while<x>{ printf<"\n*請輸入想要實現(xiàn)的功能編號:\n">; printf<"*1.排序;\n*2.插入信息;\n*3.更改手機(jī);\n*4.合并;\n*5.統(tǒng)計籍貫人數(shù);\n*6.移節(jié)點(diǎn);\n*7.倒置鏈表;\n*其它-退出。\n*選擇為:">; scanf<"%d",&Choice>; getchar<>; switch<Choice> { case1: { printf<"*******************************************************************">; printf<"\n************************排序前的通訊表*************************\n">; OutPut<P>; Sort<P>; printf<"\n************************排序后的通訊表*************************\n">; OutPut<P>; break; } case2: { printf<"\n*************************插入前的通訊錄*************************\n">; OutPut<P>; charname[16],mtel[11]; printf<"\n*請輸入要插入的好友姓名:">; gets<name>; printf<"\n*請輸入要插入的好友號碼:">; gets<mtel>; Insert<P,name,mtel>; printf<"\n*************************插入后的通訊錄*************************\n">; OutPut<P>; printf<"********************************************************************">; break; } case3: { printf<"\n*************************改寫前的通訊錄*************************\n">; OutPut<P>; charname[16],mtel[11]; printf<"\n*請輸入要改寫的好友姓名:">; gets<name>; printf<"\n*請輸入要改寫的好友號碼:">; gets<mtel>; Update<P,name,mtel>; printf<"\n*************************改寫后的通訊錄*************************\n">; OutPut<P>; printf<"********************************************************************">; break; } case4: { TxlLinkQ; Q=Newsp; printf<"********************************************************************">; printf<"\n*建立另一個通訊錄\n">; Build<Q>; printf<"\n*第一個通訊錄\n">; OutPut<P>; printf<"\n*第二個通訊錄\n">; OutPut<Q>; Merge<P,Q>; printf<"\n**********************合并并排序后的通訊錄******************
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度股權(quán)轉(zhuǎn)讓及經(jīng)營權(quán)轉(zhuǎn)讓一體化協(xié)議
- 二零二五年度居民住房租賃合同租賃房屋租賃期限調(diào)整協(xié)議
- 二零二五年度保密信息處理保密合同
- 綠茶茶園承包經(jīng)營合同(2025年度)含茶樹病蟲害防治服務(wù)
- 二零二五年度農(nóng)村宅基地買賣合同協(xié)議書(農(nóng)村產(chǎn)權(quán)交易平臺)
- 二零二五年度個人私下股權(quán)轉(zhuǎn)讓及投資風(fēng)險分擔(dān)協(xié)議
- 代理銷售合同市場拓展策略約定事項說明
- 三字經(jīng)儒家經(jīng)典讀后感
- 歷史人物事件記憶題
- 企校合作辦學(xué)合同
- 怎樣防治魚的中華魚鳋病
- GRR-計數(shù)型(范例填寫)
- VDA6.3:2023 汽車核心工具自我評估測試題庫真題 (含答案)
- “中藥配送服務(wù)中心”方案
- GRR表格MSA第四版完整版
- 第一講 新媒體藝術(shù)基礎(chǔ)-數(shù)字媒體藝術(shù)導(dǎo)論課件PPT
- 2023年山東電子職業(yè)技術(shù)學(xué)院單招面試模擬試題及答案解析
- 全口義齒修復(fù)有關(guān)的基本知識 全口義齒固位和穩(wěn)定
- 內(nèi)科學(xué)尿路感染(講課)
- GB/T 605-2006化學(xué)試劑色度測定通用方法
- GB/T 27924-2011工業(yè)貨架規(guī)格尺寸與額定荷載
評論
0/150
提交評論