




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
哈希表制作通訊錄數據結構程序設計哈希表制作通訊錄數據結構程序設計哈希表制作通訊錄數據結構程序設計哈希表制作通訊錄數據結構程序設計編制僅供參考審核批準生效日期地址:電話:傳真:郵編:軟件學院課程設計報告書課程名稱數據結構設計題目哈希表制作通訊錄專業班級學號姓名指導教師2014年1月目錄282491設計時間 1239052設計目的 1223833設計任務 158314設計內容 11891需求分析 117430程序所能達到的功能 121279輸入的形式和輸入的范圍 117546總體設計 12785說明本程序中用到的所有抽象數據類型的定義 117795說明主程序的流程 229830說明各程序模塊之間的層次(調用)關系 321265詳細設計 319140實現概要設計中定義的所有數據類型,對每個操作只需要寫出偽碼算法 314432對主程序和其它主要函數寫出偽碼算法 41376測試 524855附錄 6146555總結與展望 165262參考文獻 189788成績評定 181設計時間2014年1月13日到2014年1月15號2設計目的要求學生掌握數據結構的應用、算法的編寫、類C語言的算法轉換成C程序并上機調試的基本方法。這對于學生基本程序設計素養的培養和軟件工作者工作作風的訓練,將起到顯著的促進作用。3設計任務針對你所在班集體中的“人名”,設計一個哈希表,使得平均查找長度不超過R,完成相應的建表和查找過程。4設計內容(1)每個人的信息至少包括姓名,電話,地址。至少包括對通訊錄的創建,添加和按姓名查找等功能。(2)假設人名為漢語拼音全拼形式,待插入哈希表的長度為你所在班級的人數。哈希函數用除留余數法構造,采用鏈地址法或二次探測再散列法解決沖突。(3)完成菜單設計。操作有必要的提示。需求分析程序所能達到的功能以人命的漢語拼音全拼形式查找你所在班級的人的信息(姓名,電話,地址)輸入的形式和輸入的范圍把人名都到轉換成漢語拼音全拼的形式,人命最大長度不超過20個字符總體設計說明本程序中用到的所有抽象數據類型的定義該程序采用的是結構體類型來處理學生的所有基本信息,如下所述。typedefstruct{/*用結構體類型來處理學生的所有基本信息*/ NAname;/*NA為typedef定義的字符數組類型*/}Record;typedefstruct{/*哈希表*/ Record*elem[HASHSIZE];mainmenu_selectenterddeletelistsearchsavesaveloadexitmainmenu_selectenterddeletelistsearchsavesaveloadexitinputsinsertfinddisplay文件函數之間的相互調用printf("*****************2.刪除信息******************\n");printf("*****************3.顯示信息******************\n");printf("*****************4.查找******************\n");printf("*****************5.存盤******************\n");printf("*****************6.導入******************\n");printf("*****************7.退出******************\n");printf("***********************************************\n");do{printf("\nPleaseenteryourchoice:\n");gets(s);c=atoi(s);/*將獲取的字符串轉換成整型*/ }while(c<0||c>7);returnc;/*返回輸入值*/}對主程序和其它主要函數寫出偽碼算法structaddress*info;/*定義當前結點*/for(;;) {info=(structaddress*)malloc(sizeof(structaddress));/*為當前結點分配空間*/if(!info) { printf("\nOutofmemory");exit(0);/*如果分配空間失敗,退出程序*/ }printf("輸入空姓名結束:\n");inputs("請輸入姓名:",info->name,10);if(!info->name[0])break;/*如果輸入姓名為空,結束循環*/inputs("請輸入街道:",info->street,50);inputs("請輸入城市:",info->city,15);inputs("請輸入國家:",info->state,15);inputs("請輸入電話:",info->tel,7);insert(info,&start,&last);/*調用結點插入函數*/ }測試圖4-1程序運行圖圖4-2輸入信息圖圖4-3顯示信息附錄#include<>#include<>#include<>structaddress{/*定義結構*/charname[10];charstreet[50];charcity[10];charstate[15];chartel[7];structaddress*next;/*后繼指針*/structaddress*prior;/*前驅指針*/};structaddress*start;/*首結點*/structaddress*last;/*尾結點*/structaddress*find(char*);/*聲明查找函數*/voidenter();/*函數聲明*/voidsearch();voidsave();voidload();voidlist();voidddelete(structaddress**start,structaddress**last);voidinsert(structaddress*i,structaddress**start,structaddress**last);voidinputs(char*,char*,int);voiddisplay(structaddress*);intmenu_select(void);voidmain(){start=last=NULL;for(;;){ switch(menu_select()) { case1:enter();continue;case2:ddelete(&start,&last);continue;case3:list();continue;case4:search();continue;case5:save();continue;case6:load();continue;case7:exit(0); }}}intmenu_select(void)/*主目錄*/{chars[80];intc; printf("………………^歡迎使用DOS通訊錄系統^………………\n"); printf("************請在做其它操作前先導入*************\n"); printf("***********************************************\n");printf("*****************1.輸入信息******************\n");printf("*****************2.刪除信息******************\n");printf("*****************3.顯示信息******************\n");printf("*****************4.查找******************\n");printf("*****************5.存盤******************\n");printf("*****************6.導入******************\n");printf("*****************7.退出******************\n");printf("***********************************************\n");do{printf("\nPleaseenteryourchoice:\n");gets(s);c=atoi(s); }while(c<0||c>7);returnc;/*返回輸入值*/}voidenter()/*輸入函數,本函數循環輸入資料,當輸入姓名為空時退出*/{ structaddress*info;/*定義當前結點*/for(;;) {info=(structaddress*)malloc(sizeof(structaddress));/*為當前結點分配空間*/if(!info) { printf("\nOutofmemory");exit(0);/*如果分配空間失敗,退出程序*/ }printf("輸入空姓名結束:\n");inputs("請輸入姓名:",info->name,10);if(!info->name[0]) break;/*如果輸入姓名為空,結束循環*/inputs("請輸入街道:",info->street,50);inputs("請輸入城市:",info->city,15);inputs("請輸入國家:",info->state,15);inputs("請輸入電話:",info->tel,7);insert(info,&start,&last);/*調用結點插入函數*/ }}voidinputs(char*prompt,char*s,intcount)/*輸入函數,有越界檢測功能*/{charp[255];do { printf(prompt);fgets(p,254,stdin);if(strlen(p)>count) printf("\nTooLong\n"); }while(strlen(p)>count);p[strlen(p)-1]=0;strcpy(s,p);}voidinsert(/*數據插入函數*/structaddress*i,structaddress**start,structaddress**last){ if(*last==NULL)/*如果尾結點為空,意味著當前鏈表為空*/{ i->next=NULL;i->prior=NULL;*last=i;*start=i;return;} else {(*last)->next=i;i->prior=*last; i->next=NULL;*last=(*last)->next; }}voidddelete(structaddress**start,structaddress**last)/*刪除函數*/{ structaddress*info;chars[80];inputs("請輸入姓名:",s,10);/*輸入欲刪除結點的name域內容*/info=find(s);/*查找該內容*/if(info)/*如果找到*/ { printf("Deleting\n"); if(*start==info)/*如果該結點為首結點,把該結點的下驅作為新的首結點(入口)*/ { *start=info->next;if(*start) (*start)->prior=NULL;else*last=NULL; }else/*如果欲刪除的結點不是首結點*/ { info->prior->next=info->next;/*令該結點的前驅的next指針指向該結點的后驅,*又令該結點的后驅的prior指點指向該結點的前驅*/if(info!=*last)/*如果該結點是尾結點,則令該結點的前驅為尾結點*/info->next->prior=info->prior;else*last=info->prior; }free(info);/*釋放該結點所占用的內存*/ printf("-Ok,刪除成功!\n"); }}structaddress*find(char*name)/*查找函數,形參為欲查找結點的name域*/{ structaddress*info;info=start;while(info){ if(!strcmp(name,info->name))returninfo;info=info->next;}printf("未找到相關信息.\n");returnNULL;}/*輸出整個鏈表*/voidlist(void){ structaddress*info;info=start; if(info==NULL) printf("當前記錄為空!"); elseprintf("姓名\t街道\t\t城市\t國家\t電話\t\n");while(info) { display(info); if(info->next==NULL){break;}info=info->next; };printf("\n\n"); }voiddisplay(structaddress*info)/*輸出傳入結點函數*/{ printf("%s\t",info->name);printf("%s\t",info->street);printf("%s\t",info->city);printf("%s\t",info->state);printf("%s\t",info->tel);printf("\n");}voidsearch(void)/*查找函數*/{ charname[40];structaddress*info;printf("請輸入要查找的姓名:");/*輸入欲查找的姓名*/gets(name);info=find(name);if(!info) printf("姓名不存在\n");/*如果沒找到,顯示Notfound*/else display(info);/*如果找到,顯示該結點資料*/}voidsave(void)/*保存函數*/{ structaddress*info;FILE*fp; fp=fopen("","wb");/*生成文件*/if(!fp){ printf("Cannotopenfile.\n"); return; }printf("\nSaveing……\n"); info=start;while(info)/*把鏈表寫入文件*/ { fwrite(info,sizeof(structaddress),1,fp);info=info->next; } printf("-ok!\n");fclose(fp);/*鏈表全部寫入文件后,關閉文件*/ }voidload()/*調用預存文件函數*/{ registerintt,size;structaddress*info,*temp=0;char*p;FILE*fp;/*打開文件*/if((fp=fopen("","r"))==NULL) { printf("Cannotopenfile!\n"); return; }printf("\n\nLoading...\n");/*調用文件*/size=sizeof(structaddress);/*為結點分配內存*/ start=(structaddress*)malloc(size);if(!start)/*如果讀取失敗,返回*/ { printf("Outofmemory!\n");exit(0); }info=start;p=(char*)info;while((*p++=getc(fp))!=EOF) { for(t=0;t<size-1;++t)*p++
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南陽工藝美術職業學院《微分方程II》2023-2024學年第一學期期末試卷
- 江蘇省無錫市新區重點名校2024-2025學年初三下學期質量調研(一模)英語試題含答案
- 內江衛生與健康職業學院《體育賽事組織與管理》2023-2024學年第二學期期末試卷
- 四川化工職業技術學院《信息可視化設計》2023-2024學年第二學期期末試卷
- 陜西省榆林市綏德重點中學2024-2025學年初三第三次診斷考試英語試題理試題含答案
- 西安建筑科技大學華清學院《露天開采新技術》2023-2024學年第二學期期末試卷
- 滿洲里市2025年小學六年級第二學期小升初數學試卷含解析
- 云南昆明一中2025屆高三第三次模擬練習物理試題含解析
- 陽光學院《醫學寄生蟲》2023-2024學年第二學期期末試卷
- 江蘇省無錫市青陽片重點名校2025年初三下學期第一次質量考評語文試題試卷含解析
- 燃氣工程專業中級職稱理論考試題庫-建設工程專業中級職稱理論考試題庫
- 十二指腸球部潰瘍PPT課件
- 鐵路建設項目施工企業信用評價辦法(鐵總建設〔2018〕124號)
- 誘導公式練習題-(中職)
- 2016年浦東新區公辦小學招生地段
- 鴿巢問題(例1、例2)[1]
- 01戴明十四條
- 完整版佛教葬禮儀式
- 【課件】第六章 模型或原型的制作課件-高中通用技術蘇教版(2019)必修《技術與設計1》
- 鍋爐除氧器過程控制課程設計
- 統計法培訓課PPT課件
評論
0/150
提交評論