下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告題目:單鏈表操作專業(yè):計算機科學(xué)與技術(shù)班級:單鏈表操作針對帶頭結(jié)點的單循環(huán)鏈表,編寫實現(xiàn)以下操作的算法函數(shù)實現(xiàn)要求: 單鏈表建立函數(shù) create :先輸入數(shù)據(jù)到一維數(shù)組 AM 中,然后根據(jù)一維 數(shù)組AM建立一個單循環(huán)鏈表,使鏈表中個元素的次序與AM中各元素的次序相同,要求該函數(shù)的時間復(fù)雜度為 O(m); 定位查找函數(shù) Locate :在所建立的單循環(huán)鏈表中查找并返回值為 key 的 第 1 個元素的結(jié)點指針;若找不到,則返回 NULL; 求出該鏈表中值最大和次大的元素值, 要求該算法的時間復(fù)雜度為 O(m), 最大和次大的元素值通過指針變量帶回,函數(shù)不需要返回值; 將鏈表
2、中所有值比 key( 值 key 通過形參傳入 ) 小的結(jié)點作為值為 key 的結(jié) 點前驅(qū),所有值比 key 大的結(jié)點作為值為 key 的結(jié)點后繼,并盡量保持原有 結(jié)點之間的順序,要求該算法的時間復(fù)雜度為 O(m); 設(shè)計一個菜單,具有上述處理要求和退出系統(tǒng)功能。1. 本人完成的工作:一、定義結(jié)構(gòu)體: LNode二、編寫以下函數(shù):(1)建立單循環(huán)鏈表(2)建立定位查找函數(shù)(3)求出鏈表中最大和次大值(4)將鏈表中的值和輸入的 Key比較,小的作為key前驅(qū)結(jié)點,大的作為key 的后繼結(jié)點三、設(shè)計具有上述處理要求和退出系統(tǒng)菜單2. 所采用的數(shù)據(jù)結(jié)構(gòu):單鏈表數(shù)據(jù)結(jié)構(gòu)的定義:typedef stru
3、ct Node/定義結(jié)點的結(jié)構(gòu)體DataType data;/數(shù)據(jù)域struct Node *next;/指針域LNode;/ 結(jié)點的類型3.所設(shè)計的函數(shù)( 1) Create(void)LNode *Create(void) / 建立單循環(huán)鏈表,鏈表頭結(jié)點 head 作為返回值 int i,j,n,AM;/ 建立數(shù)組 A【M】/ 創(chuàng)建空單循環(huán)鏈表/ 輸入數(shù)組/ 保存數(shù)組元素LNode *head,*p,*move;head=(LNode*)malloc(sizeof(LNode);head-next=head;move=head;printf( 請輸入數(shù)組元素的個數(shù): ); scanf(%d
4、,&n);printf( 請輸入數(shù)組: );for(i=0;in;i+)scanf(%d,&Ai);/ 勾鏈建表,使鏈表中元素的次序與數(shù)組 A 各元素次序相同 for(j=0;jdata=Aj;p-next=move-next; move-next=p;move=move-next;/ 返回頭指針 return head;(2) Locate(LNode *head,DataType key)LNode *Locate(LNode *head,DataType key) / 建立定位查找函數(shù) LocateLNode *q=head-n ext;/查找并返回值為key的第1個元素的結(jié)點指針;若找
5、不到,則返回NULLwhile(q!=head & q-data!=key)q=q-n ext;if(q-data=key)return q;elseprintf(查找的結(jié)點不存在! n);return NULL;Y(3) Search(LNode *head,DataType *a,DataType *b)/求鏈表的最大值和次大值,分別由*a和*b帶回void Search(LNode *head,DataType *a,DataType *b)LNode *p,*Max,*Secmax;p=head-next-next;/*Max 和*Secmax指第一個結(jié)點,*p 指向第二個結(jié)點,Max
6、=head-next;Secmax=head-next-next;while(p!=head)if(Max-data p-data)/*Max 指向最大值if(p-data Secmax-data)Secmax=p;else/*Sexmax 指向次大值Secmax=Max;Max=p;p=p-next;*a=Max-data;/把最大和次大值分別賦值給*a和*b*b=Secmax-data;LNode *k,*p,*front,*rear,*L;front=head;p=head-next;printf( 請輸入 key:);scanf(%d,&key);L=Locate(head,key);
7、k=L;rear=k; while(p!=head)if(front-next!=k)if(p-data k-data)/4) Sort(LNode *head)/ 查找 key, 把鏈表中比 key 小的作為前驅(qū)結(jié)點,比 key 大的作為后繼結(jié)點LNode *Sort(LNode *head) /*front 指向 key 前部分鏈表, *rear 指向 key 后部分鏈表DataType key;/ 調(diào)用 Locate() 查找 key/ 判斷 key 前面鏈表是否已經(jīng)比較完畢 將 key 結(jié)點前驅(qū)比 key 大的插到 key 后面front-next=front-next-next; p
8、-next=rear-next; rear-next=p; rear=rear-next; p=front-next;elsep=p-next;front=front-next;/ 斷開結(jié)點/ 插入結(jié)點/*p 指回 key 的前驅(qū)結(jié)點/ 移動指針/ 斷開結(jié)點/ 插入結(jié)點/*p 指回 key 的后繼結(jié)點/ 移動指針/ 返回頭指針elsep=rear-next;if(p-data data)/將 key 結(jié)點后繼比 key 小的插到 key 前面rear-next=rear-next-next; p-next=front-next; front-next=p; front=front-next;
9、p=rear-next;elsep=p-next; rear=rear-next; return head;開始LNode *k,*p,*fro nt,*rear,*L;DataType key; fron t=head; p=head-n ext; printf(” 請輸入 key:); sca nf(%d,&key); L=Locate(head,key);k=L;rear=k;NNfront-n ext=fr ont-n ext- n ext;p-n ext=rear- n ext;rear-n ext=p;rear=rear- n ext;p=front-n ext;rear-n ex
10、t=rear- n ext-n ext; p-n ext=fr ont-n ext;fron t- n ext=p; front=front-n ext;p=rear- n ext;p=p-n ext; fron t=fr ont-nextp=p-n ext; rear=rear- n ext;retur n head;結(jié)束L( 5)主函數(shù):/ 主函數(shù)void main()LNode *L,*W,*H;DataType a,b;int key,choice;/choice 記載操作 ,key 為輸入值printf(*n);printf(n);H=Create(); / 調(diào)用 Create()
11、建立單循環(huán)鏈表 / 界面美化 printf(n);f*printf(*n);printf(*定位查找1*n);printf(*輸出最大和次大值2 *n);printf(*輸出比較值key后的結(jié)果3 *n);printf(*重新輸入一個數(shù)組4 *n);printf(*退出系統(tǒng)0*n);printf(*n);printf(f*n);printf(n);/ 功能選擇printf( 請選擇系統(tǒng)功能 :);scanf( %d, &choice);printf(n);while(choice != 0)switch (choice)case 1:printf( 請輸入要查找的值: ); scanf(%d,
12、&key); L=Locate(H,key);if(L!=NULL)printf( 查找成功 !n);break;case 2:Search(H,&a,&b);printf( 最大值: %dn,a); printf( 次大值: %dn,b);break;case 3:/ 查找數(shù)值 key 并返回指針/ 求鏈表的最大和次大值/ 將 key 插入鏈表中H=Sort(H);printf(*n);W=H-next;printf( 結(jié)果是: ); while(W!=H)printf( %d,W-data);/ 輸出結(jié)果/ 依次輸出W=W-next; printf(n);break;case 4:main
13、();default:printf( 請輸入正確的選項! !n);/ 錯誤處理/ 功能重復(fù)f*4 *n);退printf(*printf(*printf(*定位查找1 *n);printf(*輸出最大和次大值2 *n);printf(*輸出比較值key后的結(jié)果3 *n);printf(*重新輸入一個數(shù)組*n);出系統(tǒng)0 *n);printf(*n);printf(*n);printf(請選擇系統(tǒng)功能:);sea nf(” d, & choice);4運行結(jié)果:且目/, 券養(yǎng)i5103 (566 321 211 2133 65654 415大號五直二找大英先皇1H.旳結(jié)爭-rJMMMMMMNMX
14、MXMKMM MM MM KMKMXMrfMMMM1KKMNMNMPMr KM KM NM MFKH MMMM M MXM X霍二找大燹猊付岀幕出rl* H-stle退右累蜒一 -_0 *MM鯉璨聲虧茶二二二二二二二二二二二二二二二虧:請選擇系統(tǒng)功能詡nna finy )(u fcn cnnlziniim找大費繞 咅出新曲 定Bs迫杲415 f.bf-h W1335.問題與總結(jié)(1)在編寫Create()函數(shù)時,要根據(jù)一維數(shù)組 A【M建立單循環(huán)鏈表,一開始 只是用 for 語句結(jié)合頭結(jié)點創(chuàng)建單鏈表方法。 后來測試時發(fā)現(xiàn)這樣無法建立有序 的單循環(huán)鏈表,要定義一個移動指針 *move 總是指向鏈表最后一個結(jié)點。( 2)在編寫 Search() 函數(shù)時, 一開始是找出鏈表中最大值, 然后刪去這個結(jié)點, 在剩下的結(jié)點中找出最大值,最后輸出。 但后來測試整個程序運行時, 出現(xiàn)每次 執(zhí)行 Search() 的功能后,別的函數(shù)就執(zhí)行不了,調(diào)試之后才知道是找最大和次 大值破壞了鏈表的完整性, 導(dǎo)致其他函數(shù)執(zhí)行
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 貴州電力職業(yè)技術(shù)學(xué)院《Python編程原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴陽幼兒師范高等??茖W(xué)校《制冷原理與低溫工程》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025青海省建筑安全員B證(項目經(jīng)理)考試題庫
- 2025重慶建筑安全員B證考試題庫及答案
- 貴陽康養(yǎng)職業(yè)大學(xué)《建筑工程識圖綜合實訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州中醫(yī)藥大學(xué)《插畫創(chuàng)作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年云南建筑安全員-B證考試題庫附答案
- 廣州醫(yī)科大學(xué)《高頻電子電路》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025海南省安全員-B證考試題庫附答案
- 2025云南省安全員-B證考試題庫及答案
- YBT 6273-2024《蘭炭機械強度測定方法》
- 醫(yī)療技術(shù)臨床應(yīng)用管理檔案(姓名+工號)
- 機加工工作計劃安排
- 習(xí)慣性違章培訓(xùn)
- 河北省石家莊市橋西區(qū)2022-2023學(xué)年七年級上學(xué)期期末地理試卷
- 《工程造價管理 第2版》 課件 第一章 工程造價管理概論
- 中國郵政儲蓄銀行員工違規(guī)行為處理辦法
- 2023年長沙市中考數(shù)學(xué)真題試卷及答案
- 《電力設(shè)備消防典型準則》(DL5027-2022)
- 米吳科學(xué)漫畫奇妙萬象篇
- 河南省鄭州市金水區(qū)2022-2023學(xué)年三年級上學(xué)期期末數(shù)學(xué)試卷
評論
0/150
提交評論