版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)與算法實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)序號(hào):3 實(shí)驗(yàn)項(xiàng)目名稱:鏈?zhǔn)奖淼牟僮鲗W(xué)號(hào)1507112104姓名陳忠表專業(yè)、班15商智實(shí)驗(yàn)地點(diǎn)指導(dǎo)教師林開標(biāo)實(shí)驗(yàn)時(shí)間一、實(shí)驗(yàn)?zāi)康募耙?. 通過實(shí)驗(yàn)理解單鏈表的邏輯結(jié)構(gòu);2. 通過實(shí)驗(yàn)掌握單鏈表的基本操作和具體的函數(shù)實(shí)現(xiàn)。二、實(shí)驗(yàn)設(shè)備(環(huán)境)及要求微型計(jì)算機(jī);windows 操作系統(tǒng);Microsoft Visual Studio 6.0集成開發(fā)環(huán)境。三、實(shí)驗(yàn)內(nèi)容與步驟鏈?zhǔn)奖肀硎竞蛯?shí)現(xiàn)線性表的如下:#include"stdio.h"#include"stdlib.h"typedef struct node /定義結(jié)點(diǎn) int d
2、ata; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)檎蛃truct node *next; /結(jié)點(diǎn)的指針域 ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型LinkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表ListNode *LocateNode(LinkList head, int key); /函數(shù),按值查找結(jié)點(diǎn)void DeleteList(LinkList head,int key); /函數(shù),刪除指定值的結(jié)點(diǎn)void printlist(LinkList head); /函數(shù),打印鏈表中的所有值void De
3、leteAll(LinkList head); /函數(shù),刪除所有結(jié)點(diǎn),釋放內(nèi)存/=主函數(shù)=void main() int num; char ch; LinkList head; head=CreatListR1(); /用尾插入法建立單鏈表,返回頭指針 printlist(head); /遍歷鏈表輸出其值 printf(" Delete node (y/n):"); /輸入"y"或"n"去選擇是否刪除結(jié)點(diǎn) scanf("%c",&ch); if(ch=y) | ch=Y) printf("Ple
4、ase input Delete_data:"); scanf("%d",num); /輸入要?jiǎng)h除的字符串 DeleteList(head,num); printlist(head); DeleteAll(head); /刪除所有結(jié)點(diǎn),釋放內(nèi)存/=用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表= LinkList CreatListR1(void) return head; /返回頭指針/=按值查找結(jié)點(diǎn),找到則返回該結(jié)點(diǎn)的位置,否則返回NULL=ListNode *LocateNode(LinkList head, int key) return p; /若p=NULL則查找失敗
5、,否則p指向找到的值為key的結(jié)點(diǎn)/=刪除帶頭結(jié)點(diǎn)的單鏈表中的指定結(jié)點(diǎn)=void DeleteList(LinkList head,int key) /按key值查找結(jié)點(diǎn)的 /若沒有找到結(jié)點(diǎn),退出/若找到,則從單鏈表中刪除該結(jié)點(diǎn),并釋放結(jié)點(diǎn)/=打印鏈表,輸出所有結(jié)點(diǎn)的值=void printlist(LinkList head) /=刪除所有結(jié)點(diǎn),釋放空間=void DeleteAll(LinkList head) 1、 實(shí)現(xiàn)并調(diào)試單鏈表的的相關(guān)算法;2、改寫以上程序,實(shí)現(xiàn)功能如下:(1)編寫一個(gè)刪除鏈表中值為x的結(jié)點(diǎn)的直接前趨結(jié)點(diǎn)的算法,若有多個(gè)值為x的結(jié)點(diǎn),則刪除第一個(gè)x的直接前趨結(jié)點(diǎn)。(
6、2)改寫CreatListR1函數(shù),使得鏈表創(chuàng)建時(shí)為非遞減有序的單鏈表。(3)在算法(2)生成的非遞減有序的單鏈表中,編寫一個(gè)算法,刪除單鏈表中值相同的多余結(jié)點(diǎn)。(4)寫一個(gè)對單循環(huán)鏈表進(jìn)行逆序輸出(打印每個(gè)結(jié)點(diǎn)的值)的算法。四、實(shí)驗(yàn)結(jié)果與數(shù)據(jù)處理一.實(shí)驗(yàn)結(jié)果如圖1所示:圖1二.(1)實(shí)驗(yàn)結(jié)果如圖2所示:圖2(2)實(shí)驗(yàn)結(jié)果如圖3所示:圖3(3)實(shí)驗(yàn)結(jié)果如圖4所示:圖4(4) 實(shí)驗(yàn)結(jié)果如圖5所示:圖5五、分析與討論感覺實(shí)驗(yàn)3比之前的實(shí)驗(yàn)一、二難度更大,只能瀏覽同學(xué)的,有疑問便問同學(xué),這樣勉強(qiáng)理解。六、教師評語簽名:日期:成績附源程序清單:一. #include"stdio.h"
7、;#include"stdlib.h"typedef struct node /定義結(jié)點(diǎn) int data; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)檎蛃truct node *next; /結(jié)點(diǎn)的指針域 ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型LinkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表void printlist(LinkList head);/函數(shù),打印鏈表中的所有值ListNode *LocateNode(LinkList head, int key); /函數(shù),按值查找結(jié)點(diǎn)
8、void DeleteList(LinkList head,int key); /函數(shù),刪除指定值的結(jié)點(diǎn) void DeleteAll(LinkList head); void main() int num; char ch; LinkList head; head=CreatListR1(); printf("List:n"); printlist(head); printf(" Delete node (y/n):"); /輸入"y"或"n"去選擇是否刪除結(jié)點(diǎn) getchar(); scanf("%c
9、",&ch); if(ch='y'|ch='Y') printf("Please input Delete_data:"); scanf("%d",&num); /輸入要?jiǎng)h除的數(shù) DeleteList(head,num); /刪除 printlist(head);/打印 DeleteAll(head); /刪除所有結(jié)點(diǎn),釋放內(nèi)存/=用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表=LinkList CreatListR1(void) int n,i,count; LinkList head=(LinkList)ma
10、lloc(sizeof(ListNode); ListNode *s, *r;/s用來指向新生成的節(jié)點(diǎn)。r始終指向L的終端節(jié)點(diǎn)。 r=head; r->next=NULL; printf("請輸入鏈表節(jié)點(diǎn)數(shù):"); scanf("%d",&n); printf("輸入節(jié)點(diǎn)值:"); for ( i = 0; i < n; i+) s = (LinkList)malloc(sizeof(ListNode);/s指向新申請的節(jié)點(diǎn) scanf("%d",&count);s->data =
11、 count; /用新節(jié)點(diǎn)的數(shù)據(jù)域來接受i r->next = s; /用r來接納新節(jié)點(diǎn) r = s; /r指向終端節(jié)點(diǎn) r->next = NULL; return head; /返回頭指針 return head; /返回頭指針void printlist(LinkList head) ListNode *p=head->next; /從開始結(jié)點(diǎn)打印 while(p)printf("%d, ",p->data);p=p->next; printf("n");/=按值查找結(jié)點(diǎn),找到則返回該結(jié)點(diǎn)的位置,否則返回NULL=Li
12、stNode *LocateNode(LinkList head, int key) ListNode *p=head->next; /從開始結(jié)點(diǎn)比較 while(p && p->data!=key) /直到p為NULL或p->data為key止p=p->next; /掃描下一個(gè)結(jié)點(diǎn) return p; /若p=NULL則查找失敗,否則p指向找到的值為key的結(jié)點(diǎn)/=刪除帶頭結(jié)點(diǎn)的單 鏈表中的指定結(jié)點(diǎn)=void DeleteList(LinkList head,int key) ListNode *p,*r,*q=head; p=LocateNode(h
13、ead,key); /按key值查找結(jié)點(diǎn)的 if(p=NULL ) /若沒有找到結(jié)點(diǎn),退出printf("position error");exit(0); while(q->next!=p) /p為要?jiǎng)h除的結(jié)點(diǎn),q為p的前結(jié)點(diǎn)q=q->next; r=q->next; q->next=r->next; free(r); /釋放結(jié)點(diǎn)/=刪除所有結(jié)點(diǎn),釋放空間=void DeleteAll(LinkList head) ListNode *p=head,*r; while(p->next)r=p->next;free(p);p=r;
14、free(p);二(1)#include"stdio.h"#include"stdlib.h"typedef struct node /定義結(jié)點(diǎn) int data; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)檎蛃truct node *next; /結(jié)點(diǎn)的指針域 ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型LinkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表void printlist(LinkList head);ListNode *LocateNode(LinkList h
15、ead, int key); /函數(shù),按值查找前結(jié)點(diǎn)void DeleteList(LinkList head,int key); /函數(shù),刪除指定值的結(jié)點(diǎn) void DeleteAll(LinkList head); void main() int num; char ch; LinkList head; head=CreatListR1(); printf("List:n"); printlist(head); printf(" 是否刪除鏈表中值為x的結(jié)點(diǎn)的直接前趨結(jié)點(diǎn)(y/n):"); /輸入"y"或"n"去
16、選擇是否刪除結(jié)點(diǎn) getchar(); scanf("%c",&ch); if(ch='y'|ch='Y') printf("Please input Delete_data:"); scanf("%d",&num); /輸入要?jiǎng)h除的字符串 DeleteList(head,num); printlist(head); DeleteAll(head); /刪除所有結(jié)點(diǎn),釋放內(nèi)存 /=用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表=LinkList CreatListR1(void) int n,i,cou
17、nt; LinkList head=(LinkList)malloc(sizeof(ListNode); ListNode *s, *r;/s用來指向新生成的節(jié)點(diǎn)。r始終指向L的終端節(jié)點(diǎn)。 r=head; r->next=NULL; printf("請輸入鏈表節(jié)點(diǎn)數(shù):"); scanf("%d",&n); printf("輸入節(jié)點(diǎn)值:"); for ( i = 0; i < n; i+) s = (LinkList)malloc(sizeof(ListNode);/s指向新申請的節(jié)點(diǎn) scanf("%d&
18、quot;,&count);s->data = count; /用新節(jié)點(diǎn)的數(shù)據(jù)域來接受i r->next = s; /用r來接納新節(jié)點(diǎn) r = s; /r指向終端節(jié)點(diǎn) r->next = NULL; return head; /返回頭指針 return head; /返回頭指針void printlist(LinkList head) ListNode *p=head->next; /從開始結(jié)點(diǎn)打印 while(p)printf("%d, ",p->data);p=p->next; printf("n");/=
19、/按值查找結(jié)點(diǎn),找到返回該結(jié)點(diǎn)的直接前驅(qū)結(jié)點(diǎn)位置,否則返回NULL=ListNode *LocateNode(LinkList head, int key) ListNode *p=head->next; ListNode *x=head->next;/從開始結(jié)點(diǎn)比較 while(p && p->data!=key)/直到p為NULL或p->data為key止x=p; / x為P的前一個(gè)節(jié)點(diǎn);p=p->next; /掃描下一個(gè)結(jié)點(diǎn)if( p->data!=key)x=NULL; return x; /若p=NULL則查找失敗,否則p指向找到的
20、值為key的結(jié)點(diǎn)/=刪除帶頭結(jié)點(diǎn)的單 鏈表中的指定結(jié)點(diǎn)=void DeleteList(LinkList head,int key) ListNode *p,*r,*q=head; p=LocateNode(head,key); /按key值查找結(jié)點(diǎn)的 if(p=NULL ) /若沒有找到結(jié)點(diǎn),退出printf("position error");exit(0); while(q->next!=p) /p為要?jiǎng)h除的結(jié)點(diǎn),q為p的前結(jié)點(diǎn)q=q->next;r=q->next; q->next=r->next; free(r); /釋放結(jié)點(diǎn)/=刪除
21、所有結(jié)點(diǎn),釋放空間=void DeleteAll(LinkList head) ListNode *p=head,*r; while(p->next)r=p->next;free(p);p=r; free(p);(2)#include"stdio.h"#include"stdlib.h"typedef struct node /定義結(jié)點(diǎn) int data; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)檎蛃truct node *next; /結(jié)點(diǎn)的指針域 ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型L
22、inkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表void printlist(LinkList head);void DeleteAll(LinkList head); void main() int num; char ch; LinkList head; head=CreatListR1(); printf("List:n"); printlist(head); DeleteAll(head); /刪除所有結(jié)點(diǎn),釋放內(nèi)存/=用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表=LinkList CreatListR1(void) int n,i,count
23、,change,j; LinkList head=(LinkList)malloc(sizeof(ListNode); ListNode *s, *r,*q;/s用來指向新生成的節(jié)點(diǎn)。r始終指向L的終端節(jié)點(diǎn)。 r=head;q=head; r->next=NULL; printf("請輸入鏈表節(jié)點(diǎn)數(shù):"); scanf("%d",&n); printf("輸入節(jié)點(diǎn)值:"); for ( i = 0; i < n; i+) s = (LinkList)malloc(sizeof(ListNode);/s指向新申請的節(jié)
24、點(diǎn) scanf("%d",&count);s->data = count; /用新節(jié)點(diǎn)的數(shù)據(jù)域來接受i r->next = s; /用r來接納新節(jié)點(diǎn) r = s; /r指向終端節(jié)點(diǎn) r->next = NULL; / 排序;for(i=n;i>0;i-) q=head->next;for(j=0;j<n-1;j+)if(q->data)>(q->next->data)change=q->data;q->data=q->next->data;q->next->data=ch
25、ange;q=q->next;elseq=q->next; return head; /返回頭指針 return head; /返回頭指針void printlist(LinkList head) ListNode *p=head->next; /從開始結(jié)點(diǎn)打印 while(p)printf("%d, ",p->data);p=p->next; printf("n");/=刪除所有結(jié)點(diǎn),釋放空間=void DeleteAll(LinkList head) ListNode *p=head,*r; while(p->ne
26、xt)r=p->next;free(p);p=r; free(p);(3)#include"stdio.h"#include"stdlib.h"typedef struct node /定義結(jié)點(diǎn) int data; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)檎蛃truct node *next; /結(jié)點(diǎn)的指針域 ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型LinkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表void printlist(LinkList head); vo
27、id DeleteSameNode(LinkList head);void DeleteAll(LinkList head); void main() int num; char ch; LinkList head; head=CreatListR1(); printf("List:n"); printlist(head); DeleteSameNode(head); printlist(head); DeleteAll(head); /刪除所有結(jié)點(diǎn),釋放內(nèi)存/=用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表=LinkList CreatListR1(void) int n,i,count
28、,change,j; LinkList head=(LinkList)malloc(sizeof(ListNode); ListNode *s,*r,*q;/s用來指向新生成的節(jié)點(diǎn)。r始終指向L的終端節(jié)點(diǎn)。 r=head;q=head; r->next=NULL; printf("請輸入鏈表節(jié)點(diǎn)數(shù):"); scanf("%d",&n); printf("輸入節(jié)點(diǎn)值:"); for ( i = 0; i < n; i+) s = (LinkList)malloc(sizeof(ListNode);/s指向新申請的節(jié)點(diǎn)
29、 scanf("%d",&count);s->data = count; /用新節(jié)點(diǎn)的數(shù)據(jù)域來接受i r->next = s; /用r來接納新節(jié)點(diǎn) r = s; /r指向終端節(jié)點(diǎn) r->next = NULL; / 排序;for(i=n;i>0;i-) q=head->next; for(j=0;j<n-1;j+)if(q->data)>(q->next->data)change=q->data;q->data=q->next->data;q->next->data=ch
30、ange;q=q->next;elseq=q->next; return head; /返回頭指針 return head; /返回頭指針void printlist(LinkList head) ListNode *p=head->next; /從開始結(jié)點(diǎn)打印 while(p)printf("%d, ",p->data);p=p->next; printf("n");/=刪除多余節(jié)點(diǎn)= void DeleteSameNode(LinkList head) int n=2; ListNode *p,*q,*t,*s; p =
31、 head; p = p->next;/ p第一個(gè) while(p->next) if(p->data = p->next->data) if(p->next->next=NULL)p->next=NULL;elsep->next=p->next->next;p=p->next; elsep=p->next; /=刪除所有結(jié)點(diǎn),釋放空間=void DeleteAll(LinkList head) ListNode *p=head,*r; while(p->next)r=p->next;free(p);p=
32、r; free(p);(4)#include"stdio.h"#include"stdlib.h"typedef struct node /定義結(jié)點(diǎn) int data; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)檎蛃truct node *next; /結(jié)點(diǎn)的指針域 ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型LinkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表void printlist(LinkList head);void printlist_inverseorder(LinkList head);/ 逆序 void DeleteAll(LinkList head); void main() int num; char ch; LinkList head; head=CreatListR1(); printf("List:n"); printlist(head); printlist_inverseorder(head); De
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體操用跳板產(chǎn)品供應(yīng)鏈分析
- 冷凍機(jī)器和設(shè)備的修理或維護(hù)行業(yè)經(jīng)營分析報(bào)告
- 全險(xiǎn)保險(xiǎn)和再保險(xiǎn)經(jīng)紀(jì)行業(yè)營銷策略方案
- 眼鏡片清洗溶液市場分析及投資價(jià)值研究報(bào)告
- 西洋跳棋游戲項(xiàng)目運(yùn)營指導(dǎo)方案
- 冷鏈烘焙產(chǎn)品行業(yè)市場調(diào)研分析報(bào)告
- 藥用靈芝孢子粉市場分析及投資價(jià)值研究報(bào)告
- 家用基因檢測設(shè)備行業(yè)市場調(diào)研分析報(bào)告
- 苯胺印刷機(jī)市場發(fā)展前景分析及供需格局研究預(yù)測報(bào)告
- 用于驅(qū)蟲的杉木項(xiàng)目運(yùn)營指導(dǎo)方案
- 智能交通系統(tǒng)運(yùn)行維護(hù)方案
- 中國建筑行業(yè)現(xiàn)狀深度調(diào)研與發(fā)展趨勢分析報(bào)告(2022-2029年)
- 2023-2024學(xué)年四川省成都市九年級(上)期中物理試卷
- 7.2共建美好集體(課件)2024-2025學(xué)年七年級道德與法治上冊統(tǒng)編版
- 外研版英語初二上學(xué)期期中試題及答案指導(dǎo)(2024-2025學(xué)年)
- 天翼云高級解決方案架構(gòu)師認(rèn)證資格考試題庫及答案
- 2024-2030年中國水上運(yùn)動(dòng)皮劃艇行業(yè)營銷動(dòng)態(tài)與競爭趨勢預(yù)測報(bào)告
- 2023年貴州大方富民村鎮(zhèn)銀行招聘考試真題
- 上下樓裝修糾紛協(xié)議書范本
- 物聯(lián)網(wǎng)安裝調(diào)試員職業(yè)技能競賽考試題庫(含答案)
- 七年級上冊語文統(tǒng)編版 10 《往事依依》活動(dòng)型公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)(表格式)
評論
0/150
提交評論