版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計 報 告</p><p> 課程設(shè)計名稱:數(shù)據(jù)結(jié)構(gòu)和算法課程設(shè)計</p><p> 課程設(shè)計題目: 順序表結(jié)構(gòu)和算法</p><p><b> 目 錄</b></p><p><b> 目錄</b></p><p><b
2、> 學(xué)術(shù)誠信聲明I</b></p><p> 1 問題分析和任務(wù)定義1</p><p><b> 1.1題目1</b></p><p><b> 1.2內(nèi)容1</b></p><p> 2系統(tǒng)功能模塊結(jié)構(gòu)圖2</p><p> 3數(shù)據(jù)
3、結(jié)構(gòu)設(shè)計及使用說明3</p><p> 3.1 定義線性表抽象數(shù)據(jù)類型3</p><p> 3.1.1基本操作:3</p><p> 3.2詳細設(shè)計和編碼4</p><p> 3.2.1類型定義4</p><p> 3.2.2順序表初始化4</p><p> 3.2.3子
4、函數(shù)輸出函數(shù)4</p><p> 4 相關(guān)函數(shù)的描述6</p><p> 4.1 本函數(shù)包含的十個函數(shù)6</p><p> 4.1.1各函數(shù)之間的調(diào)用關(guān)系6</p><p> 4.2主函數(shù)的代碼7</p><p><b> 4.3用法說明7</b></p>
5、<p> 5算法的程序流程圖8</p><p><b> 6程序測試結(jié)果9</b></p><p><b> 7參考文獻11</b></p><p> 8附錄(程序清單)12</p><p><b> 2</b></p><p&g
6、t; 1 問題分析和任務(wù)定義</p><p><b> 1.1題目</b></p><p><b> 順序表結(jié)構(gòu)和算法。</b></p><p><b> 1.2內(nèi)容</b></p><p> 1、設(shè)計出順序表結(jié)構(gòu)的相關(guān)函數(shù)庫,以便在程序設(shè)計中調(diào)用。</p&g
7、t;<p> 2、實現(xiàn)順序表的各種基本函數(shù)以及常用函數(shù)。</p><p> 3、給出1-2個例子,通過調(diào)用自己的庫函數(shù)來實現(xiàn)問題的求解。</p><p> 4、設(shè)計順序表的相關(guān)函數(shù),以便在程序調(diào)用中調(diào)用,進行順序表中元素的插</p><p> 入、查找、取出、刪除等操作。</p><p><b> 1.3要求
8、</b></p><p> 1、設(shè)計軟件的系統(tǒng)功能模塊及各模塊的程序流程圖。</p><p> 2、采用模塊化編程,系統(tǒng)中的各項功能分別用函數(shù)編寫。</p><p> 3、學(xué)生獨立完成系統(tǒng)的設(shè)計,編碼和調(diào)試工作并通過指導(dǎo)老師的檢查。</p><p> 4、按課程設(shè)計規(guī)范撰寫課程設(shè)計報告。</p><p&
9、gt; 2系統(tǒng)功能模塊結(jié)構(gòu)圖</p><p> 圖1-順序表結(jié)構(gòu)功能模塊圖</p><p> 3數(shù)據(jù)結(jié)構(gòu)設(shè)計及使用說明</p><p> 3.1 定義線性表抽象數(shù)據(jù)類型</p><p> 3.1.1基本操作:</p><p> SqLsetnull (L)</p><p> 操作前
10、提:L是一個未初始化的線性表</p><p> 操作結(jié)果:將L初始化為一個空的線性表</p><p> 操作前提:L是一個已初始化的空表</p><p> 操作結(jié)果:建立一個非空的線性表L</p><p> SqLinsert (L,s,i)</p><p> 操作前提:線性表L已存在</p>
11、<p> 操作結(jié)果:將元素s插入到線性表L的i位置</p><p> SqLdelete (L,i)</p><p> 操作前提:線性表L已存在</p><p> 操作結(jié)果:將線性表L中i位置的元素刪除,</p><p> SqLlocate (L,x)</p><p> 操作前提:線性表L已存在
12、</p><p> 操作結(jié)果:在線性表L中查找元素x,</p><p> 若存在,返回元素在表中的序號位置;</p><p><b> 若不存在,返回-1</b></p><p> SqLlength_L(L)</p><p> 初始條件:線性表L已存在</p><p
13、> 操作結(jié)果:返回L中數(shù)據(jù)元素個數(shù)</p><p> SqLget (L,i)</p><p> 初始條件:線性表L已存在</p><p> 操作結(jié)果:判斷第i個數(shù)據(jù)元素值是否存在,存在則返回1;否則,返回0; </p><p> 3.2詳細設(shè)計和編碼</p><p><b> 3.2.1類
14、型定義</b></p><p> typedef struct</p><p> { Datatype data[maxlen];</p><p><b> int last;</b></p><p> }Sequenlist; /*將data和len封裝成一個結(jié)構(gòu)體*/</p><
15、;p> 3.2.2順序表初始化</p><p> Sequenlist *SqLsetnull()</p><p><b> {</b></p><p> Sequenlist *L;</p><p> L=(Sequenlist*)malloc(sizeof(Sequenlist));</p&g
16、t;<p> L->last=-1;</p><p> return(L);</p><p><b> }</b></p><p> 3.2.3子函數(shù)輸出函數(shù)</p><p> void print(Sequenlist *L)</p><p><b>
17、{</b></p><p><b> int h;</b></p><p> printf("顯示結(jié)果為: ");</p><p> for(h=0;h<L->last+1;h++) </p><p><b> {</b></p>&
18、lt;p> printf("%d ",L->data[h]);</p><p> }/*輸出順序表中所有元素*/</p><p> printf("\n"); </p><p><b> }</b></p><p><b> 判表滿 </b
19、></p><p> int SqLempty(Sequenlist *L)</p><p><b> {</b></p><p> if(L->last+1>=50)</p><p> return(1);</p><p><b> else</b&g
20、t;</p><p> return(0);</p><p><b> }</b></p><p><b> 插入函數(shù)</b></p><p> int SqLinsert(Sequenlist *L,Datatype s,int i)</p><p><b&g
21、t; {</b></p><p><b> int j;</b></p><p> if(SqLempty(L)==1)</p><p><b> {</b></p><p> printf("表滿溢出\n");</p><p>
22、return(0);</p><p><b> }</b></p><p> else if(i<1||i>L->last+2)</p><p><b> {</b></p><p> printf("位置出錯\n");</p><p
23、> return(0);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> for(j=L->last;j>=i-1;j--)</p><p&
24、gt; L->data[j+1]=L->data[j];/*節(jié)點往后移動一個位置*/</p><p> L->data[i-1]=s; /*插入新元素s*/</p><p> L->last++; /*last仍指向最后一個元素*/</p><
25、p> return (1); </p><p><b> }</b></p><p><b> 取數(shù)函數(shù)</b></p><p> int SqLget(Sequenlist *L, int i)</p><p><b> {</b></p>&
26、lt;p><b> int x;</b></p><p> if(i<1||i>L->last+1)</p><p><b> {</b></p><p> printf("取數(shù)出錯!");</p><p> return (0);</p
27、><p><b> }</b></p><p><b> else</b></p><p> x=L->data[i-1];</p><p> return (1) ;</p><p><b> }</b></p><p&
28、gt;<b> 更新函數(shù)</b></p><p> int SqLupdate(Sequenlist *L,int i,int s)</p><p><b> {</b></p><p> if(i<1||i>L->last+2)</p><p><b> {&
29、lt;/b></p><p> printf("位置出錯\n");</p><p> return(0);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b
30、></p><p> L->data[i-1]=s;</p><p> return (1); </p><p><b> }</b></p><p><b> }</b></p><p> 其中用switch來做選擇操作,從而實現(xiàn)個子函數(shù)對應(yīng)的功能。
31、</p><p> 4 相關(guān)函數(shù)的描述</p><p> 4.1 本函數(shù)包含的十個函數(shù)</p><p><b> 主函數(shù)main()</b></p><p> 初始化順序表函數(shù)SqLsetnull ()</p><p> 顯示順序表內(nèi)容函數(shù)print()</p><
32、;p> 插入元素函數(shù)SqLinsert ()</p><p> 刪除元素函數(shù)SqLdelete ()</p><p> 查找元素函數(shù)SqLlocate ()</p><p> 取值函數(shù)SqLget ()</p><p><b> 判表滿</b></p><p> 4.1.1各函數(shù)
33、之間的調(diào)用關(guān)系</p><p><b> 4.2主函數(shù)的代碼</b></p><p><b> main()</b></p><p> { 說明一個單鏈表 L ;</p><p><b> 初始化 L ;</b></p><p><b>
34、; 建立 L ;</b></p><p><b> 顯示 L ;</b></p><p><b> }</b></p><p><b> 4.3用法說明</b></p><p> 程序執(zhí)行后,首先輸出:</p><p><b&
35、gt; “請輸入表長:”n</b></p><p><b> 輸入表長后,輸出:</b></p><p> “請輸入n個元素值:”</p><p> 輸入n個元素值后,輸出:</p><p><b> “請選擇:”</b></p><p> 任意選擇指
36、定操作的某一操作序號:如3</p><p> “輸入需要刪除的元素”</p><p> 然后程序自動執(zhí)行結(jié)果并顯示出來</p><p><b> 5算法的程序流程圖</b></p><p> 圖二-順序表的程序流程圖</p><p><b> 6程序測試結(jié)果</b>
37、</p><p> 執(zhí)行情況如下:請正確輸入4個元素:1 2 3 4</p><p><b> 請選擇:</b></p><p><b> 1:顯示所有元素 </b></p><p><b> 2:增加一個元素</b></p><p> 3:按
38、數(shù)值刪除某個元素 </p><p> 4:按位置刪除某個元素 </p><p><b> 5:按位置更新</b></p><p><b> 6:按數(shù)值更新</b></p><p> 7:按位置查找某元素</p><p><b> 8:按值查找某元素<
39、/b></p><p><b> 9:退出程序</b></p><p><b> 3</b></p><p><b> 需要刪除的元素:4</b></p><p> 顯示結(jié)果為:1 2 3 </p><p> 測試結(jié)果如下圖所示:<
40、/p><p><b> 圖三 插入一個數(shù)字</b></p><p> 圖四 刪除一個數(shù)字 圖五 更改一個數(shù)字</p><p><b> 7參考文獻</b></p><p> 【1】嚴蔚敏、陳文博,數(shù)據(jù)結(jié)構(gòu)應(yīng)用算法教程【M】.北京:清華大學(xué)出版社,20
41、11.5</p><p> 【2】張小莉、王淼、羅文劼,數(shù)據(jù)結(jié)構(gòu)與算法【M】.北京:機械工業(yè)出版社,2014.4</p><p><b> 8附錄(程序清單)</b></p><p> #include<stdio.h></p><p> #include<stdlib.h></p&
42、gt;<p> typedef int Datatype;</p><p> typedef struct Sequenlist</p><p><b> {</b></p><p> Datatype data[50];</p><p><b> int last;</b>
43、</p><p> }Sequenlist;</p><p> Sequenlist *SqLsetnull()</p><p><b> {</b></p><p> Sequenlist *L;</p><p> L = (Sequenlist*)malloc(sizeof(Seq
44、uenlist));</p><p> L->last = -1;</p><p> return(L);</p><p><b> }</b></p><p> void print(Sequenlist *L)</p><p><b> {</b><
45、/p><p><b> int h;</b></p><p> printf("顯示結(jié)果為: ");</p><p> for (h = 0; h<L->last + 1; h++)</p><p><b> {</b></p><p>
46、 printf("%d ", L->data[h]);</p><p> }/*輸出順序表中所有元素*/</p><p> printf("\n");</p><p><b> }</b></p><p> int SqLempty(Sequenlist *L)<
47、;/p><p><b> {</b></p><p> if (L->last + 1 >= 50)</p><p> return(1);</p><p><b> else</b></p><p> return(0);</p><p
48、><b> }</b></p><p> int SqLinsert(Sequenlist *L, Datatype s, int i)</p><p><b> {</b></p><p><b> int j;</b></p><p> if (SqLemp
49、ty(L) == 1)</p><p><b> {</b></p><p> printf("表滿溢出\n");</p><p> return(0);</p><p><b> }</b></p><p> else if (i<1 |
50、| i>L->last + 2)</p><p><b> {</b></p><p> printf("位置出錯\n");</p><p> return(0);</p><p><b> }</b></p><p><b>
51、; else</b></p><p><b> {</b></p><p> for (j = L->last; j >= i - 1; j--)</p><p> L->data[j + 1] = L->data[j];/*節(jié)點往后移動一個位置*/</p><p> L-&
52、gt;data[i - 1] = s; /*插入新元素s*/</p><p> L->last++; /*last仍指向最后一個元素*/</p><p> return (1); </p><p><b> }</b></p>
53、;<p><b> }</b></p><p> int SqLdelete(Sequenlist *L, int i)</p><p><b> {</b></p><p><b> int j;</b></p><p> if (L->last
54、<0)</p><p><b> {</b></p><p> printf("順序表空!");</p><p> return(0);</p><p><b> }</b></p><p> else if (i<1 || (i&g
55、t;L->last + 1)) /*檢查空表及刪除位置的合法性*/</p><p><b> {</b></p><p> printf("參數(shù)出錯!");</p><p> return(0);</p><p><b> }</b></p><
56、p><b> else</b></p><p><b> {</b></p><p> for (j = i; j <= L->last + 1; j++)</p><p> L->data[j - 1] = L->data[j];</p><p> L-&g
57、t;last--;</p><p> return(1);</p><p><b> }</b></p><p><b> }</b></p><p> int SqLupdate(Sequenlist *L, int i, int s)</p><p><b&
58、gt; {</b></p><p> if (i<1 || i>L->last + 2)</p><p><b> {</b></p><p> printf("位置出錯\n");</p><p> return(0);</p><p>
59、<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> L->data[i - 1] = s;</p><p> return (1);</p><p><b>
60、 }</b></p><p><b> }</b></p><p> int SqLget(Sequenlist *L, int i)</p><p><b> {</b></p><p><b> int x;</b></p><p&
61、gt; if (i<1 || i>L->last + 1)</p><p><b> {</b></p><p> printf("取數(shù)出錯!");</p><p> return (0);</p><p><b> }</b></p>
62、<p><b> else</b></p><p> x = L->data[i - 1];</p><p> return (1);</p><p><b> }</b></p><p> void SqLlocate(Sequenlist *L, int x)</
63、p><p><b> {</b></p><p> int i, z = 0;</p><p> for (i = 0; i<L->last + 1; i++)</p><p><b> {</b></p><p> if (L->data[i] ==
64、 x)</p><p><b> {</b></p><p> printf("該元素的位置為:%d", i + 1);</p><p><b> z = 1;</b></p><p><b> }</b></p><p>&
65、lt;b> }</b></p><p> if (z == 0)</p><p> printf("不存在此元素!");</p><p><b> }</b></p><p> void Delete_x(Sequenlist *L, int x)</p>&
66、lt;p><b> {</b></p><p> int j, k, z = 0;</p><p> for (j = 0; j<L->last + 1; j++){</p><p> if (L->data[j] == x) {</p><p> for (k = j; k<L-
67、>last + 1; k++){</p><p> L->data[k] = L->data[k + 1]; /*向前移動一個位置*/</p><p><b> }</b></p><p> L->last--;</p><p> j--; /*返回到刪除的位置*/</p>
68、<p><b> z = 1;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (z == 0)</p><p> printf("不存在此元素!");</p>
69、<p><b> }</b></p><p> void Update_x(Sequenlist *L, int x)</p><p><b> {</b></p><p> int j, k, z = 0, t = 1;</p><p> for (j = 0; j<L
70、->last + 1; j++)</p><p><b> {</b></p><p> if (L->data[j] == x)</p><p><b> {</b></p><p> printf("將第%d次出現(xiàn)的數(shù)%d更改為:", t, x);<
71、/p><p> scanf("%d", &k);</p><p> L->data[j] = k;</p><p><b> z = 1;</b></p><p><b> t++;</b></p><p><b> }<
72、;/b></p><p><b> }</b></p><p> if (z == 0)</p><p> printf("不存在此元素!");</p><p><b> }</b></p><p> int main()</p>
73、;<p><b> {</b></p><p> Sequenlist *L;</p><p> int i, j, t, s, h, m, n, flag = 1;</p><p> L = SqLsetnull();</p><p> printf("請輸入表長:");&l
74、t;/p><p> scanf("%d", &i); L->last = i - 1;</p><p> printf("請輸入%d個元素值:", i); /*確定表長*/</p><p> for (t = 0; t<i; t++)</p><p> sc
75、anf("%d", &L->data[t]); /*輸入表中元素*/</p><p> while (flag) /*使用標(biāo)識flag*/</p><p><b> {</b></p><p> printf("請選擇:\n");</p>
76、<p> printf("1:顯示所有元素\n");</p><p> printf("2:增加一個元素\n");</p><p> printf("3:按數(shù)值刪除某個元素\n");</p><p> printf("4:按位置刪除某元素\n");</p>
77、<p> printf("5:按位置更改\n");</p><p> printf("6:按數(shù)值更改\n");</p><p> printf("7:按位置查找(?。┰豛n");</p><p> printf("8:按值查找一個元素\n");</p>
78、<p> printf("9:退出程序\n"); /*輸入順序表元素之后顯示選項*/</p><p> scanf("%d", &j);</p><p> switch (j) /*當(dāng)輸入數(shù)字j時自動調(diào)用函數(shù)庫中的函數(shù)實現(xiàn)功能*/</p>
79、<p><b> {</b></p><p> case 1:{print(L); break; }</p><p><b> case 2:</b></p><p><b> {</b></p><p> printf("輸入需要插入的數(shù)值和位
80、置:");</p><p> scanf("%d %d", &s, &i);</p><p> h = SqLinsert(L, s, i);</p><p><b> if (h)</b></p><p><b> {</b></p>
81、;<p> printf("插入之后的線性表:"); /*顯示插入元素后的順序表*/</p><p><b> print(L);</b></p><p><b> }</b></p><p><b> break;</b><
82、/p><p><b> }</b></p><p><b> case 3:</b></p><p><b> {</b></p><p> printf("輸入需要刪除的元素:");</p><p> scanf("
83、%d", &s);</p><p> Delete_x(L, s); /*顯示刪除元素后的順序表*/</p><p><b> print(L);</b></p><p><b> break;</b></p><p><b> }&l
84、t;/b></p><p><b> case 4:</b></p><p><b> {</b></p><p> printf("輸入需要刪除的數(shù)值位置:");</p><p> scanf("%d", &s);</p>
85、<p> h = SqLdelete(L, s);</p><p> printf("\n");</p><p><b> if (h)</b></p><p><b> {</b></p><p> printf("刪除之后的線性表:\n&quo
86、t;); /*顯示刪除元素后的順序表*/</p><p><b> print(L);</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b>
87、</p><p><b> case 5:{</b></p><p> printf("輸入需要更改的位置和更改后的數(shù)據(jù):");</p><p> scanf("%d %d", &m, &n);</p><p> h = SqLupdate(L, m, n)
88、;</p><p><b> if (h)</b></p><p><b> {</b></p><p> printf("插入之后的線性表:"); /*顯示更新元素后的順序表*/</p><p><b> print(L);<
89、/b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> case 6:{</b></p><p> printf(
90、"輸入需要更改的數(shù)");</p><p> scanf("%d", &m);</p><p> Update_x(L, m);</p><p><b> print(L);</b></p><p><b> break;</b></p&g
91、t;<p><b> }</b></p><p><b> case 7:{</b></p><p> printf("取出第n個元素:");</p><p> scanf("%d", &i);</p><p> h = SqL
92、get(L, i);</p><p><b> if (h)</b></p><p><b> {</b></p><p> printf("所取的數(shù)據(jù)元素為:");</p><p> printf("%d\n", L->data[i - 1])
93、; /*輸出所取元素*/</p><p><b> }</b></p><p><b> else</b></p><p> printf("輸入序號超出范圍!\n"); /*輸入不合法報錯*/</p><p><b>
94、 break;</b></p><p><b> }</b></p><p><b> case 8:</b></p><p><b> {</b></p><p> printf("輸入需要查找的數(shù)值:");</p>&
95、lt;p> scanf("%d", &s);</p><p> SqLlocate(L, s);</p><p> printf("\n");</p><p><b> break;</b></p><p><b> }</b><
96、/p><p><b> case 9:</b></p><p><b> flag = 0;</b></p><p> printf("程序結(jié)束,按任意鍵退出!\n");</p><p><b> }</b></p><p>&l
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)順序表課程設(shè)計--順序表基本實現(xiàn)和存儲結(jié)構(gòu)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----huffman編碼
- 哈希表設(shè)計-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----哈希表設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--哈希表設(shè)計
- 《數(shù)據(jù)結(jié)構(gòu)與算法分析》課程設(shè)計順序表、單鏈表、順序棧、查找、排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--課程表設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--哈希表設(shè)計問題
評論
0/150
提交評論