資源描述:
《數(shù)據(jù)結(jié)構(gòu)線性表實(shí)驗(yàn)報(bào)告.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、實(shí)驗(yàn)報(bào)告課程數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)名稱實(shí)驗(yàn)一線性表學(xué)號(hào)姓名實(shí)驗(yàn)日期:實(shí)驗(yàn)一線性表實(shí)驗(yàn)?zāi)康模?.理解線性表的邏輯結(jié)構(gòu)特性;2.熟練掌握線性表的順序存儲(chǔ)結(jié)構(gòu)的描述方法,以及在該存儲(chǔ)結(jié)構(gòu)下的基本操作;并能靈活運(yùn)用;3.熟練掌握線性表的鏈表存儲(chǔ)結(jié)構(gòu)的描述方法,以及在該存儲(chǔ)結(jié)構(gòu)下的基本操作;并能靈活運(yùn)用;4.掌握雙向鏈表和循環(huán)鏈表的的描述方法,以及在該存儲(chǔ)結(jié)構(gòu)下的基本操作。實(shí)驗(yàn)原理:線性表順序存儲(chǔ)結(jié)構(gòu)下的基本算法;線性表鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)下的基本算法;實(shí)驗(yàn)內(nèi)容:2-21設(shè)計(jì)單循環(huán)鏈表,要求:(1)?????單循環(huán)鏈表抽象數(shù)據(jù)
2、類型包括初始化操作、求數(shù)據(jù)元素個(gè)數(shù)操作、插入操作、刪除操作、取消數(shù)據(jù)元素操作和判非空操作。(2)?????設(shè)計(jì)一個(gè)測(cè)試主函數(shù),實(shí)際運(yùn)行驗(yàn)證所設(shè)計(jì)單循環(huán)鏈表的正確性。2-22.設(shè)計(jì)一個(gè)有序順序表,要求:(1)?????有序順序表的操作集合有如下操作:初始化、求數(shù)據(jù)元素個(gè)數(shù)、插入、刪除和取數(shù)據(jù)元素。有序順序表與順序表的主要區(qū)別是:有序順序表中的數(shù)據(jù)元素按數(shù)據(jù)元素值非遞減有序。(2)?????設(shè)計(jì)一個(gè)測(cè)試主函數(shù),實(shí)際運(yùn)行驗(yàn)證所設(shè)計(jì)有序順序表的正確性。(3)?????設(shè)計(jì)合并函數(shù)ListMerge(L1,L
3、2,L3),功能是把有序順序表L1和L2中的數(shù)據(jù)元素合并到L3,要求L3中的數(shù)據(jù)元素依然保持有序。并設(shè)計(jì)一個(gè)主函數(shù),驗(yàn)證該合并函數(shù)的正確性。程序代碼:2-21(1)頭文件LinList.h如下:typedefstructnode{DataTypedata;structnode*next;}SLNode;/*(1)初始化ListInitiate(SLNode**head)*/voidListInitiate(SLNode**head){/*如果有內(nèi)存空間,申請(qǐng)頭結(jié)點(diǎn)空間并使頭指針head指向頭結(jié)點(diǎn)*/
4、if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);(*head)->next=NULL;/*置結(jié)束標(biāo)記NULL*/}/*(2)求當(dāng)前數(shù)據(jù)元素個(gè)數(shù)ListLength(SLNode*head)*/intListLength(SLNode*head){SLNode*p=head;intsize=0;while(p->next!=head){p=p->next;size++;}returnsize;}/*(3)插入ListInsert(SLN
5、ode*head,inti,DataTypex)*//*在帶頭結(jié)點(diǎn)的單鏈表的第i(0<=i<=size)個(gè)結(jié)點(diǎn)前*//*插入一個(gè)存放數(shù)據(jù)元素x的結(jié)點(diǎn)。插入成功時(shí)返回1,失敗返回0*/intListInsert(SLNode*head,inti,DataTypex){SLNode*p,*q;intj;p=head;j=-1;while(p->next!=head&&jnext;j++;}if(j!=i-1){printf("Theinserte
6、dpositioniserror!");return0;}/*生成新結(jié)點(diǎn)由指針q指示*/if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q->data=x;q->next=p->next;p->next=q;return1;}/*(4)刪除ListDelete(SLNode*head,inti,DataType*x)*//*刪除帶頭結(jié)點(diǎn)的單鏈表head的第i(0<=i<=size)個(gè)結(jié)點(diǎn)前*//*被刪除結(jié)點(diǎn)的數(shù)據(jù)元素域由x帶回。刪除成功時(shí)返回
7、1,失敗返回0*/intListDelete(SLNode*head,inti,DataType*x){SLNode*p,*s;intj;p=head;j=-1;while(p->next!=head&&p->next->next!=head&&jnext;j++;}if(j!=i-1){printf("Thedeletedpositionofparameteriserror!");return0;}s=p->next;/*指針s指指向ai結(jié)
8、點(diǎn)*/*x=s->data;p->next=p->next->next;/*刪除*/free(s);/*釋放指針s所指結(jié)點(diǎn)的內(nèi)存空間*/return1;}/*(5)取數(shù)據(jù)元素ListGet(SLNode*head,inti,DataType*x)*/intListGet(SLNode*head,inti,DataType*x){SLNode*p;intj;p=head;j=-1;while(p->next!=head&&jnext;j++;}if(j