2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告級(jí)及答案_第1頁
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告級(jí)及答案_第2頁
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告級(jí)及答案_第3頁
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告級(jí)及答案_第4頁
2023年數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告級(jí)及答案_第5頁
已閱讀5頁,還剩116頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告

專業(yè)—信息管理學(xué)院

年級(jí)__2023級(jí)

學(xué)號(hào)—

學(xué)生姓名_____

指導(dǎo)老師______________

華中師范大學(xué)信息管理系編

I實(shí)驗(yàn)規(guī)定

1.每次實(shí)驗(yàn)中有若干習(xí)題,每個(gè)學(xué)生至少應(yīng)當(dāng)完畢其中的兩道習(xí)題。

2.上機(jī)之前應(yīng)作好充足的準(zhǔn)備工作,預(yù)先編好程序,通過人工檢查無誤后,才干上機(jī),以提高上機(jī)效率。

3.獨(dú)立上機(jī)輸入和調(diào)試自己所編的程序,切忌抄襲、拷貝別人程序。

4.上機(jī)結(jié)束后,應(yīng)整理出實(shí)驗(yàn)報(bào)告。書寫實(shí)驗(yàn)報(bào)告時(shí),重點(diǎn)放在調(diào)試過程和小節(jié)部分,總結(jié)出本次實(shí)

驗(yàn)中的得與失,以達(dá)成鞏固課堂學(xué)習(xí)、提高動(dòng)手能力的目的。

II實(shí)驗(yàn)內(nèi)容

實(shí)驗(yàn)一線性表

【實(shí)驗(yàn)?zāi)康摹?/p>

I.熟悉VC環(huán)境,學(xué)習(xí)如何使用C語言實(shí)現(xiàn)線性表的兩種存儲(chǔ)結(jié)構(gòu)。

2.通過編程、上機(jī)調(diào)試,進(jìn)一步理解線性表的基本概念,純熟運(yùn)用C語言實(shí)現(xiàn)線性表基本操作。

3.純熟掌握線性表的綜合應(yīng)用問題。

【實(shí)驗(yàn)內(nèi)容】

1.一個(gè)線性表有n個(gè)元素(n<MAXSIZE,MAXSIZE指線性表的最大長度),且遞增有?,F(xiàn)有一元素x

要插入到線性表的適當(dāng)位置上,并保持線性表原有的順序不變。設(shè)計(jì)程序?qū)崿F(xiàn)。規(guī)定:采用順序存儲(chǔ)表達(dá)實(shí)

現(xiàn);采用鏈?zhǔn)酱鎯?chǔ)表達(dá)方法實(shí)現(xiàn);比較兩種方法的優(yōu)劣。

2.從單鏈表中刪除指定的元素x,若x在單鏈表中不存在,給出提醒信息。

規(guī)定:

①指定的值x由鍵盤輸入;

②程序能解決空鏈表的情況。

3.設(shè)有頭結(jié)點(diǎn)的單鏈表,編程對(duì)表中的任意值只保存一個(gè)結(jié)點(diǎn),刪除其余值相同的結(jié)點(diǎn)。

規(guī)定:

①該算法用函數(shù)(非主函數(shù))實(shí)現(xiàn);

②在主函數(shù)中調(diào)用創(chuàng)建鏈表的函數(shù)創(chuàng)建一個(gè)單鏈表,并調(diào)用該函數(shù),驗(yàn)證算法的對(duì)的性。

LinkedListExchange(LinkedListHEAD,p)

〃HEAD是單鏈表頭結(jié)點(diǎn)的指針,p是鏈表中的一個(gè)結(jié)點(diǎn)。本算法將p所指結(jié)點(diǎn)與其后

繼結(jié)點(diǎn)互換。

{q=head—>next;〃q是工作指針,指向鏈表中當(dāng)前待解決結(jié)點(diǎn)。

pre=head:〃Pre是前驅(qū)結(jié)點(diǎn)指針,指向q的前驅(qū)。

while(q!=nu1I&&q!=p){pre=q;q=q->next;}〃未找到p結(jié)點(diǎn),后移指針。

if(p—>next==nu11)printf("p無后繼結(jié)點(diǎn)\n");〃p是鏈表中最后一個(gè)結(jié)點(diǎn),無后繼。

else〃解決p和后繼結(jié)點(diǎn)互換

{q=p->next;〃暫存p的后繼。

Pre->next=q;〃p前驅(qū)結(jié)點(diǎn)的后繼指向p的后繼。

P->next=q->next;//p的后繼指向原p后繼的后繼。

q->next=p;〃原p后繼的后繼指針指向p。)

}〃算法結(jié)束。

4.己知非空單鏈表第一個(gè)結(jié)點(diǎn)由head指出,請(qǐng)寫一算法,互換p所指結(jié)點(diǎn)與其下一個(gè)結(jié)點(diǎn)在鏈表中

的位置。

規(guī)定:

①該算法用函數(shù)Reverse(head,p)實(shí)現(xiàn),其中head為表頭指針,p指向要互換的結(jié)點(diǎn);

②在主函數(shù)中調(diào)用創(chuàng)建鏈表的函數(shù)創(chuàng)建一個(gè)單鏈表,并調(diào)用該函數(shù),驗(yàn)證算法的對(duì)的性。

5.設(shè)有一個(gè)單鏈表,編寫可以完畢下列功能的算法:

①找出最小值的結(jié)點(diǎn),且打印該數(shù)值;

②若該數(shù)值是奇數(shù),則將其與直接后繼結(jié)點(diǎn)互換;

③若該數(shù)值是偶數(shù),則將其直接后繼結(jié)點(diǎn)刪除。

規(guī)定:

編寫主函數(shù)驗(yàn)證算法的對(duì)的性。

6.在一鏈表中,已知每個(gè)結(jié)點(diǎn)具有三個(gè)域:data、next和prior,其中prior域?yàn)榭?,設(shè)?'一個(gè)

算法,使每個(gè)結(jié)點(diǎn)的Prior指向它的前驅(qū)結(jié)點(diǎn),形成雙向循環(huán)鏈表。

規(guī)定:

①建立一個(gè)結(jié)點(diǎn)中具有三個(gè)域的單鏈表;

②在主函數(shù)中調(diào)用此算法,構(gòu)成雙向循環(huán)鏈表;

③在主函數(shù)中運(yùn)用正向和逆向兩種方式輸出鏈表中的數(shù)據(jù),驗(yàn)證算法的對(duì)的性。

7.用鏈表建立通訊錄。通訊錄內(nèi)容有:姓名、通訊地址、電話號(hào)碼。

規(guī)定:

①通訊錄是按姓名項(xiàng)的字母順序排列的;

②能查找通訊錄中某人的信息;

提醒:

可用鏈表來存放這個(gè)通訊錄,一個(gè)人的信息作為一個(gè)結(jié)點(diǎn)。成鏈的過程可以這樣考慮:先把頭結(jié)點(diǎn)后

面的第一個(gè)數(shù)據(jù)元素結(jié)點(diǎn)作為鏈中的首結(jié)點(diǎn),也是末結(jié)點(diǎn)。從第二個(gè)數(shù)據(jù)開始逐個(gè)作為‘工作結(jié)點(diǎn)',需從

鏈表的首結(jié)點(diǎn)開始比較,假如‘工作結(jié)點(diǎn)'的數(shù)據(jù)比鏈中的‘當(dāng)前結(jié)點(diǎn)’的數(shù)據(jù)小,就插在其前面。否則,

再看后面是否尚有結(jié)點(diǎn),若沒有結(jié)點(diǎn)了就插在其后面成為末結(jié)點(diǎn);若后面尚有結(jié)點(diǎn),再與后面的結(jié)點(diǎn)逐個(gè)比較

解決。

【實(shí)驗(yàn)報(bào)告】

實(shí)習(xí)時(shí)間:2023/10/14實(shí)習(xí)地點(diǎn):實(shí)習(xí)機(jī)號(hào):

作了1,2,3,4,5,6題

1題

采用順序存儲(chǔ)表達(dá)實(shí)現(xiàn)的算法:

boolInsert_Sq(SqList&LrElemTypex)

(

inti;

if(L.length>=L.listsize)

<

L.elem*(ElexiiType*)realloc(L.elemr(L.list31ze+L.incrementsize)*sizeof(ElemiType));

if(!L.elem)returnfalse;

L.listsize+^L.incremenrsize;

)

for(1=L.length-1;x<L.elem[i]&&工廠0;工--)

L.elemJi+ll^L.elemti];

L.elem[i+l]*x;

具L.lengrh++;

returntrue;

體)

主數(shù):

實(shí)

in.tmain(>

驗(yàn)<

SqLiscA;

內(nèi)InitList_S<5(Ar100r10);

inta[IQ]={1,4,7,9,10,T4,17,65,98■123};

容inrxri=0;

cout?,請(qǐng)輸入一小于2123的正整數(shù):r,?endl;

cin>>x;

for(i=0;l<10;l++)

LisrlnsertSq(AFira[i]);

Inserc__Sq(Arx);

ListTraverse_Sq(A);

return0;

>I

運(yùn)營結(jié)果:

請(qǐng)輸入一小于123的整數(shù):

121

14?91014176598121123

請(qǐng)按任意鍵繼續(xù)???■

w\rtuia?tttaawvi\Ju??wi,—\1r???,>,

請(qǐng)輸入一小于123的整數(shù):

0

0147910141?6598123

請(qǐng)按任意鍵繼續(xù)...■

請(qǐng)輸入一小于123的整數(shù):

124

14791014176598123124

請(qǐng)按任意鍵繼續(xù)?.?■

算法代碼:

boo1Insert_Sq(SqList&L,E1emTypex)

(

inti;。

if(L.length>=L.listsize)

(

L.e1em=(ElemType*)realloc(L.elem,(L.listsize+L.incrementsi

ze)*sizeof(ElemType));

。if(!L.e1em)returnfaIse;

。L.listsize+=L.incrementsize;

}

for(i=L.length-1;x<L.elem[i]&&i>=0;i—)

L.elem[i+1]=L.elem[i];

L.e1em[i+l]=x;

L.length++;

^returntrue;

}

采用鏈表實(shí)現(xiàn)的算法:

voidInsert_L(LinkListElemTypex)

(

LinkListprqrm;

p=L->nexr;

q=L;

while(p)

(

if(x>p->data&&p->next){p=p->-ext;q^q-^ext;}

elseif(x>p->data&&!(p->next))

(

rr.=(LinkList)malloc(sizeof(LNode));

m->data=x;

rc->next=NULL;

return;

I}

else{

ir=(LinkList)malloc(sizeof(LNode));

m->data=x;

iE->nextasp;

q->next=m;

return;

)

)

)

主函數(shù):

Iintmain()

(

LinkListA;

inta[10]={],4,7,9,10,14,工7,98,123,124};

CreateList_L_Front(Afa,10);

intxr1=0;

coux<”請(qǐng)輸入一爾于123的整數(shù):”《end1;

cin?x;

IInsert__L(Arx);

coutxv”操1三古結(jié)果:n?endl;

ListTraverse_L(A);

return0;

:}

運(yùn)營結(jié)果:

甫物人一整數(shù):

125

操作后結(jié)果:

14?910141798123124125

請(qǐng)按任意鍵繼續(xù)...■

一1

操作后結(jié)果:

-1147910141798123124

請(qǐng)按任意鍵繼續(xù)...■

區(qū)作后結(jié)果:

1347910141798123124

請(qǐng)按任意鍵繼續(xù).??

算法代碼:

voidInsert_L(LinkList&L,E1emTypex)

(

LinkListp,q,m;

?p=L->next;

q=L;

while(p)

6(

if(x>p->data&&p->next){p=p->next;q=q->next;}

eelseif(x>p->data&&!(p—>next))

。(

0m=(LinkList)ma1loc(sizeof(LNode));

。m->data=x;

g。p->next=m;

Qm->next=NULL;

oreturn;。

0)

?else{

。m=(LinkList)mal1oc(sizeof(LNode));

m->data=x;

g。m—>next=p;

Qq->next=m;

return;

6}

)

)

比較兩種算法的優(yōu)劣:順序表和鏈表都要和X逐項(xiàng)比較,順序表找到X應(yīng)放的位

置之后插入,后面的元素都要向后移位,但鏈表只需修改指針即可,鏈表相對(duì)易

操作一些

2題算法:

voidDelete__L(LinlcList&L)

(

ElemTypex;

coutx〈”請(qǐng)輸入元素x:n;

cin?x;

LinkListprq;

P=L;

if(!(p->next))

(

鏈表不存在"cvandl;

return;

}

while(p->next)

{

if(x=rp->next->dara&&p->nexr->nexr)

{q^-^ext;

p->next=q->next;

free(q);

return;

)

elseif(x=p->nexr->dar^&&!(p->next->nexr))

(

q^-^exr;

p->next=NULL;

free(q);

return;

)

p=sp_>next;

cout?"x不存在r,?endl;

return;

)

主函數(shù):

intmain()

(

LinkLiscA;

ElemTypea[10]={1,2,3,4,7,56,75,89,4,60};

[CreateList_L_Front(Ara,10);

ListTraverse_L(A);

Delete__L(A);

cou七<<endl<<”操作后的結(jié)果:n?endl;

ListTraverse_L(A);

)

代碼:

voidDelete_L(LinkList&L)

(

ElemTypex;

cOUt<<"請(qǐng)輸入元素X:";

cin?x;

LinkListp,q;

叩二L;

4f(!(p->next))

6(

。cout<<"鏈表不存在"《endl;

^return;

)

while(p->next)

°{

。if(x==p->next—>data&&p—>next->next)

{q=p->next;

p->next=q—>next;

free(q);

return;

°}

。elseif(x==p->next->data&&!(p->next->next))

00{

ogq=p->next;

。p->next=NULL;

。。。free(q);

8ggreturn;

6}

°p—P->next;

b}

cout?*'x不存在°?end1;

oreturn;

}

結(jié)果:

1_2347567589460

喝胡人兀素x:2

A作后的結(jié)果:

1347567589460

請(qǐng)按任意鍵繼續(xù)?.?.■

12347567589460

請(qǐng)輸入元素x:60

操作后的結(jié)果:

123475675894

請(qǐng)按任意鍵繼續(xù)...

1_237589460

置|25素x:18

x不存在

操作后的結(jié)果:

12347567589460

請(qǐng)按任意鍵繼續(xù)...

3題

算法:

5voidDeleteRepeat_L(LinkList&L)

6(

LinkListprqrir.;

Bp^L-^ext;

9while(p->nexc!=NULL)i

0

1Q=P;

2while(q->next!=NULL)

3

4if(q->next->data=p->data)

5

6ir;=q->nexD

7q->next=m->next;

8free(m);

9)

0elseq=q->next;

1)

2p=p->next;

3)

4

5

主函數(shù):

)intmain()

?{

JLinkListA;

inta4,7,9,1,0,1,4,1,7,9,8,1,2,3,1,2,4};

ICreateList_L_Front(A,ar18);

DeleteRepeat_L(A);

3couc<<”操后后結(jié)果:,r?endl;

IListTraverse_L(A);1

return0;

5}

運(yùn)營結(jié)果:

操作后結(jié)果:

14790823

請(qǐng)按任意鍵繼續(xù)..?

算法代碼:

voidDeleteRepeat_L(LinkList&L)

(

LinkListp,q,m;

叩=L->next;

while(p->next!=NULL)

(

q=p;

awhi1e(q->next!=NULL)

°{

。oif(q->next->data==p->data)

00(

b。m=q->next;

soq->next=m->next;

ofree(m);

°}

。elseq=q->next;

}

^p=p->next;

4題

算法:

voidReverse_L(LinkList&headFLinkListp)

cout?rr;->next->data;

LinkListq;

rf(p->next=NULL)

Icout?r,無后繼結(jié)點(diǎn)r,?endl;

else{

q3ssgmext;

m->next=q;

p->next=q->next;

q->mext;=g;

)

return;

)

主函數(shù)

intmain()

voidReverse__L(LinkList&seadrLinkListp);

srand((unsigned)rime(NULL));

LinkListheadrprk;

inti;

ElemTypea[10]={1,4,3,7,8,5,8,89,65,45》;

CreateList_L_Rear(head,a,10);

k=head->next;

ir.-head;I

ListTraverse_L(head);

for(i=l;i<rand()%(10);i++)//rand()%(10)是隨機(jī)取。-9內(nèi)的任意數(shù),即取A中任一結(jié)點(diǎn)

p=k->next;

m=n:->next;//^^q=m->next;

}

Reverse__L(headrp);

結(jié)果:n?endl;

ListTraverse_L(head);

return0;

頭文獻(xiàn)并且定義了全局變量:

typedefintElemType;

I#include<stdlib.h>

}#include<iomanip?h>

I#include<LinkList.h>

i#include<stdio.h>

;#include<time.h>

'LinkList0://全局變量,使->next;

運(yùn)營結(jié)果:

算法代碼:

voidReverse_L(LinkList&head,LinkListp)

(

<>LinkListq,pre;

?q=head—>next;

pre=head;

ewhile(q!=NULL&&q!=p)

6(

pre=q;

?q=q->next;

)

if(p->next==NULL)

cout<V”無后繼結(jié)點(diǎn)"v<end1;

else(

q=p->next;

pre—>next=q;

。p->next=q->next;

q->next=p;

}0

return;

)

5題

算法:

voidfxndmin_L(LinkList&L)

(

ElemTypee;

LinkListprqrprerq_pre;

p=L->next;

pre=L;

e=p->data;

while(p)

(

if(e>p->data)

{

e=p->data;

Q=P;

q__pre=pre;

)

p=p->next;

pre=pre->next;

)

cou1最小值為:n?e?endl;

if(e%2&6!a->r.ext||!(e%2)&&!q->next)

8UtX<”該最小值結(jié)點(diǎn)的后繼為空,不進(jìn)行操作。r,?endl;

elseif(e%2&&q->nexr)

I{

LinkListm;

iE=q->nexr;

q_pre->nextssir.;

q->next=m->next;

q;

8uc<<”此最小值為奇數(shù),將其與直接后繼結(jié)點(diǎn)交換。"?endl;

)

else{

LinkListm;

mSBq->next;

q->next=ir;->next;

free(in);

coutxv此最小值為偶數(shù),將其直接后繼結(jié)點(diǎn)刪除。"?endl;

)

)

主函數(shù):

intmain()

{

LinkListA;

ElemTypea[10],x;

coutxv”請(qǐng)輸入10個(gè)整數(shù):n?endl;

for(inti=0;i<10;i++)

{

cin?x;

a[i]=x;

)

CreateList_L__Front(Ara,10);

findmin_L(A);

couc<<"操作后的結(jié)果為:

ListTraverse_L(A);

)

操作結(jié)果:

福10

87‘I、整數(shù):

5432671

福鼻的后繼為空,

小不進(jìn)行操作。

有8?65432671

個(gè)

一10

刖765652

78

值2

.

點(diǎn)

結(jié)'*

,4不進(jìn)行操作。

結(jié)

鍵876545678652

意90

■■

^*

人1

1笠4:

i9r18F71235

656

山.

此^

搭將其與直接后繼結(jié)點(diǎn)交換。

提2

外987234s656

W八

1918762345

日677890

值.2

熊7

/小m,將其直接后繼結(jié)點(diǎn)刪除。

、

鏢7

繼98245677890

算法代碼:

voidfindmin_L(LinkList&L)

(

ElemTypee;

LinkListp,q,pre,q_pre;

p=L—>next;

pre=L;

e=p->data;

ewhile(p)

|

if(e>p->data)

e(

。e=p->data;

、8q=p;

a。。q_pre=pre;

)

。p=p—>next?

。pre=pre->next;

}6

coutV<”最小值為:"<<e<<endl;

if(e%2&&!q->nextI|!(e%2)&&!q->next)

ocout該最小值結(jié)點(diǎn)的后繼為空,不進(jìn)行操作。"<vendl;

。eIseif(e%2&&q->next)

0{

。LinkListm;

sm=q->next;

gq_pre->next=m;

q->next=m->next;

°m->next=q;<>

。。cout<<”此最小值為奇數(shù),將其與直接后繼結(jié)點(diǎn)互換。"<<endl;

}

?>else{

gLinkListm;

egm=q->next;

。q->next=m->next;

free(m);

cout<〈”此最小值為偶數(shù),將其直接后繼結(jié)點(diǎn)刪除?!?endl;

6題

算法:

voidbuild_circle(DuLinkList&head)

{

DuLinkListn;

m=head;

le(m->next->data!=0)

m->next->prior=m;

->'.ext->prior=ir.;

voidInitDuL(DuLinkList&L)

{

L=(DuLNode*)malloc(sizeof(DuLNode));

if(!L)exit(1);

L->next=NULL;

L->prior=NULL;

主函數(shù):

intmain()

{

voidInitDuL(DuLinkList&L);

voidbuild_circle(DuLinkList&head);

DuLinkListpfqrheadrk;

InitDxiL(p);

InitDuL(q);

InitDuL(head);T

ElemTypea;'

head=q;

cout?"向鏈表中輸入一串?dāng)?shù)字,以0作為浩交標(biāo)志:"?endl;

nn

scanf(%df&a);

q->data=O;

while(a)//建立單項(xiàng)循環(huán)鏈表并賦值

{

InitDuL(p);|

p->data=a;

q->next=p;

q=p;

scanf("¥d”,&a);

I

p->nexc=k=head;

build_circle(head);

while(head->next->data)//正向循環(huán)輸出鏈表

{

cout?head->next->data?"n;

head=head->next;

cour?endl;

build_circle(k:);//反向循環(huán)輸出鏈表

while(k->pr±or->data)

<

cout?k->prior->dara?nn;

k=k->prior;

)

)

頭文獻(xiàn)及定義的結(jié)構(gòu)體:

1typedefintElemType;

2#include<stdlib.h>

3#include<iomanip.h>

4#include<stdio.h>

5typedefstructdunode{

6ElemTypedata;

7structdunode*next;

structdunode*prior;

9}DuLNodef*DuLinkList;

算法代碼:

voidbuild_circle(DuLinkList&head)

(

QuLinkListm,n;

m=head;

while(m->next->data!=O)

9(

。m->next—>prior=m;

<>m=m—>next;。

m->next—>prior=m;。

)

結(jié)果:

句鏈表中輸入一串?dāng)?shù)字,以。作為結(jié)束標(biāo)志:

234567890

)3456789

,8765432請(qǐng)按任意鍵繼續(xù)...

程序運(yùn)營過程出現(xiàn)的錯(cuò)誤

1題:

用順序表操作比較順利,但用鏈表進(jìn)行比較時(shí),找到相應(yīng)位置后,插入過程出現(xiàn)錯(cuò)誤,編的錯(cuò)誤代碼使插入

的操作變?yōu)樘鎿Q后邊的緊鄰結(jié)點(diǎn)的操作

2題:

編寫過程無錯(cuò)誤

3題:

程算法思想是第一個(gè)結(jié)點(diǎn)的數(shù)和后面的依次比較,假如相等,就刪掉,然后再從第二個(gè)節(jié)點(diǎn)繼續(xù)做和第一個(gè)

結(jié)點(diǎn)同樣的事,直到最后為空,但我在編的過程中卻不知如何實(shí)現(xiàn)此操作,后來百度了一下:讓循環(huán)套循環(huán),內(nèi)

序?qū)拥难h(huán)讓固定一個(gè)結(jié)點(diǎn)的數(shù)依次和后面的比較,相同的刪除,內(nèi)部結(jié)束后P=P->next;然后再做相同的操

作,直到結(jié)點(diǎn)最后。

調(diào)4題:

(1)此題定義了全局變量,但是一開始編程序時(shí),卻莫名其妙在主函數(shù)里又定義了一次,此時(shí),操

試作的就是主函數(shù)里的這個(gè)m,而全局變量沒有進(jìn)行任何操作,因而在編的函數(shù)里用m時(shí),程序

會(huì)出現(xiàn)錯(cuò)誤。

過(2)在調(diào)換兩結(jié)點(diǎn)位置時(shí),有發(fā)生錯(cuò)誤。

5題:

程(1)在求最小值并執(zhí)行完p=p->next之后,p指向空值,但在初編此程序時(shí),卻想當(dāng)然認(rèn)為p

求出最小值后指向最小值所在結(jié)點(diǎn),因而在后面if(e%2&&!q-〉next||!(e%2)&&!q->n

ext)中,這個(gè)判斷條件始終為真,由于此時(shí)q=NULL。

(2)一開始直接在程序中給a[i]賦值,而不是通過輸入給a[i]值,固定的一組數(shù)不能全面檢查,

應(yīng)當(dāng)實(shí)驗(yàn)多組數(shù),特別是比較刁鉆苛刻的數(shù)

題6:

(1)在定義DuLinkListp,q,head,k;后,head=p;建立鏈表后并p->next=head;為了也給

k賦頭結(jié)點(diǎn),寫成了p->next=head=k;但這樣卻使head前繼后繼都變?yōu)榭樟恕?/p>

(2)在循環(huán)輸入一組整數(shù)時(shí),用的是cin?a;,然后在輸入數(shù)的時(shí)候直接:234567890

這樣輸入,但是由于cin任何類型都可以輸入,所以空格也會(huì)被輸入,因而出現(xiàn)錯(cuò)誤,假如用cin

輸入整數(shù),可以借助數(shù)組,inta[5];for(i=0;i<5;i++)cin?a[i];

在編代碼過程中出現(xiàn)的若干錯(cuò)誤,有一部分是本來就不知道,有一些事由于不純熟,不熟悉所

以導(dǎo)致錯(cuò)誤,也有一些是由于馬虎。當(dāng)編碼可以通過卻無法產(chǎn)生結(jié)果時(shí),通過逐步地調(diào)試,可

以發(fā)現(xiàn)犯錯(cuò)地方以及犯錯(cuò)的因素,我覺得調(diào)試的過程就是不斷進(jìn)步,自我糾錯(cuò)的過程。編出代碼,

運(yùn)營,改正,再完善--在這個(gè)過程中,編寫代碼的思維就更完善,更純熟,犯得低檔錯(cuò)誤也會(huì)

越來越少。

實(shí)

習(xí)

結(jié)

實(shí)驗(yàn)二堆棧與隊(duì)列

【實(shí)驗(yàn)?zāi)康摹?/p>

I.學(xué)習(xí)如何使用c語言實(shí)現(xiàn)堆棧與隊(duì)列。

2.熟悉堆棧與隊(duì)列的基本操作及應(yīng)用。

【實(shí)驗(yàn)內(nèi)容】

1.現(xiàn)有一順序循環(huán)隊(duì)列,其結(jié)構(gòu)描述為:

#defineMAX100

typedefstruct

{ElemTypequeue[MaxQueueSize];

intfront;//隊(duì)頭指針

intcount;〃計(jì)數(shù)器

}QueueType;

規(guī)定:

①設(shè)計(jì)隊(duì)列的幾種幾種操作:初始化、進(jìn)隊(duì)、出隊(duì)、取隊(duì)頭元素和判斷隊(duì)列是否非空。

②編寫一個(gè)主函數(shù)進(jìn)行測試。

2.已知Q是一個(gè)非空隊(duì)列,S是一個(gè)空棧。編寫算法實(shí)現(xiàn):將隊(duì)列Q中的所有元素逆置。

規(guī)定:

①調(diào)用堆棧和隊(duì)列的操作函數(shù)實(shí)現(xiàn)該算法。

②編寫一個(gè)主函數(shù)進(jìn)行測試。

3.設(shè)計(jì)一個(gè)算法,將計(jì)算機(jī)產(chǎn)生的n個(gè)隨機(jī)數(shù)分為奇數(shù)、偶數(shù)兩組,并將它們分別壓入兩個(gè)棧中,然后

在屏幕上輸出。

4.編寫一個(gè)程序,反映病人到醫(yī)院看病排隊(duì)看醫(yī)生的情況。在病人排隊(duì)過程中,重要反復(fù)兩件事:

①病人到達(dá)診室,將病歷交給護(hù)士,排到等候隊(duì)列中候診。

②護(hù)士從等待隊(duì)列中取出下一個(gè)病人的病歷,該病人進(jìn)入診室就診。

規(guī)定模擬病人等待就診這一過程。程序采用菜單方式,其選項(xiàng)及功能說明如下:

①排隊(duì)——輸入排隊(duì)病人的病歷號(hào),加入到病人排隊(duì)隊(duì)列中;

②就診——病人排隊(duì)隊(duì)列中最前面的病人就診,并將其從候診隊(duì)列中刪除;

③查看排隊(duì)——從隊(duì)首到隊(duì)尾列出所有的排隊(duì)病人的病歷號(hào);

④不再排隊(duì),余下依次就診——從隊(duì)首到隊(duì)尾列出所有的排隊(duì)病人的病歷號(hào),并退出運(yùn)營;

⑤下班一退出運(yùn)營。

【實(shí)驗(yàn)報(bào)告】

實(shí)習(xí)時(shí)間:2023/10/21實(shí)習(xí)地點(diǎn):九號(hào)樓八樓機(jī)房實(shí)習(xí)機(jī)號(hào):

做了1,2,3,4題

1題

頭文獻(xiàn):

JL

1typedefintElemType;

具2#include<stdlib.h>

3#include<iomanip.h>

體4#defineMaxQueueSize100

定義結(jié)構(gòu)體:

實(shí)

typedefstruct

驗(yàn)(

ElemType*queue;

intfront;

內(nèi)

intrear;

intqueuesize;

容intcount;;

IQueueType;

編寫的初始化、進(jìn)隊(duì)、出隊(duì)、取隊(duì)頭元素和判斷隊(duì)列算法:

boolInit_Sq(QueueType&Qrintmaxsize=MaxQueueSize)

{

Q.queue=(ElemType*)malloc(MaxQueueSize*sizeof(ElemType));

if(!Q.queue)exit(1);

Q.front3^.rear=0;

Q.cotmt^O;

Q.queuesize^.axsxze;

)

boolenq_Sq(QueueType&三,ElemTypee)

{

if(Q.rear=Q.front&&Q.cotmt>0)

returnfalse;

Q.queue[Q.rear]=e;

Q.rear=(Q.rear+1)%Q.queuesize;

Q.count++;

returntrue;

)

booldeq_Sq(QueueT^e&&,ElemType&e)

<

if(Q.count=0)

returnfalse;

else{

e=Q.queue[Q.front];

Q.front*(Q.front+1)%Q.queuesize;

Q.count--;

returntrue;

)

)

boolgetq_Sq(QueueTypeQfElemType&e)

(

if(Q.count=0)returnfalse;

e=Q.queue[Q.front];

returntrue;

)

boolempty_Sq(QueueTypeQ)

(

returnQ.connL=0;

i>

主函數(shù):

intmain()

(

QueueTypeQ;

ElemTypea[10]={l,2,3,4,5,6,7,8,9,0},b[10],x,c;

inti;

Init_Sq(Qr10);

Lf(eir^)ty__Sq(;))ccmcv〈”可始化之后,進(jìn)隊(duì)之前隊(duì)列為空”<<end1;

8Ut<<"分別讓下列元素進(jìn)隊(duì):-;

for(1=0;1<10;1++)

<

cout?a[i]?,*;

enq_Sq(Qra[i]);

}

cout<<andl<<"lE下?J元素出口人:r,;

for(i=0;x<4;±++)

{

deq_Sq(Qrb[i]);

cout?b[x]?'1;

)

getq_Sq(Qrx);

couc?andl<<”比時(shí)[?、首元素為:n?x?endl;;

COUtX<“再讓下列元素進(jìn)隊(duì):n;

for(1=0;__<3;i++)

(

cout?i+l?',;

enq__Sq(Qri+l);

)

cout?endl?”讓所有元素出隊(duì):

while(Q.count>0)

I(

deq_Sq(Qrx);

cout?x?1";

:}

free(Q.queue);

}

運(yùn)營結(jié)果:

第化

之VV

下123

素:

^24567890

兀134

時(shí)

隊(duì)

隊(duì)123

隊(duì)5678

:0123請(qǐng)按任意鍵繼續(xù)

算法代碼:

boolInit_Sq(QueueType&Q,intmaxsize=MaxQueueSize)

(

Q.queue=(E1emType*)malloc(MaxQueueSize*sizeof(E1emType));

if(!Q.queue)exit(l);

fiQ.front=Q.rear=0;

oQ.count=0;

oQ.queuesize=maxsize;

)

boo1enq_Sq(QueueType&Q,ElemTypee)

(

if(Q.rear==Q.front&&Q.count>0)

。returnfalse;

Q.queue[Q.rear]=e;

Qrear=(Q.rear+l)%Q.queuesize;

oQ.count++;

returntrue;

)

booldeq_Sq(QueueType&Q,ElemTypee)

{

df(Q.count==0)

。returnfalse;

else{

oe=Q.queue[Q.front];

Q.front=(Q.front+1)%Q.queuesize;

bQ.count—;

returntrue;

}

}

boolgetq_Sq(QueueTypeQ,E1emType&e)

(

。if(Q.count==0)retumfalse;

e=Q.queue[Q.front];

returntrue;

)

boolempty_Sq(QueueTypeQ)

(

。retumQ.count==0;

2題:

頭文獻(xiàn):

1typedef±nzElemType;

2#include<stdlib.h>

3#include<iomanip.h>

#include<SqQueue.h>

5#include<SqStack.h>

算法:

voidinverse(SqQueue&二)

{

SqStackS;

ElemTypee;

InitStack__Sq(8);

while(!QueueEmpty_Sq(Q))

(

DeQueue_Sq(Qre);

Pus

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論