資源描述:
《線(xiàn)性表地順序存儲(chǔ)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告材料》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、實(shí)用標(biāo)準(zhǔn)南昌航空大學(xué)實(shí)驗(yàn)報(bào)告課程名稱(chēng):數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)名稱(chēng):實(shí)驗(yàn)一線(xiàn)性表的順序存儲(chǔ)結(jié)構(gòu)班級(jí):XXX學(xué)生姓名:XXX學(xué)號(hào):XXXXX指導(dǎo)教師評(píng)定:XXX簽名:XXX設(shè)計(jì)并實(shí)現(xiàn)以下算法:有兩張非遞增有序的線(xiàn)性表A,B,采用順序存儲(chǔ)結(jié)構(gòu),兩張表合并用C表存,要求C仍為非遞增有序的,并刪除C表中值相同的多余元素。一、需求分析⒈本程序中,要求輸入到表A,B中的元素是整形的,并且要按非遞增順序輸入,否則系統(tǒng)會(huì)給出“出錯(cuò)信息”。輸出結(jié)果應(yīng)該是一個(gè)不含有重復(fù)元素的非遞增的表。⒉本程序以用戶(hù)和計(jì)算機(jī)的對(duì)話(huà)方式執(zhí)行,即在計(jì)算機(jī)演示界面上顯示“提示信息”后,由用戶(hù)在鍵盤(pán)上輸入相應(yīng)的信息;相應(yīng)的輸入數(shù)據(jù)和運(yùn)算結(jié)果顯示在
2、其后。⒊程序執(zhí)行的命令包括:(1)構(gòu)造線(xiàn)性表A(2)構(gòu)造線(xiàn)性表B(3)檢驗(yàn)表A,B是否非遞減有序(4)求表A與B的合并(5)刪除表中值相同的多余元素(6)結(jié)束。4.測(cè)試數(shù)據(jù)(1)A=123(2)A=950-2B=1050-1-3-5-10二、概要設(shè)計(jì)⒈為實(shí)現(xiàn)上述算法,需要線(xiàn)性表的抽象數(shù)據(jù)類(lèi)型:ADTStack{數(shù)據(jù)對(duì)象:D={ai:
3、ai∈ElemSet,i=1…n,n≥0}數(shù)據(jù)關(guān)系:R1={
4、ai-1,ai∈D,i=2,…n}基本操作:init(list*L)操作結(jié)果:構(gòu)造一個(gè)空的線(xiàn)性表L。InputList(List*L)初始條件:線(xiàn)性表L已經(jīng)存在操作結(jié)果:人工輸入了一
5、張表。CheckList(List*L)初始條件:線(xiàn)性表L已經(jīng)存在操作結(jié)果:判斷L是否非遞增有序,若為否,則重新輸入。MergeList(List*La,List*Lb,List*Lc)初始條件:非遞增線(xiàn)性表La,Lb已經(jīng)存在操作結(jié)果:合并La,Lb得到Lc,Lc仍按非遞增有序排列。文案大全實(shí)用標(biāo)準(zhǔn)DeleteSame(List*L)初始條件:非遞增線(xiàn)性表L已經(jīng)存在操作結(jié)果:刪除了L中值相同的元素。PrintList(ListL)初始條件:線(xiàn)性表L已經(jīng)存在操作結(jié)果:打印出表L。}ADTList2.本程序有三個(gè)模塊:⑴主程序模塊voidmain(){初始化;do{接受命令;顯示結(jié)果;}whil
6、e(執(zhí)行完畢)}⑵線(xiàn)性表單元模塊:實(shí)現(xiàn)線(xiàn)性表抽象數(shù)據(jù)類(lèi)型;⑶結(jié)點(diǎn)結(jié)構(gòu)單元模塊:定義線(xiàn)性表中的結(jié)點(diǎn)結(jié)構(gòu)。三、詳細(xì)設(shè)計(jì)⒈元素類(lèi)型,結(jié)點(diǎn)類(lèi)型typedefintElemType;//元素類(lèi)型structLIST{ElemType*elem;intlength;intlistsize;};typedefstructLISTlist;//結(jié)點(diǎn)類(lèi)型2.對(duì)抽象數(shù)據(jù)類(lèi)型中的部分基本操作的偽碼算法如下:intinit(List*L){//初始化表LL→elem=(ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE);//為線(xiàn)性表順序結(jié)構(gòu)分配空間If(!L→elem
7、)exit(ERROR);L→length=0;L→listsize=LIST_INIT_SIZE;ReturnOK;}//initListvoidInputList(List*L){//構(gòu)造表Lintflag=-32768;//輸入結(jié)束的標(biāo)志文案大全實(shí)用標(biāo)準(zhǔn)scanf("%d",&n);//輸入元素while(n!=flag){//繼續(xù)輸入L→elem[j++]=n;L→length=j;Scanf("%d",&n);}}//InputListvoidCheckList(List*L){for(i=0;i8、nputList(L);//輸入為遞增時(shí),要重新輸入i=0;}}//CheckListvoidMergeList(List*La,List*Lb,List*Lc){//表La和Lb合并為L(zhǎng)cPa=La→elem;pb=Lb→elem;//pa,pb分別指向La,Lb的第一個(gè)元素Lc→Listsize=La→length+Lb→length;Lc→elem==(ElemType*)malloc(Lc→listsize*sizeof(ElemType));pc=Lc→elem;//pc指向表Lc的第一個(gè)元素pa_last=La→elem+La→length-1;//表La最后一個(gè)元素的地址pb_
9、last=Lb→elem+Lb→length-1;//表Lb最后一個(gè)元素的地址while(pa<=pa_last&&pb<=pb_last){//表La,Lb都未操作完時(shí)if(*pa<=*pb)*pc++=*pb++;else*pc++=*pa++;}while(pa<=pa_last)*pc++=*pa++;//將La的剩余部分接到Lcwhile(pb<=pb_last)*pc++=*pb++;//將Lb的