棧和隊(duì)列基本操作實(shí)驗(yàn)報(bào)告_第1頁(yè)
棧和隊(duì)列基本操作實(shí)驗(yàn)報(bào)告_第2頁(yè)
棧和隊(duì)列基本操作實(shí)驗(yàn)報(bào)告_第3頁(yè)
棧和隊(duì)列基本操作實(shí)驗(yàn)報(bào)告_第4頁(yè)
棧和隊(duì)列基本操作實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 實(shí)驗(yàn)二 堆棧和隊(duì)列基本操作的編程實(shí)現(xiàn)【實(shí)驗(yàn)?zāi)康摹慷褩:完?duì)列基本操作的編程實(shí)現(xiàn)要求:堆棧和隊(duì)列基本操作的編程實(shí)現(xiàn)(2學(xué)時(shí),驗(yàn)證型),掌握堆棧和隊(duì)列的建立、進(jìn)棧、出棧、進(jìn)隊(duì)、出隊(duì)等基本操作的編程實(shí)現(xiàn),存儲(chǔ)結(jié)構(gòu)可以在順序結(jié)構(gòu)或鏈接結(jié)構(gòu)中任選,也可以全部實(shí)現(xiàn)。也鼓勵(lì)學(xué)生利用基本操作進(jìn)行一些應(yīng)用的程序設(shè)計(jì)?!緦?shí)驗(yàn)性質(zhì)】驗(yàn)證性實(shí)驗(yàn)(學(xué)時(shí)數(shù):2H)【實(shí)驗(yàn)內(nèi)容】?jī)?nèi)容:把堆棧和隊(duì)列的順序存儲(chǔ)(環(huán)隊(duì))和鏈表存儲(chǔ)的數(shù)據(jù)進(jìn)隊(duì)、出隊(duì)等運(yùn)算其中一部分進(jìn)行程序?qū)崿F(xiàn)??梢詫?shí)驗(yàn)一的結(jié)果自己實(shí)現(xiàn)數(shù)據(jù)輸入、數(shù)據(jù)顯示的函數(shù)。利用基本功能實(shí)現(xiàn)各類應(yīng)用,如括號(hào)匹配、回文判斷、事物排隊(duì)模擬、數(shù)據(jù)逆序生成、多進(jìn)制轉(zhuǎn)換等?!緦?shí)驗(yàn)分析、說(shuō)明過(guò)

2、程】 分析:進(jìn)棧操作先創(chuàng)建一個(gè)以x為值的新結(jié)點(diǎn)p,其data域值為x則進(jìn)棧操作步驟如下:將新結(jié)點(diǎn)p的指針域指向原棧頂S(執(zhí)行語(yǔ)句p->next=S)。將棧頂S指向新結(jié)點(diǎn)p(執(zhí)行語(yǔ)句S=p)。注:進(jìn)棧操作的與語(yǔ)句執(zhí)行順序不能顛倒,否則原S指針其后的鏈表將丟失。出棧操作先將結(jié)點(diǎn)棧頂S數(shù)據(jù)域中的值賦給指針變量*x,則刪除操作步驟如下:結(jié)點(diǎn)p指針域指向原棧頂S(執(zhí)行語(yǔ)句p=S)。棧頂S指向其的下一個(gè)結(jié)點(diǎn)(執(zhí)行語(yǔ)句S=S->next)釋放p結(jié)點(diǎn)空間(執(zhí)行語(yǔ)句free(p))。隊(duì)列分析:用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)的隊(duì)列稱為鏈隊(duì)列,一個(gè)鏈隊(duì)列需要一個(gè)隊(duì)頭指針和一個(gè)隊(duì)尾指針才能唯一確定。隊(duì)列中元素的結(jié)構(gòu)和

3、前面單鏈表中的結(jié)點(diǎn)的結(jié)構(gòu)一樣。為了操作方便,在隊(duì)頭元素前附加一個(gè)頭結(jié)點(diǎn),隊(duì)頭指針就指向頭結(jié)點(diǎn)?!舅伎紗栴}】1. 棧的順序存儲(chǔ)和鏈表存儲(chǔ)的差異? 答:棧的順序存儲(chǔ)有后進(jìn)先出的特點(diǎn),最后進(jìn)棧的元素必須最先出來(lái),進(jìn)出棧是有序的,在對(duì)編某些需要按順序操作的程序有很大的作用。 鏈表存儲(chǔ):通過(guò)鏈表的存儲(chǔ)可以實(shí)現(xiàn)鏈表中任意位置的插入元素,刪除任意元素,可以實(shí)現(xiàn)無(wú)序進(jìn)出。2. 還會(huì)有數(shù)據(jù)移動(dòng)嗎?為什么?答:棧的順序存儲(chǔ)不會(huì)有數(shù)據(jù)移動(dòng),移動(dòng)的只是指向該數(shù)據(jù)地址的指針。3. 棧的主要特點(diǎn)是什么?隊(duì)列呢?答:棧擁有后進(jìn)先出的特點(diǎn);隊(duì)列擁有先進(jìn)先出的特點(diǎn)。4. 棧的主要功能是什么?隊(duì)列呢?答:棧作為數(shù)據(jù)結(jié)構(gòu),其主要的

4、用途是保存一批數(shù)據(jù)的逆序信息,從而產(chǎn)生逆序數(shù)據(jù)。隊(duì)列也是一種數(shù)據(jù)結(jié)構(gòu),其主要的用途按順序保存一批數(shù)據(jù),并且有序的隊(duì)數(shù)據(jù)進(jìn)行處理。5. 為什么會(huì)有環(huán)狀隊(duì)列? 答:為了解決“假溢出”的問題,把順序結(jié)構(gòu)的頭尾進(jìn)行相連,造出了一個(gè)所謂 的“環(huán)狀隊(duì)列”。【實(shí)驗(yàn)小結(jié)】 (總結(jié)本次實(shí)驗(yàn)的重難點(diǎn)及心得、體會(huì)、收獲) 本次實(shí)驗(yàn)主要是對(duì)堆棧和隊(duì)列的順序存儲(chǔ)和鏈表存儲(chǔ)的數(shù)據(jù)進(jìn)隊(duì)、出隊(duì)等運(yùn)算中一部分程序進(jìn)行完善,程序的復(fù)雜度也是逐步增加,這讓我們對(duì)棧和隊(duì)列的認(rèn)識(shí)也逐步加深。 在做本次實(shí)驗(yàn)中,自己親自動(dòng)手后,我棧和隊(duì)列的知識(shí)又有了更深層次的了解,掌握了?!昂筮M(jìn)先出”和隊(duì)列“先進(jìn)先出”的特點(diǎn),學(xué)會(huì)了棧和隊(duì)列的一些基本應(yīng)用

5、實(shí)例,實(shí)驗(yàn)的目的就是學(xué)會(huì)用棧和隊(duì)列這兩種數(shù)據(jù)結(jié)構(gòu)進(jìn)行編程,進(jìn)行一些實(shí)際問題的處理,經(jīng)過(guò)本次實(shí)驗(yàn),我對(duì)學(xué)習(xí)也有了一些新的感悟,學(xué)了的知識(shí)要時(shí)常復(fù)習(xí),經(jīng)常鞏固,不懂的知識(shí)要及時(shí)向老師或者同學(xué)請(qǐng)教,爭(zhēng)取把這門課程學(xué)的更好!【附錄-實(shí)驗(yàn)代碼】#include<stdio.h>#include<stdlib.h>#include<conio.h>typedef int elemtype;typedef struct node /隊(duì)列結(jié)點(diǎn)類型定義 elemtype data; /隊(duì)列的數(shù)據(jù)元素類型 struct node *next; /指向后繼結(jié)點(diǎn)的指針NODE;ty

6、pedef struct /定義鏈隊(duì) NODE *front,*rear;/定義鏈隊(duì)隊(duì)頭和隊(duì)尾指針LINKQUEUE;void initqueue(LINKQUEUE *QL)/隊(duì)列的初始化QL->front=(NODE *)malloc(sizeof(NODE);/隊(duì)列為帶頭結(jié)點(diǎn)的鏈隊(duì)列QL->front->next=NULL;QL->rear=QL->front;LINKQUEUE *pushqueue(LINKQUEUE *QL,elemtype x) /將元素x插入到鏈隊(duì)列QL中,作為QL的新隊(duì)尾QL->rear->next=(NODE *)m

7、alloc(sizeof(NODE);QL->rear->next->data=x;QL->rear=QL->rear->next;QL->rear->next=NULL;return QL;elemtype popqueue(LINKQUEUE *QL) /若鏈隊(duì)列不為空,則刪除隊(duì)頭元素,返回其元素值NODE *newnode;newnode=QL->front->next;if(newnode=NULL)return 0;newnode=QL->front;QL->front=QL->front->next

8、;free(newnode);return(QL->front->data);void printqueue(LINKQUEUE *QL)/隊(duì)列的顯示NODE *p;p=QL->front->next;if(p=NULL)printf("隊(duì)列空!");while(p!=NULL)if(p->next=NULL) printf("%d",p->data);else printf("%d<-",p->data); p=p->next;printf("n");void

9、 main() LINKQUEUE *p; int choice,elemdata,x=0; p=(LINKQUEUE *)malloc(sizeof(LINKQUEUE); initqueue(p); while(1) printf(" 歡迎使用隊(duì)列操作小程序:n"); printf("t1、元素入隊(duì)n"); printf("t2、元素出隊(duì)n"); printf("t3、顯示隊(duì)列n"); printf("t4、清屏幕n"); printf("t5、退出程序n");print

10、f(" 請(qǐng)選擇你的操作:"); scanf("%d",&choice); switch(choice) case 1:printf("請(qǐng)輸入進(jìn)隊(duì)元素:"); scanf("%d",&elemdata); p=pushqueue(p,elemdata); printf("隊(duì)列中的元素為:n"); printqueue(p); system("pause"); break; case 2:x=popqueue(p); if(x!=0) printf("元素%d出隊(duì)!n",x); printf("隊(duì)列中的元素為:n"); printqueue(p); system("pause"); break; case 3:printf(&quo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論