資源描述:
《數(shù)據(jù)結(jié)構(gòu)線(xiàn)性表操作實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:線(xiàn)性表的操作實(shí)驗(yàn)?zāi)康模?.掌握上機(jī)調(diào)試線(xiàn)性表的基本方法;2.掌握線(xiàn)性表的一些基本操作;實(shí)驗(yàn)內(nèi)容:將兩個(gè)有序鏈表合并為一個(gè)有序鏈表一、需求分析1.實(shí)驗(yàn)程序中先創(chuàng)建兩個(gè)有序鏈表,演示程序以用戶(hù)和計(jì)算機(jī)的對(duì)話(huà)方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶(hù)在鍵盤(pán)上輸入兩個(gè)鏈表中的相應(yīng)數(shù)據(jù)。2.將兩個(gè)鏈表合并時(shí)可按數(shù)據(jù)從大到小或從小到大合并,用戶(hù)根據(jù)提示可選擇一種排序方式。3.程序執(zhí)行命令包括:(1)構(gòu)造鏈表;(2)輸入數(shù)據(jù);(3)合并兩個(gè)鏈表,根據(jù)用戶(hù)需求選擇一種排序方式;(4)將合并結(jié)果輸出;(5)結(jié)束4.測(cè)試數(shù)據(jù):鏈表1數(shù)據(jù)為:2,4,6,7,10鏈表2數(shù)
2、據(jù)為:1,3,5,6,7,12按從小到達(dá)合并為:1,2,3,4,5,6,6,7,7,10,12;按從大到小合并為:12,10,7,7,6,6,5,4,3,2,1;二、概要設(shè)計(jì)1.基本操作Linklistcreat()操作結(jié)果:構(gòu)造一個(gè)鏈表,并輸入數(shù)據(jù),返回頭節(jié)點(diǎn)指針。voidprint(Linklisthead)初始條件:鏈表已存在;操作結(jié)果:將鏈表輸出。voidMergeList_1(LinklistLa,LinklistLb)初始條件:有序線(xiàn)性鏈表La和Lb已存在;操作結(jié)果:將La和Lb兩個(gè)鏈表按從小到大的順序合并。voidMergeList_2(LinklistLa,Linklist
3、Lb)初始條件:有序線(xiàn)性鏈表La和Lb已存在;操作結(jié)果:將La和Lb兩個(gè)鏈表按從大到小的順序合并。2.本程序包括四個(gè)模塊:(1)主程序模塊;(2)鏈表數(shù)據(jù)輸入模塊;將新鏈表輸出按從小到大合并兩鏈表(3)鏈表合并模塊;(4)鏈表輸出模塊;數(shù)據(jù)輸入主程序模塊將新鏈表輸出按從大到小合并兩鏈表三、詳細(xì)設(shè)計(jì)1.元素類(lèi)型,節(jié)點(diǎn)類(lèi)型,指針類(lèi)型typedefstructLNode//定義節(jié)點(diǎn){intdata;structLNode*next;}LNode,*Linklist;2.每個(gè)模塊的分析(1)主函數(shù)模塊intmain(){Linklisthead1,head2;inti;printf("請(qǐng)輸入鏈表1
4、數(shù)據(jù)(由小到大,輸入0表示輸入結(jié)束):");head1=creat();//創(chuàng)建鏈表1,將頭結(jié)點(diǎn)指針?lè)祷貫閔ead1printf("請(qǐng)輸入鏈表2數(shù)據(jù)(由小到大,輸入0表示輸入結(jié)束):");head2=creat();printf("請(qǐng)選擇排序方式(輸入1則從小到達(dá)合并,輸入其它整數(shù)則按從大到小合并):");scanf("%d",&i);//創(chuàng)建鏈表2,將頭結(jié)點(diǎn)指針?lè)祷貫閔ead2if(i==1)//選擇兩種排序方式,如果輸入1,則合并后按從小到大輸出;輸入其它數(shù),合成鏈表按從大到小輸出{printf("按小到大將兩表合并得:");MergeList1(head1,head2);
5、//將創(chuàng)建好的兩表的頭結(jié)點(diǎn)地址head1,head2作為函數(shù)參數(shù)}else{printf("按從大到小將兩表合并得:");MergeList2(head1,head2);//將創(chuàng)建好的兩表的頭結(jié)點(diǎn)地址head1,head2作為函數(shù)參數(shù)}return0;}(2)數(shù)據(jù)輸入創(chuàng)建鏈表模塊Linklistcreat()//創(chuàng)建鏈表函數(shù),并將創(chuàng)建鏈表的頭結(jié)點(diǎn)指針?lè)祷貃Linklisthead,p,s;intz=1,x;head=(LNode*)malloc(sizeof(LNode));p=head;while(z){scanf("%d",&x);if(x!=0)//輸入0表示鏈表數(shù)據(jù)輸入結(jié)束{s
6、=(LNode*)malloc(sizeof(LNode));s->data=x;p->next=s;s->next=NULL;p=s;}elsez=0;}return(head);}(3)合并鏈表模塊,兩個(gè)函數(shù)分別表示兩種排序方式,將鏈表合并后直接在函數(shù)中調(diào)用鏈表輸出函數(shù)voidprint(Linklisthead)將鏈表輸出voidMergeList_1(LinklistLa,LinklistLb)//已知鏈表La和Lb元素都按從小到大排列,將La和Lb合并成新鏈表,其中元素也按從小到大排列{Linklistpa,pb,pc,Lc;pa=La->next;pb=Lb->next;Lc=
7、pc=La;//把La的頭節(jié)點(diǎn)作為新建鏈表Lc的頭結(jié)點(diǎn)while(pa&&pb){if(pa->data<=pb->data){pc->next=pa;pc=pa;pa=pa->next;}else{pc->next=pb;pc=pb;pb=pb->next;}}pc->next=pa?pa:pb;//插入剩余段print(Lc);//將鏈表Lc輸出}voidMergeList_2(LinklistLa,Linklist