


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗一 單鏈表一、實驗?zāi)康?、掌握用 Vc+上機(jī)調(diào)試程序的基本方法;2、掌握單鏈表的建立、插入、刪除以及相關(guān)操作。二、 實驗內(nèi)容1、單鏈表的插入算法;2、單鏈表的刪除算法;3、兩個有序單鏈表合并成一個有序單鏈表的算法。三、實驗要求1、學(xué)生用 C+/C完成算法設(shè)計和程序設(shè)計并上機(jī)調(diào)試通過;2、撰寫實驗報告,提供實驗測試數(shù)據(jù)和實驗結(jié)果;3、分析算法,要求給出具體的算法分析結(jié)果,包括時間復(fù)雜度和空間復(fù)雜度, 并簡要給出算法設(shè)計小結(jié)和心得。四、實驗準(zhǔn)備1、復(fù)習(xí)C 語言中指針的用法,特別是結(jié)構(gòu)體的指針的用法;2、了解單鏈表的概念,單鏈表的定義方法;3、掌握線性表在鏈?zhǔn)酱鎯Y(jié)構(gòu)上實現(xiàn)基本操作:查找、插入、
2、刪除的算法; 在實現(xiàn)這些算法的時候,要注意判斷輸入數(shù)據(jù)的合法性,除此之外還要注意以 下內(nèi)容:在實現(xiàn)查找的時候,首先要判斷該單鏈表是否為空,其次要判斷查找后的結(jié)果 (查到時輸出查到的數(shù)據(jù),未查到時給出錯誤提示 )。在實現(xiàn)插入的時候,由于是鏈?zhǔn)酱鎯?,它可以隨機(jī)產(chǎn)生和回收存儲空間,所以 它不要判斷線性表是否為滿, 但仍需判斷要插入的位置是否合法, 其次要注意插 入的時候語句的順序不可顛倒,否則出錯。在實現(xiàn)刪除的時候,首先要判斷線性表是否為空,為空則不能刪除;其次在刪 除后要回收空間。五、實驗步驟1、編程實現(xiàn)建立一個單鏈表,并在此表中插入一個元素和刪除一個元素5(1) 通過鍵盤讀取元素建立單鏈表;(2
3、) 指定一個位置,在此位置之前插入一個新元素;(3) 指定一個位置,刪除此位置元素。2、兩個有序單鏈表合并成一個有序單鏈表的算法。(1) 通過鍵盤讀取元素建立 2 個有序單鏈表;(2) 將二兩個有序單鏈表合并成一個有序單鏈表;(3) 輸出合并后的單鏈表。六、實驗參考代碼1、編程實現(xiàn)建立一個單鏈表,并在此表中插入一個元素和刪除一個元素 #include #include #define OK 1#define ERROR 0typedef int ElemType;typedef int Status; typedef struct Lnode ElemType data; struct Lno
4、de *next; Lnode,*LinkList;/ 以下是建立單鏈表 void CreatList_L(LinkList &head) LinkList tail, p;int n,i;p=(Lnode *)malloc(sizeof(Lnode); head=tail=p;head-next=NULL; printf(Please input length to creat a list:n); scanf(%d, &n);printf(Please input a group of values of the list:n); for(i=1;idata);p-next=NULL; t
5、ail-next=p; tail=p; printf(A list has been created successfully!n);/ 以下是輸出單鏈表 void OutputList_L(LinkList L) LinkList p = L-next;if(p=NULL) printf(n No listn);return; printf(The list is:n); while (p ) printf(%4d,p-data); p = p-next; printf(n);/ 在第 i個元素之前插入一個元素Status ListInsert_L(LinkList L, int i, El
6、emType e) LinkList p,s;p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) return ERROR; s=(LinkList)malloc(sizeof(Lnode); s-data=e;s-next=p-next; p-next=s; return OK;/ 刪除第 i 個元素Status ListDelete_L(LinkList L, int i, ElemType &e) LinkList p,q; p=L; int j=0;while(p-next&jnext;+j;if(!(p-next)|ji-1) return ER
7、ROR; q=p-next;p-next=q-next; e=q-data;free(q);return OK;void main() LinkList L; int choice,i; ElemType e; choice=1;printf(We should create a list first!); CreatList_L(L);OutputList_L(L); while(choice!=0) printf(n menu n); printf( 1 insert a elem ); printf( 2 delete a elem ); printf( 3 output a list)
8、; printf( 4 exit );n);printf(n printf(please choice ( 1, 2, 3, 4);scanf(%d,&choice); if(choice=0) break;else if(choice=1) printf(Please input a pos and a value what you want to insert: n); scanf(%d%d, &i,&e);if(ListInsert_L(L,i,e) printf(The inserting action has been done!n);OutputList_L(L);else pri
9、ntf(The inserting pos is error! please do again!n);else if (choice=2)printf(Please input a pos what you want to delete:n); scanf(%d, &i);if(ListDelete_L(L,i,e)printf(The deleting action has been done, the deleted value is %dn,e);OutputList_L(L);else printf(The pos what you want to delete is error! p
10、lease do again!n);else if (choice=3)OutputList_L(L); else if(choice!=0)printf(choice errorn);2、兩個有序單鏈表合并成一個有序單鏈表的算法。實現(xiàn)提示:程序需要 3 個指針: pa,pb,pc,其中 pa,pb 分別指向 La表、 Lb 表的首結(jié)點,用 pa 遍歷 La 表, pb 遍歷 Lb 表, pc指向合并后的新表的最后一個結(jié)點(即尾結(jié)點),pc的初值指向 La表的頭8結(jié)點。合并的思想是:先建立好兩個鏈表 La表和 Lb 表,然后依次掃描 La 和 Lb 中的元素,比較當(dāng) 前元素的值,將較小者鏈到
11、*pc 之后,如此重復(fù)直到 La 或 Lb 結(jié)束為止,再將另一個鏈表余 下的內(nèi)容鏈到 pc所指的結(jié)點之后。#include #include typedef int ElemType;typedef struct Lnode ElemType data;struct Lnode *next;Lnode,*LinkList;/ 以下是建立單鏈表void CreatList_L(LinkList &head) LinkList tail, p;int n,i;p=(Lnode *)malloc(sizeof(Lnode);head=tail=p; head-next=NULL;printf(Ple
12、ase input length to creat a list:n); scanf(%d, &n);printf(Please input a group of values of the list:n);for(i=1;idata); p-next=NULL;tail-next=p;tail=p;printf(A list has been created successfully!n);/ 以下是輸出單鏈表void OutputList_L(LinkList L)LinkList p = L-next;if(p=NULL)printf(n No listn);return; printf
13、(The list is:n);while (p ) printf(%4d,p-data);p = p-next;printf(n);/ 以下將 La 和 Lb 表合并為 Lc 表void MergeList(LinkList &Lc, LinkList &La, LinkList &Lb) LinkList pa, pb, pc;pa=La-next; pb=Lb-next;Lc=pc=La;while (pa&pb)if (pa-datadata) pc-next=pa;pc=pa;pa=pa-next;else pc-next=pb;pc=pb;pb=pb-next;pc-next=papa:pb;free(Lb);/ 以下是主程序void main() LinkList La,Lb,Lc;printf(We should create two incremental and orderly lists first!n); printf(please creat a incremental and orderly li
溫馨提示
- 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年度車輛事故環(huán)境損害賠償協(xié)議
- 二零二五年度退租協(xié)議書及舊房裝修拆除工程合同
- 2025年度期刊發(fā)行權(quán)轉(zhuǎn)讓認(rèn)刊書審核及執(zhí)行合同
- 二零二五年度房屋租賃合同租賃房屋租賃合同解除程序
- 二零二五年度品牌形象維護(hù)營銷人員保密及合作協(xié)議
- 2025年度科技研發(fā)領(lǐng)域自愿出資入股協(xié)議
- 2025年度貴金屬首飾典當(dāng)借款服務(wù)協(xié)議
- 二零二五年度互聯(lián)網(wǎng)企業(yè)職工勞動合同優(yōu)化方案
- 二零二五年度電子行業(yè)經(jīng)典實習(xí)期勞動合同模板
- 《物流系統(tǒng)分析》課件 項目七任務(wù)四 了解物流系統(tǒng)仿真實踐
- 河北省職業(yè)院校技能大賽建筑信息模型建模與應(yīng)用(高職組)賽項參考試題及答案
- 艾滋病耐藥報告解讀
- 創(chuàng)新思維與創(chuàng)造力開發(fā)(山西經(jīng)貿(mào)職業(yè)學(xué)院)知到智慧樹答案
- 2024年濰坊護(hù)理職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 《西方經(jīng)濟(jì)學(xué)》(上冊)課程教案
- 2024年安徽省公務(wù)員錄用考試《行測》真題及答案解析
- 舞蹈學(xué)課件教學(xué)課件
- 施工合同協(xié)議書樣本
- 醫(yī)學(xué)綜合題庫(含答案)
- 2024年貴州省公務(wù)員考試《行測》真題及答案解析
- 工會一函兩書模板
評論
0/150
提交評論