




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)題目:兩個鏈表的合并專業(yè):軟件工程班級:姓名:學(xué)號: 指導(dǎo)教師 :年 月 日目錄1.課程設(shè)計(jì)的目的及要求2.課程設(shè)計(jì)的內(nèi)容(分析和設(shè)計(jì))3.算法流程圖4.詳細(xì)步驟5.代碼6.顯示結(jié)果7.課程設(shè)計(jì)的總結(jié)一課程設(shè)計(jì)的目的及要求1.目的:實(shí)現(xiàn)兩個鏈表的合并2.要求:(1) 建立兩個鏈表a 和 b,鏈表元素個數(shù)分別為m 和 n 個。(2) 假設(shè)元素分別為(x1,x2, xm) ,和 (y1,y2, yn) 。把它們合并成一個線形表c,使得:當(dāng) m=n 時, c=x1,y1,x2,y2,xn,yn, ,xm 當(dāng) nm 時, c=y1,x1,y2,x2,ym,xm,yn 輸出線形表c
2、(3) 用直接插入排序法對c 進(jìn)行升序排序,生成鏈表d,并輸出鏈表d。(4) 能刪除指定單鏈表中指定位子和指定值的元素。二課程設(shè)計(jì)的內(nèi)容(分析和設(shè)計(jì))1.分析由題目的相關(guān)信息可以分析得:首先我們需要建立兩個鏈表ab ,a 鏈表的元素個數(shù)為m,b 鏈表的元素個數(shù)為n;在將 a、b 鏈表進(jìn)行合并, 根據(jù) m 和 n 的大小關(guān)系決定鏈表c 的元素順序;再將c 進(jìn)行直接插入排序得到一個新的鏈表d;沒次輸入完一次鏈表信息,程序都會對相應(yīng)的鏈表進(jìn)行輸入操作以此確保程序輸入的數(shù)據(jù)是你想要輸入的數(shù)據(jù)。同時當(dāng)你合并好和排序好后都會進(jìn)行輸出操作。最后當(dāng)排序好后你可以指定你所要刪除數(shù)據(jù)的位置來刪除你所要刪除的數(shù)據(jù)。
3、2.設(shè)計(jì)本次課程設(shè)計(jì)所需要用到的是關(guān)于鏈表的建立、合并以及直接插入排序的排序算法。需要先建立兩個鏈表, 再將其合并為一個無序鏈表,最后對這個無序鏈表進(jìn)行直接插入排序并將其輸出。難點(diǎn)在于將ab 合并為鏈表c 的操作以及對鏈表c 進(jìn)行直接插入排序的操作和根據(jù)用戶的意愿可以對鏈表進(jìn)行刪除的操作。三算法流程圖四詳細(xì)步驟(1)結(jié)構(gòu)體的創(chuàng)建:struct node (2)鏈表的創(chuàng)建: struct node *create()鏈表的創(chuàng)建。(3)鏈表的輸出: void print(struct node *head)功能是對鏈表進(jìn)行輸出。(4)鏈表的合并: struct node * inter_link(
4、struct node * chain1, int a, struct node * chain2, int b)算法的功能是實(shí)現(xiàn)兩個鏈表的交叉合并,并且可以根據(jù)兩鏈表的長短將行不通的插入。(5)排序:void insertsort(struct node *p,int m) 算法的功能是對一合并好的鏈表進(jìn)行升序插入排序。(6)按位刪除操作:struct node * delete_link(struct node *p,int i)。(7)按值刪除操作:struct node * delete_linkz(struct node *p,int i)。(8)主函數(shù): main() 函數(shù)主要是對
5、算法進(jìn)行測試。建立鏈表a 建立鏈表b 合并 a b 鏈表得到 c 鏈表得到 d 鏈表得到 e 鏈表比較 m.n 排序刪除五代碼struct node /數(shù)據(jù)結(jié)構(gòu)定義如下: long int number; struct node *next; node,*linklist; #include /源程序:#include #include #include #define error 0 #define null 1 #define l sizeof(struct node) struct node *create(int a)/鏈表創(chuàng)建函數(shù) int n; struct node *p1, *p
6、2, *head; head = null; n = 0; p2 = p1 = (struct node *) malloc(l); /分配內(nèi)存scanf(%ld, &p1-number); while (a)/錄入鏈表信息 n = n + 1; if (n = 1) head = p1; else p2-next = p1; p2 = p1; p1 = (struct node *) malloc(l); if (a != 1)/分配內(nèi)存scanf(%ld, &p1-number); a-; /控制輸入的個數(shù) p2-next = null; return (head); /
7、鏈表創(chuàng)建函數(shù)結(jié)束void print(struct node *head)/輸出函數(shù) struct node *p; p = head; printf( 數(shù)字:n); if (head != null) do/循環(huán)實(shí)現(xiàn)輸出 printf(%ld, p-number); printf( ); p = p-next; while (p != null); printf(n); /鏈表的交叉合并算法struct node * inter_link(struct node * chain1, int a, struct node * chain2, int b) int temp; struct no
8、de *head, *p1, *p2, *pos; /*判斷 a,b 大小并合并*/ if (a = b) head = p1 = chain1; p2 = chain2; else/*ba*/ head = p1 = chain2; p2 = chain1; temp = a, a = b, b = temp; /* 交換 a 和 b*/ /*下面把 p1 的每個元素插在 p2 相應(yīng)元素之前, p1 長 a,p2長 b*/ pos = head; /*此時 pos指向 p1 中的第一個元素 */ while (p2 != null) / 漂亮,蛇形插入p1 = p1-next; pos-ne
9、xt = p2; pos = p2; p2 = p2-next; pos-next = p1; pos = p1; return head; /對合并好的鏈表進(jìn)行排序void insertsort(struct node *p, int m)/排序函數(shù) int i, j, t; struct node *k; k = p; for (i = 0; i m - 1; i+) for (j = 0; j number (p-next)-number) t = p-number; p-number = (p-next)-number; (p-next)-number = t; p = p-next;
10、 p = k; struct node * delete_link(struct node *p,int i) /按位刪除 struct node *q; int j=0; while(jnext) p=p-next; j+; if(j=i-1&p-next) q=p-next; p-next=q-next; free(q); else return error; struct node * delete_linkz(struct node *p,int i)/按值刪除 struct node *q; struct node *k; int j=0; int h=0; while(p&
11、amp;p-number!=i) p=p-next; j+; if (p) while (hnext) p=p-next; h+; if(h=j-1&p-next) k=p-next; p-next=k-next; free(k); else return error; /主函數(shù)int main()/main 函數(shù) struct node *p1, *p2; int a; int b; int h; int t; int m; printf( 請輸入第一個鏈表 :n); printf(n 輸入鏈表的長度a:n); scanf(%d, &a); printf( 請輸入鏈表數(shù)據(jù):
12、); p1 = create(a); printf(n 你剛才輸入的第一個鏈表信息:n ); print(p1); printf(n 請輸入第二個鏈表 :n); printf(n 輸入鏈表的長度b:n); scanf(%d, &b); printf( 請輸入鏈表數(shù)據(jù): ); p2 = create(b); printf(n 你剛才輸入的第二個鏈表的信息:n); print(p2); p1 = inter_link(p1, a, p2, b); h = a + b; printf(n 合并后的鏈表 n:); print(p1); insertsort(p1, h); printf(n 排
13、序后的鏈表 :n); print(p1); printf(n 請輸入鏈表中你所要刪除數(shù)據(jù)的所在位置:n); scanf(%d,&t); delete_link(p1,t); printf(n 鏈表刪除數(shù)據(jù)后鏈表的信息:n); print(p1); printf(n 請輸入你想要刪除的數(shù)值 :n); scanf(%d,&m); delete_linkz(p1,m); printf(n 鏈表刪除數(shù)據(jù)后鏈表的信息:n); print(p1); return 0; 六顯示結(jié)果(1)mn 3.m=n 4.按位刪除操作5.按值刪除七課程設(shè)計(jì)的總結(jié)通過進(jìn)一周的學(xué)習(xí)和實(shí)踐, 解決實(shí)際問題, 讓我對鏈表有了更深的了解,也讓我提高了解決實(shí)際問題的能力。在上機(jī)的同時改正了自己對某些算法的錯誤使用,使自己在通過程序解決問題時抓住關(guān)鍵算法,有了算法設(shè)計(jì)思想和流程圖, 并用c 語言描繪出關(guān)鍵算法。在運(yùn)行過程中,用戶可輸入你所需合并的兩個鏈表,首先輸入你所要輸入鏈表的長度再輸入鏈表的數(shù)據(jù),完成第一個鏈表的輸入后,按照同樣的方法輸入第二個鏈表, 每輸入完一個鏈表程序都會執(zhí)行輸出函數(shù)void print(struct node *head)對鏈表進(jìn)行輸出, 以此讓用戶可以確認(rèn)自己輸入的數(shù)據(jù)是
溫馨提示
- 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年河北省安全員-C證考試題庫
- 2025湖南省安全員《C證》考試題庫及答案
- 南京審計(jì)大學(xué)《數(shù)學(xué)學(xué)科與教學(xué)指導(dǎo)實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 海南醫(yī)學(xué)院《數(shù)字時代品牌傳播》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱城市職業(yè)學(xué)院《會計(jì)電算化實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 做賬實(shí)操-保險行業(yè)的賬務(wù)處理示例
- 2025青海省建筑安全員A證考試題庫附答案
- 南京城市職業(yè)學(xué)院《主任工作技能》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北國土資源職業(yè)學(xué)院《精神分析理論與技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 徐州工業(yè)職業(yè)技術(shù)學(xué)院《三維建模與貼圖》2023-2024學(xué)年第二學(xué)期期末試卷
- 工作室成員成長檔案模板(內(nèi)部版)課件
- (完整版)馬克思主義基本原理概論知識點(diǎn)
- 弱電系統(tǒng)巡查記錄表(辦公樓)
- 預(yù)防接種人員崗位培訓(xùn)習(xí)題(Ⅰ類培訓(xùn)練習(xí)題庫共385題)
- 現(xiàn)場經(jīng)濟(jì)簽證單范本
- 《網(wǎng)店運(yùn)營與管理》課件(完整版)
- 《跨境電商B2B操作實(shí)務(wù)》教學(xué)大綱
- 河口區(qū)自然資源
- 精益改善項(xiàng)目管理制度
- 2012數(shù)據(jù)結(jié)構(gòu)英文試卷A及答案
- 機(jī)翼結(jié)構(gòu)(課堂PPT)
評論
0/150
提交評論