版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力拖動(dòng)控制課程設(shè)計(jì)
- 電力電子升降壓課程設(shè)計(jì)
- 2024年度特殊人群特殊營養(yǎng)配餐服務(wù)合同模板3篇
- 2024年度地暖工程施工與智能溫控系統(tǒng)配套合同2篇
- 2024年度水庫水面承包與水利設(shè)施施工合同3篇
- 插花大師教學(xué)課程設(shè)計(jì)
- 文胸?cái)z影課程設(shè)計(jì)
- 2024年度食品企業(yè)食品添加劑采購合同范本3篇
- 特色課程設(shè)計(jì)師培訓(xùn)方案
- 幼兒園的課程設(shè)計(jì)要點(diǎn)
- GB 4806.7-2023食品安全國家標(biāo)準(zhǔn)食品接觸用塑料材料及制品
- 論文《后疫情時(shí)代信息技術(shù)與幼兒園教育深度融合的策略研究》
- 2023-2024學(xué)年江西省南昌市數(shù)學(xué)六年級(jí)第一學(xué)期期末復(fù)習(xí)檢測模擬試題含答案
- 醫(yī)院不擔(dān)當(dāng)、不作為問題專項(xiàng)治理實(shí)施方案
- 體外診斷試劑盒風(fēng)險(xiǎn)分析報(bào)告
- -2023廣東高考英語聽說考試三問整理
- 9高考語文透析一題·詩歌鑒賞(手法技巧)《柳梢青 送盧梅坡 》
- 如何高效學(xué)習(xí)學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫2023年
- DB3205T 1062-2023 制造業(yè)質(zhì)量管理數(shù)字化水平評(píng)價(jià)規(guī)范
- 貴州省建筑節(jié)能工程認(rèn)定表
- 退出協(xié)議書(8篇)
評(píng)論
0/150
提交評(píng)論