版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
課程實(shí)驗(yàn)報(bào)告
課程名稱:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)
專業(yè)班級:計(jì)算機(jī)___________________
學(xué)號:___________________________
姓名:___________________________
指導(dǎo)教師:___________________________
報(bào)告日期:2023年1月6日
計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院
目錄
1基于順序存儲結(jié)構(gòu)實(shí)現(xiàn)線性表的基本運(yùn)算錯誤!未定義書簽。
1.1實(shí)驗(yàn)?zāi)康?。錯誤!未定義書簽。
1.2線性表演示系統(tǒng)設(shè)計(jì)。錯誤!未定義書簽。
1.2.1系統(tǒng)總體設(shè)計(jì)。錯誤!未定義書簽。
1.2.2有關(guān)常量和類型定義。錯誤!未定義書簽。
1.2.3算法設(shè)計(jì)錯誤!未定義書簽。
1.3線性表演示系統(tǒng)實(shí)現(xiàn)與測試。錯誤!未定義書簽。
1.3.1系統(tǒng)實(shí)現(xiàn)錯誤!未定義書簽。
1.3.2系統(tǒng)測試。錯誤!未定義書簽。
1.4實(shí)驗(yàn)小結(jié)。錯誤!未定義書簽。
2基于鏈?zhǔn)綄?shí)現(xiàn)線性表的基本運(yùn)算錯誤!未定義書簽。
2.1問題描述錯誤!未定義書簽。
2.2線性表演示系統(tǒng)設(shè)計(jì)。錯誤!未定義書簽。
2.2.1系統(tǒng)總體設(shè)計(jì)錯誤!未定義書簽。
2.2.2有關(guān)常量和類型定義。錯誤!未定義書簽。
2.2.3算法設(shè)計(jì)。錯誤!未定義書簽。
2.3線性表演示系統(tǒng)實(shí)現(xiàn)與測試。錯誤!未定義書簽。
2.3.1系統(tǒng)實(shí)現(xiàn)錯誤!未定義書簽。
2.3.2系統(tǒng)測試。錯誤!未定義書簽。
2.4實(shí)驗(yàn)小結(jié)。錯誤!未定義書簽。
3基于順序存儲結(jié)構(gòu)實(shí)現(xiàn)棧的基本運(yùn)算錯誤!未定義書簽。
3.1實(shí)驗(yàn)?zāi)康?。錯誤!未定義書簽。
3.2棧演示系統(tǒng)設(shè)計(jì)。錯誤!未定義書簽。
3.2.1系統(tǒng)總體設(shè)計(jì)。錯誤!未定義書簽。
3.2.2算法實(shí)現(xiàn)錯誤!未定義書簽。
3.3棧演示系統(tǒng)實(shí)現(xiàn)與測試。錯誤!未定義書簽。
3.3.1程序?qū)崿F(xiàn)。錯誤!未定義書簽。
3.3.2系統(tǒng)測試。錯誤!未定義書簽。
3.4實(shí)驗(yàn)小結(jié)錯誤!未定義書簽。
4基于循環(huán)隊(duì)列存儲結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列的基本運(yùn)算。錯誤!未定義書簽。
4.1問題描述。錯誤!未定義書簽。
4.2.1系統(tǒng)總體設(shè)計(jì)錯誤!未定義書簽。
4.2.2有關(guān)常量和類型定義。錯誤!未定義書簽。
4.2.3算法設(shè)計(jì)。錯誤!未定義書簽。
4.3隊(duì)列演示系統(tǒng)實(shí)現(xiàn)與測試。錯誤!未定義書簽。
4.3.1系統(tǒng)實(shí)現(xiàn)。錯誤!未定義書簽。
4.3.2系統(tǒng)測試。錯誤!未定義書簽。
4.4實(shí)驗(yàn)小結(jié)錯誤!未定義書簽。
5基于二叉鏈表實(shí)現(xiàn)二叉樹的基本運(yùn)算錯誤!未定義書簽。
5.1實(shí)驗(yàn)?zāi)康腻e誤!未定義書簽。
5.2.1系統(tǒng)總體設(shè)計(jì)。錯誤!未定義書簽。
5.2.2有關(guān)常量和類型定義。錯誤!未定義書簽。
5.2.3算法設(shè)計(jì)錯誤!未定義書簽。
5.3二叉樹演示系統(tǒng)實(shí)現(xiàn)與測試。錯誤!未定義書簽。
5.3.1系統(tǒng)實(shí)現(xiàn)錯誤!未定義書簽。
5.3.2系統(tǒng)測試錯誤!未定義書簽。
5.4實(shí)驗(yàn)小結(jié)。錯誤!未定義書簽。
6基于鄰接表實(shí)現(xiàn)圖的基本和常見運(yùn)算錯誤!未定義書簽。
6.1實(shí)驗(yàn)?zāi)康?。錯誤!未定義書簽。
6.2.1系統(tǒng)總體設(shè)計(jì)。錯誤!未定義書簽。
6.2.2有關(guān)常量和類型定義。錯誤!未定義書簽。
6.2.3算法設(shè)計(jì)。錯誤!未定義書簽。
6.3圖演示系統(tǒng)實(shí)現(xiàn)與測試錯誤!未定義書簽。
6.3.1系統(tǒng)實(shí)現(xiàn)錯誤!未定義書簽。
6.3.2系統(tǒng)測試錯誤!未定義書簽。
6.4實(shí)驗(yàn)小結(jié)。錯誤!未定義書簽。
參考文獻(xiàn)錯誤!未定義書簽。
0
1基于順序存儲結(jié)構(gòu)實(shí)現(xiàn)線性表的基本運(yùn)算
1.1實(shí)驗(yàn)?zāi)康?/p>
。通過實(shí)驗(yàn)達(dá)成:(1)加深對線性表的概念、基本運(yùn)算的理解;(2)純熟掌握線性
表的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)的關(guān)系;(3)物理結(jié)構(gòu)采用順序表,純熟掌握線性表的基
本運(yùn)算的實(shí)現(xiàn)。
1.2線性表演示系統(tǒng)設(shè)計(jì)
1.2.1系統(tǒng)總體設(shè)計(jì)
本系統(tǒng)提供一個順序存儲的線性表。
該演示系統(tǒng)提供的操作有:表的初始化、銷毀、清空、判空,求表長、獲取數(shù)
據(jù)元素、查找數(shù)據(jù)元素、獲得前驅(qū)、獲得后繼、創(chuàng)建線性表、插入數(shù)據(jù)元素、刪
除數(shù)據(jù)元素、表的遍歷。
在程序中實(shí)現(xiàn)消息解決,涉及數(shù)據(jù)的輸入和輸出,程序的退出。
1.2.2有關(guān)常量和類型定義
數(shù)據(jù)元素類型的定義:
typedefintstatus;
typedefintElemType;
有關(guān)常量的定義:
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERRORO
#defineINFEASTABLE-1
#defineOVERFLOW-2
#defineLISTINITSIZE100
#defineLISTINCREMENT10
1.2.3算法設(shè)計(jì)
(1)InitaList(&L)
操作結(jié)果:構(gòu)造一個空的線性表。
(2)DestroyList(&L)
初始條件:線性表L已存在。
。操作結(jié)果:銷毀線性表L。
⑶ClearList(&L)
。初始條件:線性表L已存在。
操作結(jié)果:將L重置為空表。
(4)ListEmpty(L)
。初始條件:線性表L已存在。
操作結(jié)果:若L為空表,則返回TRUE,否則返回FALSE。
(5)ListLength(L)
初始條件:線性表已存在。
操作結(jié)果:返回L中數(shù)據(jù)元素的個數(shù)。
(6)GetElem(L,i,&e)
初始條件:線性表已存在,1近iWListLength(L)。
操作結(jié)果:用e返回L中第i個數(shù)據(jù)元素的值。
(7)LocateElem(L,e,compare())
。初始條件:線性表已存在。
操作結(jié)果:返回L中第1個與e滿足關(guān)系compare()關(guān)系的數(shù)據(jù)元素的
。。。位序,若這樣的數(shù)據(jù)元素不存在,則返回值為0。
(8)PriorElem(L,cur_e,&pre_e)
。初始條件:線性表L已存在。
。操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是第一個,則用pre_e返回它的
。。前驅(qū),否則操作失敗,Pre_e無定義。
(9)NextE1em(L,cur_e,&next_e)
。初始條件:線性表L已存在。
操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是最后一個,則用next_e返回
它
。。的后繼,否則操作失敗,next_e無定義。
(10)Listinsert(&L,i,e)
。初始條件:線性表L已存在且非空,1WiWListLength(L)+l。
操作結(jié)果:在L的第i個位置之前插入新的數(shù)據(jù)元素e,L的長度加1
(11)ListDelete(&L,i,&e)
。初始條件:線性表L已存在且非空,iWiWListLength(L)。
操作結(jié)果:刪除L的第i個數(shù)據(jù)元素,用e返回其值,L的長度減1.
(12)ListTraverse(L,visit())
初始條件:線性表L已存在。
。操作結(jié)果:依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù)visit。。一旦調(diào)用失敗,則操
作失敗。
1.3線性表演示系統(tǒng)實(shí)現(xiàn)與測試
1.3.1系統(tǒng)實(shí)現(xiàn)
編程環(huán)境為VisualStudio2023,程序清單如下:
#define_CRT_SECURE_N0_WARNINGS
/*LinearTable0nSequenceStructure*/
#inc1ude<stdio.h>
#include<ma11oc.h>
#include<stdlib.h>
/*--page10ontextbook-——*/
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASTABLE-1
#defineOVERFLOW-2
typedefintstatus;
typedefintElemType;//數(shù)據(jù)元素類型定義
ooo/*page22ontextbook--*/
#defineLISTJNIT_SIZE100
#defineLISTINCREMENT10
typedefstruct{//順序表(順序結(jié)構(gòu))的定義
。ElemType*e1em;
intlength;
intlistsize;
}SqList;
/*page19ontextbook*/
statusIntiaList(SqList&L);
statusDestroyList(SqList*L);
statusCiearList(SqList&L);
statusListEmpty(SqListL);
intListLength(SqListL);
statusGetElem(SqListL,inti,ElemType&e);
intLocateElem(SqListL,ElemTypee);〃簡化過
statusPriorElem(SqListL,ElemTypecue,E1emType*pre);
statusNextElem(SqListL,E1emTypecue,ElemType*next);
statusListlnsert(SqList*L,inti,ElemTypee);
statusListDelete(SqList*L,inti,E1emType*e);
statusListTrabverse(SqListL);〃簡化過
ElemTypee;
*/
voidmain(void){
SqListL;
“ntop=1,e,cue,pre,next,m;
while(op){
gsystem("cls");
。叩rintf(”\n\n");
。printf(nMenufbrLinearTableOnSequenceStructure
\n“);
6printf("-——————\n");
oprintf(M1%IntiaList7.LocateElem\nn);
printf(n2.DestroyList8.PriorElem\nn);
printf(u3.C1earList9.NextE1em\
nM);
ooprintf("4.ListEmpty10.ListInsert\nn);
eprintf(n5ListLength11.ListDelete\nn);
oprintf("6.GetElem12.ListTrabverse\n");
。printf("0?.Exit\n");
°printf(n———--―—---——\n");
叩rintf("請選擇你的操作[0-12]:");
。scanf(n%d”,&op);
?switch(op)
(
。。case1:
//printf("\n■一—IntiaList功能待實(shí)現(xiàn)!\nH);
一(IntiaList(L)==OK)printf("線性表創(chuàng)建成功!\n");
。elseprintf("線性表創(chuàng)建失敗!\n”);
o^getchar();getchar();
sbreak;
&case2:
^//printf(n\n——DestroyList功能待實(shí)現(xiàn)!\nn);
。if(DestroyList(&L)==OK)printf("線性表銷毀成功!\n”);
。eIseprintf("線性表銷毀失敗!'n");
ggetchar();getchar();
sbreak;
?case3:
W/printf("\n——C1earList功能待實(shí)現(xiàn)!\n”);
“if(C1earList(L)==OK)printf("線性表清空成功!\n”);
gelseprintf("線性表清空失??!\nn);
ooogetchar();getchar();
。?break;
case4:
00//printf(H\n——ListEmpty功能待實(shí)現(xiàn)!\n");
“if(ListEmpty(L)==OK)printf("線性表已清空!\n”);
“eelseprintf(M線性表未清空!\n“);
。?getchar();getchar();
o^break;
。case5:
o“/printf("\n--—?ListLength功能待實(shí)現(xiàn)!\nu);
printf("線性表長度為%d\nListLength(L));
。getchar();getchar();
break;
8case6:
”//printf("\n---GetElem功能待實(shí)現(xiàn)!\n”);
^inti;
?叩rintf("請輸入要查詢的序數(shù):");
“scanf("%d”,&i);
gif(GetElem(L,i,e)==0K)printf(”表中第%d個數(shù)據(jù)為%小口”,i,
e);
elseprintf("查詢失敗!\n");
getchar();getchar();
^break;
case7:
//printf(n\n-LocateElem功能待實(shí)現(xiàn)!\n”);
printf("請輸入要查詢的數(shù)據(jù):\n");
scanf(n%dH,&e);
8m=LocateE1em(L,e);
if(m!=ERROR)
000
叩rintf("L中第一個與查詢數(shù)據(jù)相等的數(shù)據(jù)的位序?yàn)椋\nm);
?<>else
。。printf(H這樣的數(shù)據(jù)元素不存在!\n”);
。getchar();getchar();
力reak;
。。case8:
叩rintf("請輸入要查詢的元素:”);
。scanf(H%d&cue);
Af(PriorElem(L,cue,&pre)==OK)printf("前驅(qū)為%d\n”,pre);
8elseprintf("無此前驅(qū)\nn);
8getchar();getchar();
。break;
case9:
printf("請輸入要查詢的元素:”);
空canf("%d",&cue);
。if(NextE1em(L,cue,&next)==OK)printf(n后驅(qū)為%d\n”,
next);
elseprin1」無此后驅(qū)\11");
80getchar();getchar();
由reak;
。case10:
。叩rintf("請輸入i:n);
。^scanfC'%d",&i);
egprintf("請輸入e:M);
“scanf("%d",&e);
。if(Listlnsert(&L,i,e)==OK)printf("線性表插入成功\n");
e1seprintf("線性表插入失敗\n");
。getchar();getchar();
3break;
。case11:
“printf("請輸入要刪除的元素的序列:”);
08scanf(n%d”,&i);
Mf(ListDelete(&L,i,&e)==OK)printf("元素刪除成功\n”);
eIseprintf(n元素刪除失敗\n”);
o唱etchar();getchar();
3dbreak;
gcase12:
e//printf(M\n-——ListTrabverse功能待實(shí)現(xiàn)!\n”);
if(!ListTrabverse(L))printf(”線性表是空表!\n");
?getchar();getchar();
ebreak;
8case0:
break;
g}〃endofswitch
}//endofwhile
oprintf("歡迎下次再使用本系統(tǒng)!\n");
}//endofmain()
/*--—page23ontextbook————*/
statusIntiaList(SqList&L)
L.e1em=(E1emType*)ma11oc(L1ST_INIT_SIZE*sizeof
(E1emType));
oif(!L.e1em)exit(OVERFLOW);
L.length=0;
oL.listsize=LIST_INIT_SIZE;
??returnOK;
)
statusDestroyList(SqList*L)
(
ofree(L—>e1em);
L->elem=NULL;
^returnOK;
)
statusC1earList(SqList&L)
(
1.length=0;
returnOK;
statusListEmpty(SqListL)
“f(L.1ength==0)
returnTRUE;
oeIse
<>returnERROR;
)
}//判斷表空
intListLength(SqListL)
(
returnL.1ength;
)
statusGetE1em(SqListL,inti,E1emType&e)
(
?e=*(L.elem+i-1);
?returne;
}
intLocateElem(SqListL,E1emTypee)
(
“ntk=1;
?while(*L.e1em!=e)
°(
。L.elem++;
k++;
if(k>L.length)
returnERROR;
returnk;
)
statusPriorElem(SqListL,ElemTypecue,ElemType*pre)
(
“nti;
for(i=1;i<L.1istsize;i++)
(
(L.elem[i]==cue)
6{
8*pre=(int)L.e1em[i-1];
6returnOK;
8}
)
returnFALSE;
}
statusNextElem(SqListL,ElemTypecue,E1emType*next)
(
。intm;
?for(m=0;m<L.listsize-1;m++)
。if(L.elem[m]==cue)
80*next=(int)L.elem[m+1];
8returnOK;
)
)
^returnFALSE;
)
statusListInsert(SqList*L,inti,E1emTypee)
(
oElemType*nw,*t,*p;
if(!L->elem)returnERROR;
oif(i<1||i>L->length+l)returnERR0R;
。if(L->length>=L->listsize)
。{
?nw=(ElemType*)realloc(L->elem,(L—>1istsize+LISTIN
CREMENT)*sizeof(ElemType));
。if(!nw)retumERROR;
0L->elem=nw;
oL->listsize+=LISTINCREMENT;
)
4=&(L->elemLi-1]);
?for(p=&(L—>elem[L->length-11);p>=t;p—)
(
b*(p+1)=*P;
0)
0*t=e;
++L—>length;
^returnOK;
}
statusListDelete(SqList*L,inti,ElemType*e)
(
?ElemType*t,*p;
if(i<1I|i>L—>1ength|I!L->e1em)returnERROR;
叩=&(L->e1em[i-1]);
e=p;
“二&(L—>e1em[L->length-1]);
ofor(p++;pv=t;++p)
8*(p-1)=*p;
--L->1ength;
returnOK;
)
statusListTrabverse(SqListL)
{
,inti;
printf(”\n——al1elements—■
—\n");
for(i=0;i<L.length;i++)printf("%d",L.elem[_i]);
printf(u\n——---end----\nH);
retumL.1ength;
)
1.3.2系統(tǒng)測試
表1一1線性表算法測試用例表
測試用例程序輸入理論結(jié)果運(yùn)行結(jié)果
用例11線性表創(chuàng)建成功線性懶器作皿
用例22線性表銷毀成功卜疆螂作
用例3線性表清空成功適選擇便的操作[歹12]:3
3怦性表清空成功!
F_______________________________1
用例44線性表已清空
遣選!至你的操作
線性袤已清空!
用例55線性表長度為0謂選擇你的操作[0~121:5
線性袤長度為。
用例66表中第1個數(shù)據(jù)為1
翻請翻選擇你球的操嬴作1
表中第一個與查詢數(shù)據(jù)相等的道選擇侵的盤作■12】:7
用例77,青輸入要查詢的數(shù)據(jù),
1中第一個與查詢數(shù)據(jù)檐的故據(jù)的位序?yàn)?
數(shù)據(jù)的位序?yàn)?
前驅(qū)為
用例885L4請選操你的操作]:8
館輸入要查曾的元素:2
單I為5
用例99后驅(qū)為1
請選擇你的提隹[0~12「9
道輸△要查詢的元象2
后驅(qū)為工
用例1010線性表插入成功清欠選擇你的操作[0~123:10
礴入e;9
線程表插入成功
用例1111元素刪除成功請選擇你的操作[。~12]:11
請輸人要劇除的元素的用如1
元差躺除成功
用例1212521請選擇你的操作【。~12]:12
allelenents
521
end
1.4實(shí)驗(yàn)小結(jié)
這是第一次數(shù)據(jù)結(jié)構(gòu)的實(shí)驗(yàn),實(shí)驗(yàn)完畢期間恰逢離散和復(fù)變的考試,復(fù)習(xí)與
實(shí)驗(yàn)一起進(jìn)行讓我壓力不小。好在老師有針對性的在課堂上指點(diǎn)了很多關(guān)鍵點(diǎn),
讓我的實(shí)驗(yàn)順利進(jìn)行。本次實(shí)驗(yàn)加深了我對*L和&L的理解,代碼中仍有不盡如
人意的地方,相信以后會做的越來越好。
2基于鏈?zhǔn)綄?shí)現(xiàn)線性表的基本運(yùn)算
2.1問題描述
。通過實(shí)驗(yàn)達(dá)成:(1)加深對線性表的概念、基本運(yùn)算的理解;(2)純熟掌握線性
表的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)的關(guān)系;(3)物理結(jié)構(gòu)采用帶表頭結(jié)點(diǎn)的單鏈表,純熟
掌握線性表基本運(yùn)算的實(shí)現(xiàn)。
2.2線性表演示系統(tǒng)設(shè)計(jì)
2.2.1系統(tǒng)總體設(shè)計(jì)
本系統(tǒng)提供一個鏈?zhǔn)酱鎯Φ木€性表。
該演示系統(tǒng)提供的操作有:表的初始化、銷毀、清空、判空,求表長、獲取
數(shù)據(jù)元素、查找數(shù)據(jù)元素、獲得前驅(qū)、獲得后繼、創(chuàng)建線性表、插入數(shù)據(jù)元素、
刪除數(shù)據(jù)元素、表的遍歷。
在程序中實(shí)現(xiàn)消息解決,涉及數(shù)據(jù)的輸入和輸出,程序的退出。
2.2.2有關(guān)常量和類型定義
數(shù)據(jù)元素類型的定義:
typedefintstatus;
typedefintElemType;
有關(guān)常量的定義:
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASTABLE-1
#defineOVERFLOW-2
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
2.2.3算法設(shè)計(jì)
(1)InitaList(&L)
。操作結(jié)果:構(gòu)造一個空的單鏈表。
(2)DestroyList(&L)
初始條件:單鏈表L已存在。
操作結(jié)果:銷毀單鏈表L。
(3)ClearList(&L)
初始條件:單鏈表L已存在。
操作結(jié)果:將L重置為空單鏈表。
(4)ListEmpty(L)
初始條件:單鏈表L已存在。
。操作結(jié)果:若L為空單鏈表,則返回TRUE,否則返回FALSE.
(5)ListLength(L)
初始條件:單鏈表已存在。
。操作結(jié)果:返回L中數(shù)據(jù)元素的個數(shù)。
(6)GetElem(L,i,&e)
。初始條件:單鏈表已存在,iWiWListLength(L)。
。操作結(jié)果:用e返回L中第i個結(jié)點(diǎn)的數(shù)據(jù)元素值。
(7)LocateElem(L,e,compare())
初始條件:單鏈表已存在。
。操作結(jié)果:返回L中第1個與e滿足關(guān)系compare()的數(shù)據(jù)元素結(jié)點(diǎn)的指
。。。針,若這樣的數(shù)據(jù)元素不存在,則返回值為NULL。
(8)PriorElem(L,cur_e,&pre_e)
初始條件:單鏈表L已存在。
。操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是第一個,則用pre_e返回它的
。前驅(qū),否則操作失敗,pre_e無定義。
(9)NextElem(L,cur_e,&next_e)
初始條件:單鏈表L已存在。
。操作結(jié)果:若cur_e是L的數(shù)據(jù)元素,且不是最后一個,則用next_e返回它
。。8的后繼,否則操作失敗,next_e無定義。
(10)ListInsert(&L,i,e)
。初始條件:單鏈表L已存在且非空,iWiWListLength(L)+lo
操作結(jié)果:在L的第i個結(jié)點(diǎn)之前插入新數(shù)據(jù)元素e的結(jié)點(diǎn)。
(ll)ListDe1ete(&L,i,&e)
初始條件:單鏈表L已存在且非空,1WiWListLength(L)。
。操作結(jié)果:刪除L第i個數(shù)據(jù)元素的結(jié)點(diǎn),用e返回其結(jié)點(diǎn)數(shù)據(jù)元素的值。
(12)ListTraverse(L,visit())
初始條件:單鏈表L已存在。
。操作結(jié)果:依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦調(diào)用失敗,則操
88作失敗。
2.3線性表演示系統(tǒng)實(shí)現(xiàn)與測試
2.3.1系統(tǒng)實(shí)現(xiàn)
編程環(huán)境為VisualStudio2023,程序清單如下:
#define_CRT_SECURE_NO_WARNINGS
/*LinearTableOnSequeneeStructure*/
#inc1ude<stdio.h>
#include<malloc.h>
#include<stdlib.h>
/*--page10ontextbook——一一一*/
#defineTRUE1
#defineFALSEO
#defineOK1
#defineERROR0
#defineINFEASTABLE-1
#defineOVERFLOW-2
typedefintstatus;
typedefintElemType;//數(shù)據(jù)元素類型定義
oo/*——---page22ontextbook—*/
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefstructListNode{//順序表(順序結(jié)構(gòu))的定義
ElemTypedata;
structListNode*next;
}ListNode,*pListNode;
inte;
ListNodeL;
pListNodepL=&L;
statusIntiaList(pListNode&Lp){
eLp=(pListNode)ma11oc(sizeof(ListNode));
Lp->data=0;
?Lp->nextNULL;
pL=Lp;
returnOK;
}
statusDestroyList(pListNode&Lp){
if(!Lp)returnERROR;
Lp—>data=0;
if(Lp->next==NULL)
。{
ofree(Lp->next);
。free(Lp);
)
吒1se
。{
。DestroyList(Lp—>next);
Lp->next=NULL;
efree(Lp);
}
return0K;
)
statusC1earList(pListNode&Lp){
if(!Lp)returnERROR;
Lp—>data=0;
if(Lp->next==NULL)
近ee(Lp);
else
°(
eClearList(Lp—>next);
^free(Lp);
)
returnOK;
)
statusListEmpty(ListNodeL){
。if(L.data==0)
eturnTRUE;
吒Ise
8returnFALSE;
)
intListLength(ListNodeL){
returnL.data;
)
statusGetElem(ListNodeL,nti,ElemType*e)
if(i<l|Ii>L.data)
ereturnERROR;
叩ListNodep=L.next;
。while(-i)
p=p->next;
o}
°(*e)=p->data;
?returnOK;
statuscompare(ElemTypee,ElemTypef)
(
oif(f==e)returnTRUE;
oelsereturnFALSE;
)
statusLocateE1em(ListNodeL,ElemTypeestatus(*compa
rep)(E1emTypee,ElemTypef))
(
if(L.next==NULL)
greturnERROR;
pListNodep=L.next;
。inti=1;
while(p)
?if((*comparep)(e,p->data))
returni;
?else
°i++;
eP-p->next;
00|
°)
oreturn0;
)
statusPriorElem(ListNodeL,ElemTypecur_e,E1emType*pre
e)
(
^?if(L.data==0)
returnERROR;
if(L.next—>data=cur_e)
returnERROR;
叩ListNodepri_p=L.next,cur_p=L.next->next;
while((cur_p->data!=cur_e)&&cur_p)
b{
opri—p=cur_p;
8cur_p=cur_p->next;
)
if(cur_p->data==cur_e)
{
e*pre_e=pri_p->data;
returnOK;
0)
?elsereturnERROR;
statusNextE1em(ListNodeL,ElemTypecur_e,E1emType*next
e)
(
if(L.next==0)
oreturnERROR;
pListNodep=L.next;
while(p->data!=cur_e&&p->next)
。p=p->next;
if(!(P->next))returnERROR;
?else//if(p->data==cur_e)
{
g*next_e=p->next->data;
returnOK;
statusListlnsert(pListNodeLp,inti,E1emTypee){
“f(i<l||i>Lp->data+1)
。returnERROR;
叩ListNodep=(pListNode)malloc(sizeof(ListNode));
if(Lp->data==0){
Lp—>next=p;
p->data=e;
。叩―>next=NULL;
。Lp->data=1;
returnOK;
°)
pListNodepl=Lp->next;
whi1e(pl->next)pl=pl->next;
p1—>next=p;
叩,data=e;
p->next=NULL;
Lp->data++;
retumOK;
)
statusListDe1ete(pListNodeLp,inti,ElemType*e)
(
if(Lp->data)
。{
?if(iV1I|i>Lp->data)
。?>returnERROR;
8PListNodep1=Lp,p2=Lp->next;
^intj=1;
owhile(p2&&j<i)
{
。。p1二p2;
。。叩2=p2->next;
j++;
?}
pl->next=p2->next;
*ep2->data;
。Lp->data—;
free(p2);
8returnOK;
}
o「eturnERROR;
)
voidvisit(E1emTypee,inti){
printf("對第%d個元素調(diào)用visit函數(shù):元素值為%d\n\n",i+1,e);
)
statusListTrabverse(ListNodeL,void(*visitp)(ElemTypee,i
nti))
(
if(!L.data)returnERROR;
。pListNodep=L.next;
inti=0;
叩rintf("\n——對所有元素調(diào)用函數(shù)visit-----------
-\n");
°while(p)/〃依次對每個元素調(diào)用visit函數(shù)
(
g(*visitp)(p—>data,i++);
op=p->next;
)
oprintf("\n---end---————\n");
retumOK;
)
/*_-_—_____一—一__—__—_一一__—_———__—,-*/
voidmain(void){
ointop=1,e,cue,pre,next,m;
awhile(op){
system(ncIsn);
oprintf(M\n\nn);
printf(uMenuforLinearTableOnSequenceStructu
re\nu);
printf(n——————\n");
sprintf(n。1.IntiaList7.LocateElem\nn);
sprintf(“。2.DestroyList8.PriorE1em\n");
printf(n3.CiearList9.NextElem\nn);
printf(M4.ListEmpty10.ListInsert\n");
oprintf("5ListLength11.ListDelete\nn);
gprintf("36.GetElem12.ListTrabverse\n");
。printf(M。0.Exit\nn);
■\nn);
printf("請選擇你的操作[0~12]:");
seanf("%d",&op);
^switch(op)
gcase1:
g//printf("\n——IntiaList功能待實(shí)現(xiàn)!\n”);
if(IntiaList(pL)==OK)printf("線性表創(chuàng)建成功!
\n");
。eIseprintf(H線性表創(chuàng)建失敗!\nn);
。getchar();getchar();
gbreak;
ocase2:
g//printf("\n--DestroyList功能待實(shí)現(xiàn)!\n”);
oooif(DestroyList(pL)==OK)printf(H線性表銷毀成功!\n“);
匕elseprintff線性表銷毀失敗!\n”);
。<>getchar();getchar();
sbreak;
^case3:
n
ooo//printfC\n--CiearList功能待實(shí)現(xiàn)!\n);
if(ClearList(pL)==OK)printf("線性表清空成功!\n");
3e1seprintf("線性表清空失敗!\nn);
。getchar();getchar();
“break;
case4:
。//printf(H\n----ListEmpty功能待實(shí)現(xiàn)!\n”);
if(ListEmpty(L)==OK)printf("線性表已清空!\n”);
。elseprintf("線性表未清空!\n”);
“getchar();getchar();
3break;
ocase5:
00//printf("\n-一一-ListLength功能待實(shí)現(xiàn)!\n");
。。printf("線性表長度為%d\n",ListLength(L));
“getchar();getchar();
。break;
“case6:
。//printf("\n--GetElem功能待實(shí)現(xiàn)!\n");
。inti;
。printf("請輸入要查詢的序數(shù):");
“scanf("%d",&i);
“if(GetElem(L,i,&e)==0K)printf("表中第%d個數(shù)據(jù)為%
d\n",i,e);
ooelseprintf("查詢失??!\n");
ggetchar();getchar();
break;
?case7:
ooo//printf("\n-LocateElem功能待實(shí)現(xiàn)!\n");
printf("請輸入要查詢的數(shù)據(jù):\n");
。scanf("%d",&e);
。=LocateElem(L,e,compare);
。if(m!=ERROR)
0{
3叩rintf("L中第一個與查詢數(shù)據(jù)相等的數(shù)據(jù)的位序?yàn)椋\n",m);
?}
e1se
。I
如printf("這樣的數(shù)據(jù)元素不存在!\n");
00
ogetchar();getchar();
8bbreak;
case8:
,叩rintf("請輸入要查詢的元素:");
scanf('*%d”,&cue);
“if(Prior
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年SMT波峰焊機(jī)項(xiàng)目發(fā)展計(jì)劃
- 2024年農(nóng)作物種子高效加工設(shè)備項(xiàng)目建議書
- 2024年新能源發(fā)電設(shè)備自動化裝置項(xiàng)目建議書
- 2024年機(jī)械化農(nóng)業(yè)及園藝機(jī)具項(xiàng)目合作計(jì)劃書
- 2023年步進(jìn)電動機(jī)及控制系統(tǒng)項(xiàng)目需求分析報(bào)告
- 廣東省清遠(yuǎn)市南陽中學(xué)2024-2025學(xué)年高二上學(xué)期10月第一次月考生物學(xué)試題(無答案)
- 2023年微型燈泡項(xiàng)目評估分析報(bào)告
- 2024年井控設(shè)備裝置項(xiàng)目建議書
- 幼兒園中班家長會
- 2024年商用POS加密機(jī)合作協(xié)議書
- DZ∕T 0338.2-2020 固體礦產(chǎn)資源量估算規(guī)程 第2部分 幾何法(正式版)
- 小學(xué)教育教學(xué)方法創(chuàng)新研究課題
- 2024年上海市嘉定區(qū)高三二??荚囉⒄Z試卷
- 幼兒園拍攝技巧培訓(xùn)
- 第二單元 第3課時(shí) 圓柱的表面積(學(xué)習(xí)任務(wù)單)六年級數(shù)學(xué)下冊 高效課堂 蘇教版 蘇教版
- 網(wǎng)絡(luò)新聞評論智慧樹知到期末考試答案2024年
- 2024年西藏自治區(qū)中考地理真題(解析版)
- 2024屆成都市金牛區(qū)小升初考試語文試卷含答案
- (正式版)JBT 14682-2024 多關(guān)節(jié)機(jī)器人用伺服電動機(jī)技術(shù)規(guī)范
- 《寧向東的清華管理學(xué)課》學(xué)習(xí)筆記
- MOOC 管理咨詢-暨南大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論