




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì) 題目一:實(shí)現(xiàn)兩個(gè)鏈表的合并題目二:可變長(zhǎng)順序表設(shè)計(jì)班 級(jí): 計(jì)科1202班姓 名: 學(xué) 期:2013-2014學(xué)年第二學(xué)期題目1:實(shí)現(xiàn)兩個(gè)鏈表的合并基本要求:(1)建立兩個(gè)鏈表A和B,鏈表元素個(gè)數(shù)分別為m和n個(gè)。 (2)假設(shè)元素分別為(x1,x2,xm),和(y1,y2, yn)。把它們合并成一個(gè)線性表C: 當(dāng)m>=n時(shí),C=x1,y1,x2,y2,xn,yn,xm 當(dāng)n>m時(shí),C=y1,x1,y2,x2,ym,xm,yn (3)輸出線性表C:(4) 用直接插入排序法對(duì)C進(jìn)行升序排序,生成鏈表D,并輸出鏈表D。測(cè)試數(shù)據(jù):(1) A表(
2、30,41,15,12,56,80) B表(23,56,78,23,12,33,79,90,55) (2) A表(30,41,15,12,56,80,23,12,34) B表(23,56,78,23,12)算法思想 :首先我們需要建立兩個(gè)鏈表A,B,A鏈表的元素個(gè)數(shù)為m;B鏈表的元素個(gè)數(shù)為n;在將A,B鏈表進(jìn)行合并,根據(jù)m和n的大小關(guān)系決定鏈表C的元素順序(當(dāng)m>=n時(shí),應(yīng)該先插入A表中的數(shù)據(jù)元素,在偶數(shù)位插入A表中的數(shù)據(jù)元素,在奇數(shù)位插入B表中的數(shù)據(jù)元素,最后在插入A表中剩余的數(shù)據(jù)元素;當(dāng)m<n時(shí),應(yīng)該先插入B表中的數(shù)據(jù)元素,在偶數(shù)位插入B表中的數(shù)據(jù)元素,在奇數(shù)位插入A
3、表中的數(shù)據(jù)元素,最后在插入B表中剩余的數(shù)據(jù)元素),再將C經(jīng)行直接插入排序得到一個(gè)新的鏈表D;最后輸出ABCD的相關(guān)信息。模塊劃分:(1) 結(jié)構(gòu)體struct Node的創(chuàng)建。(2) struct Node *create()鏈表的創(chuàng)建。(3) void print(struct Node *head)功能是對(duì)鏈表進(jìn)行輸出。 (4) struct Node * inter_link(struct Node
4、60;* chain1, int a, struct Node * chain2, int b)算法的功能是實(shí)現(xiàn)兩個(gè)鏈表的交叉合并,并且可以根據(jù)兩鏈表的長(zhǎng)短將行不通的插入。(5) void InsertSort(struct Node *p,int m)算法的功能是對(duì)一合并好的鏈表進(jìn)行升序插入排序。 (6) main()函數(shù)主要是對(duì)算法進(jìn)行測(cè)試。數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)結(jié)構(gòu)定義如下:struct Node
5、60; long int number; struct Node *next;源程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>#include<malloc.h>#define L sizeof(struct Node) struct Node /結(jié)構(gòu)體
6、160; long int number; struct Node *next; struct Node *create(int a)/鏈表創(chuàng)建函數(shù) int n; struct Node *p1, *p2, *head; head =
7、60;NULL; n = 0; p2 = p1 = (struct Node *) malloc(L); /分配內(nèi)存 scanf("%ld", &p1->number); while (a)/錄入鏈表信息
8、60; n = n + 1; if (n = 1) head = p1; else
9、160; p2->next = p1; p2 = p1; p1 = (struct Node *) malloc(L);
10、60; if (a != 1)/分配內(nèi)存 scanf("%ld", &p1->number); a-; /控制輸入的個(gè)數(shù) p2->next = N
11、ULL; return (head);/鏈表創(chuàng)建函數(shù)結(jié)束 void print(struct Node *head)/輸出函數(shù) struct Node *p; p = head; printf("數(shù)字:n"); if (head !=
12、 NULL) do/循環(huán)實(shí)現(xiàn)輸出 printf("%ld", p->number);
13、160;printf(" "); p = p->next; while (p != NULL); printf("n"); /鏈表的交叉合并算
14、法 struct Node * inter_link(struct Node * chain1, int a, struct Node * chain2, int b) int temp; struct Node *head, *p1, *p2, *pos; &
15、#160; /*判斷a,b大小并合并 */ if (a >= b) head = p1 = chain1; p2 = chain2; else/*b>a*/
16、160; head = p1 = chain2; p2 = chain1; temp = a, a = b, b = temp; /*交換a和b*/
17、60; /*下面把p1的每個(gè)元素插在p2相應(yīng)元素之前,p1長(zhǎng)a,p2長(zhǎng)b*/ pos = head; /*此時(shí)pos指向p1中的第一個(gè)元素*/ while (p2 != NULL) /漂亮,蛇形插入 p1 = p1->next; &
18、#160; pos->next = p2; pos = p2; p2 = p2->next; pos->next = p1; &
19、#160; pos = p1; return head;/對(duì)合并好的鏈表進(jìn)行排序 void InsertSort(struct Node *p, int m)/排序函數(shù) int i, j, t; struct Node *k
20、; k = p; for (i = 0; i < m - 1; i+) for (j = 0; j < m - i - 1; j+) &
21、#160; if (p->number > (p->next)->number) t = p->number;
22、60; p->number = (p->next)->number; (p->next)->number = t;
23、 p = p->next; p = k; /主函數(shù) int main()/main函數(shù) struct
24、60;Node *p1, *p2; int a; int b; int h; printf("請(qǐng)輸入第一個(gè)鏈表:n"); printf("n輸入鏈表的長(zhǎng)度a:n"); scanf("%d", &
25、;a); printf("請(qǐng)輸入鏈表數(shù)據(jù):"); p1 = create(a); printf("n你剛才輸入的第一個(gè)鏈表信息:n "); print(p1); printf("n 請(qǐng)輸入第二個(gè)鏈表:n"); prin
26、tf("n輸入鏈表的長(zhǎng)度b:n"); scanf("%d", &b); printf("請(qǐng)輸入鏈表數(shù)據(jù):"); p2 = create(b); printf("n你剛才輸入的第二個(gè)鏈表的信息:n"); print(p2);
27、 p1 = inter_link(p1, a, p2, b); h = a + b; printf("n合并后的鏈表n:"); print(p1); InsertSort(p1, h); printf("n排序后的鏈
28、表:n"); print(p1);return 0;測(cè)試結(jié)果: (1)(2)測(cè)試結(jié)果分析:程序運(yùn)行結(jié)果和人工模擬分析過(guò)程完全相同,說(shuō)明程序設(shè)計(jì)正確。題目:可變長(zhǎng)順序表設(shè)計(jì)基本要求:(1)使用動(dòng)態(tài)數(shù)組結(jié)構(gòu)。(2)順序表的操作包括:初始化、求數(shù)據(jù)元素個(gè)數(shù)、插入、刪除、取數(shù)據(jù)元素,編寫(xiě)每個(gè)操作的函數(shù)。(3)設(shè)計(jì)一個(gè)測(cè)試主函數(shù)。測(cè)試數(shù)據(jù): 4,5,6,7,8算法思想:可變長(zhǎng)順序表的設(shè)計(jì),主要是利用動(dòng)態(tài)數(shù)組結(jié)構(gòu)的設(shè)計(jì)方法。動(dòng)態(tài)數(shù)組是指用動(dòng)態(tài)內(nèi)存分配方法定義的數(shù)組,它其中的元素的個(gè)數(shù)是在用戶(hù)申請(qǐng)動(dòng)態(tài)數(shù)組空
29、間時(shí)才確定的。此外,用鍵盤(pán)輸入順序表的元素,進(jìn)行建立順序表。依次調(diào)用初始化、求數(shù)據(jù)元素個(gè)數(shù),插入、刪除和取數(shù)據(jù)元素并輸出新的順序表。 模塊劃分:(1)結(jié)構(gòu)體typedef struct的創(chuàng)建(2)初始化空表Datatype InitList_Sq(SqList &L)(3)建立順序表Datatype CreatList_Sq(SqList &L,int n)(4)銷(xiāo)毀線性表Datatype DestoryList_Sq(SqList &L)(5)判定是否為空表Datatype ListEmpty_Sq(SqList L)(6)求L表中的元素的個(gè)數(shù)int ListLeng
30、th_Sq(SqList L)(7)取表中的的第i個(gè)元素Datatype GetElem_Sq(SqList L, int i, Datatype &e)(8)插入節(jié)點(diǎn)Datatype ListInsert_Sq(SqList &L, int i, Datatype e)(9)刪除節(jié)點(diǎn)Datatype ListDelete_Sq(SqList &L, int i, Datatype &e)(10)輸出線性表L void Output(SqList L)(11)main()函數(shù)主要是調(diào)用以上函數(shù)對(duì)算法進(jìn)行測(cè)試數(shù)據(jù)結(jié)構(gòu): 1、順序表結(jié)構(gòu)體定義typedef stru
31、ctDatatype *elem; int length; int listsize; SqList;2、動(dòng)態(tài)數(shù)組 動(dòng)態(tài)申請(qǐng)空間:L.elem = (Datatype *)malloc(LIST_INIT_SIZE *sizeof(Datatype);源程序:#define NULL 0#define LIST_INIT_SIZE 100 /線性表存儲(chǔ)空間的初始分配量#define LISTINCREMENT 10 /線性表存儲(chǔ)空間的分配增量#include<stdio.h>#include<iostream>typedef int Datatype; typedef
32、structDatatype *elem; /存儲(chǔ)空間基址int length; / 當(dāng)前長(zhǎng)度int listsize; / 當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位)SqList;/1.初始化空表Datatype InitList_Sq(SqList &L)L.elem = (Datatype *)malloc(LIST_INIT_SIZE *sizeof(Datatype);if(! L.elem) exit(-1); /存儲(chǔ)分配失敗 L.length = 0; /空表長(zhǎng)度為L(zhǎng).listsize = LIST_INIT_SIZE; /初始存儲(chǔ)容量return 1
33、;/2.建立順序表LDatatype CreatList_Sq(SqList &L,int n) int i; Datatype e;printf("輸入順序表的長(zhǎng)度:");scanf("%d",&n);L.length = n;if (L.length > LIST_INIT_SIZE) L.elem = (Datatype *) realloc(L.elem,L.length*sizeof(Datatype);printf("輸入數(shù)據(jù):");for(i = 0;i <= L.length-1;i+) s
34、canf("%d",&e); L.elemi = e; return 1;/3.銷(xiāo)毀線性表Datatype DestoryList_Sq(SqList &L)if (L.elem) free(L.elem); L.elem = NULL; L.length = L.listsize = 0;return 1;return 0;/4.判定是否空表Datatype ListEmpty_Sq(SqList L) if (L.length) return 0;return 1;/5.求L中數(shù)據(jù)元素的個(gè)數(shù)int ListLength_Sq(SqList L) retu
35、rn L.length;/6.取表第i個(gè)元素Datatype GetElem_Sq(SqList L, int i, Datatype &e) /用e返回順序表L中第i個(gè)數(shù)據(jù)元素的值,i的合法值為<= i <= ListLength_Sq(L)if (i < 1)|(i > L.length) return 0; /i值不合法elsee = L.elemi-1;return 1;/7.插入結(jié)點(diǎn)Datatype ListInsert_Sq(SqList &L, int i, Datatype e) /在順序線性表L中第i個(gè)位置之前插入新的元素e,i的合法值
36、為<=i<=ListLength_Sq(L)+1Datatype *q,*p,*newbase; if(i < 1 | i > L.length+1) return 0; /i值不合法q = &(L.elemi-1); /q為插入位置for (p = &(L.elemL.length - 1);p >= q;-p) *(p+1) = *p; /插入位置及之后的元素后移*q = e; /插入e+L.length; /表長(zhǎng)增return 1;/8.刪除結(jié)點(diǎn)Datatype ListDelete_Sq(SqList &L, int i, Data
37、type &e) /在順序線性表L中刪除第i個(gè)元素,并用e返回其值,i的合法值為<= i <= ListLength_Sq(L) Datatype *p,*q;if(i < 1) | (i > L.length) return 0; /i值不合法p = &(L.elemi - 1); /p為被刪除元素的位置e = *p; /被刪除元素的值賦給eq = L.elem + L.length - 1; /表尾元素的位置for (+p;p <= q;+p) *(p-1) = *p; /被刪除元素之后的元素左移-L.length; /表長(zhǎng)減return 1;
38、/9.輸出順序表void Output(SqList L)/輸出線性表L int i; for(i = 0;i < L.length;i+) printf("%d ",L.elemi); printf("n"); void put()/窗口邊框 int i; for(i = 0;i < 10;i +) printf(" "); for(i = 0;i < 31;i +) printf("*"); printf("n");void mainpp()/顯示窗口 int i; put
39、(); for(i = 0;i < 10;i +) printf(" "); printf("* "); printf("1.建立一個(gè)順序表"); for(i = 0;i < 10;i+) printf(" "); printf("*"); printf("n"); for(i = 0;i < 10;i +) printf(" "); printf("* "); printf("2.輸出一個(gè)順序表"
40、); for(i = 0;i < 10;i+) printf(" "); printf("*"); printf("n"); for(i = 0;i < 10;i +) printf(" "); printf("* "); printf("3.向順序表中插入一個(gè)元素"); for(i = 0;i < 2;i+) printf(" "); printf("*"); printf("n"); for(i
41、 = 0;i < 10;i +) printf(" "); printf("* "); printf("4.刪除順序表中的一個(gè)元素"); for(i = 0;i < 2;i+) printf(" "); printf("*"); printf("n"); for(i = 0;i < 10;i+) printf(" "); printf("* "); printf("5.從順序表中取出一個(gè)元素");
42、for(i = 0;i < 2;i+) printf(" "); printf("*"); printf("n"); for(i = 0;i < 10;i+) printf(" "); printf("* ");printf("6.求順序表中數(shù)據(jù)元素個(gè)數(shù)"); for(i = 0;i < 2;i+) printf(" "); printf("*"); printf("n"); for(i = 0;i < 10;i+) printf(" "); printf("* ");printf("7.判斷順序表中是否為空"); for(i = 0;i < 4;i+) printf(" "); printf("*"); printf("n"); for(i = 0;i < 10;i+) printf(" "); printf("* ");printf("8.銷(xiāo)毀線性
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程經(jīng)濟(jì)重要知識(shí)梳理試題及答案
- 工程項(xiàng)目中合同管理的關(guān)注點(diǎn)試題及答案
- 工程經(jīng)濟(jì)市場(chǎng)分析方法試題及答案
- 食品加工工藝與安全衛(wèi)生管理練習(xí)題集合
- 匯聚市政工程考試資料的試題及答案
- 物流運(yùn)輸車(chē)隊(duì)協(xié)議
- 生物醫(yī)學(xué)影像診斷技術(shù)題庫(kù)
- 工程經(jīng)濟(jì)企業(yè)財(cái)務(wù)預(yù)測(cè)試題及答案
- 經(jīng)濟(jì)法核心知識(shí)試題及答案
- 經(jīng)濟(jì)法的學(xué)術(shù)研究與試題及答案
- 2025年大數(shù)據(jù)分析師職業(yè)技能測(cè)試卷:數(shù)據(jù)采集與處理流程試題解析
- 2025年計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)考試題及答案
- 脊髓損傷病人的護(hù)理查房
- 2025年全國(guó)特種設(shè)備安全管理人員A證考試練習(xí)題庫(kù)(300題)含答案
- 浙江省9 1高中聯(lián)盟2024-2025學(xué)年高一下學(xué)期4月期中英語(yǔ)試卷(含解析含聽(tīng)力原文無(wú)音頻)
- 人工智能在航空服務(wù)中的應(yīng)用-全面剖析
- 腦區(qū)網(wǎng)絡(luò)在記憶形成中的作用機(jī)制研究-全面剖析
- 2025-2030中國(guó)藥食同源行業(yè)市場(chǎng)運(yùn)行分析及市場(chǎng)前景預(yù)測(cè)研究報(bào)告
- 小飯桌轉(zhuǎn)讓合同協(xié)議
- 2025-2030全球及中國(guó)戊二醛行業(yè)市場(chǎng)現(xiàn)狀供需分析及市場(chǎng)深度研究發(fā)展前景及規(guī)劃可行性分析研究報(bào)告
- 財(cái)務(wù)指標(biāo)分析試題及答案
評(píng)論
0/150
提交評(píng)論