




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 .數(shù)學(xué)與計(jì)算科學(xué)學(xué)院實(shí) 驗(yàn) 報(bào) 告實(shí)驗(yàn)項(xiàng)目名稱(chēng)線(xiàn)性表的順序表示與實(shí)現(xiàn)所屬課程名稱(chēng) 數(shù)據(jù)結(jié)構(gòu)實(shí) 驗(yàn) 類(lèi) 型 驗(yàn)證型實(shí) 驗(yàn) 日 期 班 級(jí) 學(xué) 號(hào) 姓 名 成 績(jī) 一、 實(shí)驗(yàn)概述:實(shí)驗(yàn)?zāi)康? 線(xiàn)性表的邏輯結(jié)構(gòu)特征1.1 以元素在計(jì)算機(jī)“物理位置相鄰”來(lái)表示線(xiàn)性表中數(shù)據(jù)元素之間的邏輯關(guān)系。 1.2 有且僅有一個(gè)開(kāi)始結(jié)點(diǎn),沒(méi)有直接前驅(qū),且僅有一個(gè)直接后繼;有且僅有一個(gè)終結(jié)結(jié)點(diǎn),沒(méi)有直接后繼,且僅有一個(gè)直接前驅(qū)。1.3 其余部結(jié)點(diǎn)都有且僅有一個(gè)直接前驅(qū)和一個(gè)直接后繼。2 掌握線(xiàn)性表的基本操作在順序存儲(chǔ)結(jié)構(gòu)上的實(shí)現(xiàn)。實(shí)驗(yàn)原理1 順序表的特點(diǎn) 1.1 邏輯位置上相鄰和物理位置上相鄰1.2 是一種隨機(jī)存儲(chǔ)結(jié)
2、構(gòu),其存儲(chǔ)位置可以用一簡(jiǎn)單直觀的公式表示2 順序表的類(lèi)C語(yǔ)言表示:#define LIST_INIT_SIZE 9 /線(xiàn)性表存儲(chǔ)空間的初始分配量#define LISTINCREMENT 2 /線(xiàn)性表存儲(chǔ)空間的分配增量typedef struct ElemType * elem;/存儲(chǔ)空間基址 int length;/當(dāng)前長(zhǎng)度 int listsize;/當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位)SqList;實(shí)驗(yàn)環(huán)境VC+6.0二、實(shí)驗(yàn)容實(shí)驗(yàn)方案編寫(xiě)主函數(shù),調(diào)用順序表的初始化建空表,插入和刪除算法,調(diào)試運(yùn)行得出結(jié)果實(shí)驗(yàn)過(guò)程(實(shí)驗(yàn)步驟、記錄、數(shù)據(jù)、分析)8. 先將線(xiàn)性表的動(dòng)
3、態(tài)分配順序存儲(chǔ)結(jié)構(gòu),算法與主函數(shù)編入VC+6.0中typedef struct ElemType * elem; int length; int listsize;SqList;Status InitList_Sq(SqList &L) L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK;Status ListInsert_Sq(SqList &L,int i,E
4、lemType e) if (i<1|i>L.length+1) return ERROR; if(L.length>=L.listsize) newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType); if(! newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1); for(p=&(L.elemL.length-1);p>=q;- -p)*(p
5、+1)=*p; *q=e; +L.length; return OK;Status ListDelect_Sq(SqList &L,int i,ElemType &e) if(i<1)|(i>L.length) return ERROR;p=&(L.elemi-1);e=*p; q=L.elem+L.length-1; for(+p;p<=q;+p) *(p-1)=*p; -L.length; return OK;void main() SqList L; int i; InitList_Sq(L);for(i=0;i<LIST_INIT_SIZ
6、E;i+) scanf("%d",&L.elemi); L.length+; for(i=0;i<L.length;i+) printf("%d ",L.elemi); printf("n"); ElemType e; scanf("%d%d",&i,&e); ListInsert_Sq(L,i,e); for(i=0;i<L.length;i+) printf("%d ",L.elemi); printf("n"); scanf(&quo
7、t;%d",&i); ListDelect_Sq(L,i,e); for(i=0;i<L.length;i+) printf("%d ",L.elemi); printf("n");2.調(diào)試第一次出現(xiàn)的錯(cuò)誤:原因:由于許多變量未定義,以與沒(méi)有頭文件與宏定義所以錯(cuò)誤許多,還有更多錯(cuò)誤沒(méi)有顯示出來(lái)3.將以下語(yǔ)句編入程序中:#include "stdio.h"#include "stdlib.h"#define TRUE 1#define FALSE 0#define OK 1#define ER
8、ROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 9 #define LISTINCREMENT 2typedef int ElemType; typedef int Status;4.調(diào)試第二次出現(xiàn)以下錯(cuò)誤:原因:是在每個(gè)算法中有許多變量未定義,導(dǎo)致許多錯(cuò)誤5.再將語(yǔ)句: int *newbase; int *q; int *p;寫(xiě)入插入算法中;將語(yǔ)句: int *p; int *q;寫(xiě)入刪除算法中;6.調(diào)試第三次顯示沒(méi)有錯(cuò)誤:7.運(yùn)行第一次顯示結(jié)果為:8. 但運(yùn)行后的界面顯得很單調(diào);要是忘記下一個(gè)算法是什
9、么就容易輸入出錯(cuò),也不適合大眾使用;因此為了將程序優(yōu)化,所以在主函數(shù)中增加以下輸入輸出語(yǔ)句和條件語(yǔ)句;為了讓程序更加嚴(yán)謹(jǐn),因此還加入一些循環(huán)語(yǔ)句。int i,p,q;p=2,q=2;printf("請(qǐng)輸入您想構(gòu)建的順序表(元素為%d個(gè)):n",LIST_INIT_SIZE);printf("您構(gòu)建的順序表是:n");printf("請(qǐng)輸入您想在第幾個(gè)元素位置前插入元素:n",LIST_INIT_SIZE);while(i<=0|i>L.length)&&p>=0)printf("輸入的數(shù)字錯(cuò)
10、誤,(只剩下%d次重新輸入符合要求的數(shù)字的機(jī)會(huì))n",p);-p;if(p<0)printf("原因:您輸入數(shù)字錯(cuò)誤過(guò)多,程序終止運(yùn)行n");return ERROR;scanf("%d",&i);printf("請(qǐng)輸入您想插入的數(shù):n");printf("形成的新順序表為:n");printf("請(qǐng)輸入您想刪除的是第幾個(gè)元素:n");while(i<=0|i>L.length)&&q>=0)printf("輸入的數(shù)字錯(cuò)誤,(只
11、剩下%d次重新輸入符合要求的數(shù)字的機(jī)會(huì))n",q);-q;if(q<0)printf("原因:您輸入數(shù)字錯(cuò)誤過(guò)多,程序終止運(yùn)行n");return ERROR;printf("刪除的數(shù)為:n");printf("%dn",e);printf("形成的新順序表為:n");將語(yǔ)句scanf("%d%d",&i,&e);變?yōu)閟canf("%d",&i);scanf("%d",&e);9. 那么主函數(shù)包含的語(yǔ)句變?yōu)椋?/p>
12、main()SqList L;int i,p,q;p=2,q=2;InitList_Sq(L);printf("請(qǐng)輸入您想構(gòu)建的順序表(元素為%d個(gè)):n",LIST_INIT_SIZE);for(i=0;i<LIST_INIT_SIZE;i+) scanf("%d",&L.elemi); L.length+;printf("您構(gòu)建的順序表是:n");for(i=0;i<L.length;i+) printf("%d ",L.elemi); printf("n"); Elem
13、Type e;printf("請(qǐng)輸入您想在第幾個(gè)元素位置前插入元素:n"); scanf("%d",&i);while(i<=0|i>L.length)&&p>=0)printf("輸入的數(shù)字錯(cuò)誤,(只剩下%d次重新輸入符合要求的數(shù)字的機(jī)會(huì))n",p);-p;if(p<0)printf("原因:您輸入數(shù)字錯(cuò)誤過(guò)多,程序終止運(yùn)行n");return ERROR;scanf("%d",&i);printf("請(qǐng)輸入您想插入的數(shù):n&q
14、uot;);scanf("%d",&e);ListInsert_Sq(L,i,e);printf("形成的新順序表為:n");for(i=0;i<L.length;i+) printf("%d ",L.elemi);printf("n");printf("請(qǐng)輸入您想刪除的是第幾個(gè)元素:n"); scanf("%d",&i);while(i<=0|i>L.length)&&q>=0)printf("輸入的數(shù)字錯(cuò)誤
15、,(只剩下%d次重新輸入符合要求的數(shù)字的機(jī)會(huì))n",q);-q;if(q<0)printf("原因:您輸入數(shù)字錯(cuò)誤過(guò)多,程序終止運(yùn)行n");return ERROR;scanf("%d",&i);ListDelect_Sq(L,i,e);printf("刪除的數(shù)為:n");printf("%dn",e);printf("形成的新順序表為:n");for(i=0;i<L.length;i+) printf("%d ",L.elemi);printf
16、("n");return 0;10. 調(diào)試第四次顯示沒(méi)錯(cuò)誤:11. 運(yùn)行第二次顯示結(jié)果為:12. 運(yùn)行第三次顯示結(jié)果為:13. 運(yùn)行第四次顯示結(jié)果為:這樣那么程序就完整了,清晰明了,用戶(hù)運(yùn)行的時(shí)候也容易知道自己要輸入什么了實(shí)驗(yàn)結(jié)論(結(jié)果)實(shí)驗(yàn)小結(jié)(收獲體會(huì))1. 實(shí)驗(yàn)程序應(yīng)該多些注釋?zhuān)@樣方便人家讀懂自己編寫(xiě)的程序。2. 主函數(shù)中多增加一些printf函數(shù),方便運(yùn)行時(shí)輸入數(shù)據(jù)3. 編寫(xiě)程序是細(xì)心一點(diǎn),注意大小寫(xiě),注意單詞拼寫(xiě),還要注意分號(hào)4. 努力看書(shū),要看懂算法的功能,結(jié)合C語(yǔ)言知識(shí)能快速調(diào)試并且改正錯(cuò)誤5. 要清楚算法不同于程序,算法就相當(dāng)于C語(yǔ)言中的定義函數(shù)功能語(yǔ)句且
17、是不完整的語(yǔ)句。三、指導(dǎo)教師評(píng)語(yǔ)與成績(jī):評(píng) 語(yǔ)評(píng)語(yǔ)等級(jí)優(yōu)良中與格不與格1.實(shí)驗(yàn)報(bào)告按時(shí)完成,字跡清楚,文字?jǐn)⑹隽鲿?邏輯性強(qiáng)2.實(shí)驗(yàn)方案設(shè)計(jì)合理3.實(shí)驗(yàn)過(guò)程(實(shí)驗(yàn)步驟詳細(xì),記錄完整,數(shù)據(jù)合理,分析透徹)4實(shí)驗(yàn)結(jié)論正確. 成 績(jī): 指導(dǎo)教師簽名: 批閱日期:附錄1:源 程 序#include "stdio.h"#include "stdlib.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LI
18、ST_INIT_SIZE 9 /線(xiàn)性表存儲(chǔ)空間的初始分配量#define LISTINCREMENT 2 /線(xiàn)性表存儲(chǔ)空間的分配增量typedef int ElemType; /自定義類(lèi)型名typedef int Status;typedef struct ElemType * elem;/存儲(chǔ)空間基址int length;/當(dāng)前長(zhǎng)度int listsize;/當(dāng)前分配的存儲(chǔ)容量(以sizeof(ElemType)為單位)SqList;Status InitList_Sq(SqList &L)/ 構(gòu)造一個(gè)空的線(xiàn)性表L L.elem=(ElemType*)malloc(LIST_INIT
19、_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); / 存儲(chǔ)分配失敗 L.length=0;/ 空表長(zhǎng)度為0 L.listsize=LIST_INIT_SIZE;/ 初始存儲(chǔ)容量return OK;Status ListInsert_Sq(SqList &L,int i,ElemType e)/ 在順序線(xiàn)性表L的第i個(gè)元素之前插入新的元素e , i的合法值為1iListLength_Sq(L)+1int *newbase;int *q;int *p;if (i<1|i>L.length+1) return ERROR;/
20、i值不合法if(L.length>=L.listsize)/ 當(dāng)前存儲(chǔ)空間已滿(mǎn),增加容量 newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (ElemType);if(! newbase)exit(OVERFLOW);/ 存儲(chǔ)分配失敗 L.elem=newbase;/ 新基址 L.listsize+=LISTINCREMENT;/ 增加存儲(chǔ)容量 q=&(L.elemi-1); / q為插入位置for(p=&(L.elemL.length-1);p>=q;-p) *(p+1)=*p
21、; / 插入位置與之后的元素右移 *q=e;/ 插入e +L.length;/ 表長(zhǎng)增1 return OK;Status ListDelect_Sq(SqList &L,int i,ElemType &e)/ 在順序線(xiàn)性表L中刪除第i個(gè)元素,并用e返回其值,i的合法值為1iListLength_Sq(L)int *p; int *q;if(i<1)|(i>L.length) return ERROR;/ i值不合法 p=&(L.elemi-1);/ p為被刪除元素的位置 e=*p; / 被刪除元素的值賦給e q=L.elem+L.length-1;/ 表尾
22、元素的位置 for(+p;p<=q;+p) *(p-1)=*p;/ 被刪除元素之后的元素左移 -L.length;/ 表長(zhǎng)減1return OK;main() SqList L;int i,p,q; p=2,q=2; InitList_Sq(L); printf("請(qǐng)輸入您想構(gòu)建的順序表(元素為%d個(gè)):n",LIST_INIT_SIZE);for(i=0;i<LIST_INIT_SIZE;i+) scanf("%d",&L.elemi); L.length+; printf("您構(gòu)建的順序表是:n");for(i
23、=0;i<L.length;i+) printf("%d ",L.elemi); printf("n"); ElemType e; printf("請(qǐng)輸入您想在第幾個(gè)元素位置前插入元素:n",L.length); scanf("%d",&i);while(i<=0|i>L.length)&&p>=0)printf("輸入的數(shù)字錯(cuò)誤,(只剩下%d次重新輸入符合要求的數(shù)字的機(jī)會(huì))n",p);-p;if(p<0)printf("原因:您輸
24、入數(shù)字錯(cuò)誤過(guò)多,程序終止運(yùn)行n");return ERROR;scanf("%d",&i); printf("請(qǐng)輸入您想插入的數(shù):n"); scanf("%d",&e); ListInsert_Sq(L,i,e); printf("形成的新順序表為:n"); for(i=0;i<L.length;i+) printf("%d ",L.elemi); printf("n"); printf("請(qǐng)輸入您想刪除的是第幾個(gè)元素:n",L.length); scanf("%d",&i);w
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南極科考站特種供暖設(shè)備租賃與能源管理咨詢(xún)合同
- 律師事務(wù)所助理案件跟蹤與反饋協(xié)議
- 美團(tuán)閃購(gòu)業(yè)務(wù)代運(yùn)營(yíng)與數(shù)據(jù)安全保障合同
- 節(jié)慶活動(dòng)旅游線(xiàn)路地接服務(wù)及市場(chǎng)推廣合同
- 堅(jiān)果炒貨原料采購(gòu)價(jià)格動(dòng)態(tài)調(diào)整協(xié)議
- 海外出口貨物清關(guān)與全球物流配送委托管理協(xié)議
- 網(wǎng)紅燒烤品牌授權(quán)與市場(chǎng)推廣合作合同
- 智能家居產(chǎn)品數(shù)據(jù)安全保護(hù)補(bǔ)充協(xié)議
- 2024年高考語(yǔ)文一輪復(fù)習(xí)第四編寫(xiě)作專(zhuān)題三微案一選材用材學(xué)案含解析
- 2024-2025學(xué)年高中歷史第二單元第8課第二次工業(yè)革命教案含解析新人教版必修2
- 腸結(jié)病(不完全性腸梗阻)中醫(yī)診療方案(試行)
- 肩周炎的康復(fù)PPT通用課件
- GB/T 328.5-2007建筑防水卷材試驗(yàn)方法第5部分:高分子防水卷材厚度、單位面積質(zhì)量
- GB/T 15970.6-2007金屬和合金的腐蝕應(yīng)力腐蝕試驗(yàn)第6部分:恒載荷或恒位移下預(yù)裂紋試樣的制備和應(yīng)用
- 案款收款賬戶(hù)確認(rèn)書(shū)
- 9-馬工程《藝術(shù)學(xué)概論》課件-第九章(20190403)【已改格式】.課件電子教案
- 施工現(xiàn)場(chǎng)建筑垃圾處置專(zhuān)項(xiàng)方案
- 歡迎新同學(xué)幼兒園中小學(xué)開(kāi)學(xué)第一課入學(xué)準(zhǔn)備ppt
- (整理)柴油發(fā)電機(jī)的檢修
- 2021年肇慶市端州區(qū)華佗醫(yī)院醫(yī)護(hù)人員招聘筆試試題及答案解析
- DB23∕T 482-1998 主要樹(shù)種樹(shù)高級(jí)立木材積表
評(píng)論
0/150
提交評(píng)論