數(shù)據(jù)實驗報告書_回文測試_第1頁
數(shù)據(jù)實驗報告書_回文測試_第2頁
數(shù)據(jù)實驗報告書_回文測試_第3頁
數(shù)據(jù)實驗報告書_回文測試_第4頁
數(shù)據(jù)實驗報告書_回文測試_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、.數(shù)據(jù)結(jié)構(gòu)實驗報告書實驗內(nèi)容:棧和隊列的基本操作及其應(yīng)用計算機學(xué)院 計算機科學(xué)與技術(shù)計科:*前言計算機編程中加工處理的對象是數(shù)據(jù),而數(shù)據(jù)具有一定的組織結(jié)構(gòu),所以學(xué)習(xí)計算機編程僅僅了解計算機語言是不夠的,還必須掌握數(shù)據(jù)的組織、存儲和運算的一般方法,這便是數(shù)據(jù)結(jié)構(gòu)課程中所研究的內(nèi)容,也是我們編寫計算機程序的重要基礎(chǔ),由于它對計算機學(xué)科起到承前啟后的作用,因此本課程被列為計算機等相關(guān)專業(yè)最重要的專業(yè)基礎(chǔ)課;同時數(shù)據(jù)結(jié)構(gòu)是計算機專業(yè)教學(xué)的一門核心課程。計算機各領(lǐng)域都要用到各種數(shù)據(jù)結(jié)構(gòu),而且要從事計算機科學(xué)與技術(shù)工作,尤其是計算機領(lǐng)域的軟件開發(fā)工作,必須具備較強的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)課程內(nèi)容豐富、學(xué)習(xí)

2、量大,實踐性強;隱含在各部分內(nèi)容中的方法和技術(shù)多;算法設(shè)計具有動態(tài)性和抽象性等特點,看懂聽明白與掌握會應(yīng)用之間有相當(dāng)大的一段距離。所以學(xué)生必須多實踐才能進一步加深對課程的理解,理解和掌握算法設(shè)計所需的方法和技術(shù),為整個專業(yè)學(xué)習(xí)打下良好的基礎(chǔ)。棧和隊列的基本操作及其應(yīng)用回文判斷一、實驗?zāi)康?、掌握棧和隊列的順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu),以便在實際中靈活應(yīng)用。2、掌握棧和隊列的特點,即后進先出和先進先出的原則。3、掌握棧和隊列的基本運算,如:入棧與出棧,入隊與出隊等運算在順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)上的實現(xiàn)。 問題描述對于一個從鍵盤輸入的字符串,判斷其是否為回文?;匚募凑葱蛳嗤?。如“abba”是回文

3、,而“abab”不是回文。基本要求(1)數(shù)據(jù)從鍵盤讀入;(2)輸出要判斷的字符串;(3)利用棧的基本操作對給定的字符串判斷其是否是回文,若是則輸出“Yes”,否則輸出“No”。測試數(shù)據(jù)由學(xué)生任意指定。算法設(shè)計:首先,先建立兩個空棧。分別命名為S、L?,F(xiàn)將輸入的字符串,儲存于S棧中。然后,編寫代碼。使得S棧中的字符依出棧,并保存于L棧中。這樣可以使得S棧與L棧中的字符完全相同,但順序顛倒。然后依次比較L棧與S棧中的字符是否相同。如果相同,則說明,所輸入的字符。顛倒順序后與原字符依然相同。所以可判斷為回文。否則,就不是回文。在本代碼中,棧的數(shù)據(jù)結(jié)構(gòu)設(shè)計了三個指針。base指向棧底,top指向棧頂,

4、sel也指向棧頂。sel的作用是用于將棧S中的元素,依次傳給棧L。從而避免了,在傳元素的過程中,棧S的top指針回到base指針上。導(dǎo)致棧S變?yōu)榭諚?。最后說明一下。字符串的輸入是一“#”字符為結(jié)束標(biāo)志的。但這個符號本身不算字符串的一部分。建立堆棧的數(shù)據(jù)結(jié)構(gòu):typedef struct Stick ele *base; ele *top; ele *sel; int stacksize;Sqstack;當(dāng)然此處定義:typedef char ele;初始化所有可能用到的數(shù)據(jù):#define NULL 0 #define SIZE 100#define OVER 100堆棧的建立算法:int I

5、nit(Sqstack &S) S.base=(ele *)malloc(SIZE * sizeof(ele); if(!S.base) exit(0); S.top=S.base; S.sel=S.base; S.stacksize=SIZE; return 1;堆棧的建立好以后就可以想法向里面輸入字符,并定義以下算法實現(xiàn)向堆棧里面輸入字符:int push(Sqstack &S,ele e) if (S.top-S.base=S.stacksize) S.base=(ele *)realloc(S.base,(S.stacksize+OVER)*sizeof(ele); if(!S.bas

6、e) exit(0); S.top=S.base+S.stacksize; S.stacksize=S.stacksize+OVER; *S.top+=e; S.sel=S.top; return 1;此程序是為實現(xiàn)回文的判斷定義以下實現(xiàn)函數(shù)comp(Sqstack &S,Sqstack &L):int comp(Sqstack &S,Sqstack &L) /對兩個堆棧中的字符串進行比較并判斷是否為回文 int n=1; if (L.top-L.base=L.stacksize) L.base=(ele *)realloc(L.base,(L.stacksize+OVER)*sizeof(e

7、le); if(!L.base) exit(0); L.top=L.base+S.stacksize; L.stacksize=L.stacksize+OVER; S.sel=S.sel-1; while(S.sel=S.base) *L.top=*S.sel; S.sel=S.sel-1; L.top =L.top+1; S.top=S.top-2; L.top=L.top-1; while(S.top=S.base)&(L.top=L.base-1) if(*S.top!=*L.top) n=0; S.top-; L.top-; if(n=1) coutYESn; else coutNOn

8、; return OK;此函數(shù)是本程序的核心所以,主要進行的操作就是本函數(shù)。主函數(shù):void main() char j; Sqstack S,L; Init(S); Init(L); coutj; push(S,j); while(j!=#) cinj; push(S,j); coutn; comp(S,L); coutn; system(pause);測試調(diào)試:本程序開始運行后出現(xiàn)以下界面:根據(jù)具體所析:采用以下測試數(shù)據(jù),以字母回文、字母非回文、數(shù)字回文、數(shù)字非回文、字母加數(shù)字回文、字母加數(shù)字非回文,進行測試:asdfnmmnfdsa、imksginlkjii、25468986452、23

9、556964、aki56265ika、sdfs5548。所有測試數(shù)據(jù)以“#”結(jié)尾。測試一:成功。測試二:成功。測試三:成功。測試四:成功。測試五:成功。測試六:成功??偨Y(jié):經(jīng)過以上的編碼測試,可以得出,本實驗程序能對字符進行是否為回文的判斷。并最終以YESor No 的形式把結(jié)果給輸入。能過本次實驗,我算是深入的了解了堆棧的操作及應(yīng)用,雖然此程序很小,但已足以氫棧的思想給表現(xiàn),并通過本次實驗,熟悉了棧的知識,并在以后的學(xué)習(xí)當(dāng)中并加以應(yīng)用。最后感謝指導(dǎo)老師:高老師附錄:源代碼:#include#includeusing namespace std;#define NULL 0 /初始化所有可能用

10、到的參數(shù)#define SIZE 100#define OVER 100#define OK 1typedef char ele;typedef struct Stick /建立堆棧的數(shù)據(jù)結(jié)構(gòu) ele *base; ele *top; ele *sel; int stacksize;Sqstack; int Init(Sqstack &S) /建立一個堆棧 S.base=(ele *)malloc(SIZE * sizeof(ele); if(!S.base) exit(0); S.top=S.base; S.sel=S.base; S.stacksize=SIZE; return OK; i

11、nt push(Sqstack &S,ele e) /向堆棧里輸入字符 if (S.top-S.base=S.stacksize) S.base=(ele *)realloc(S.base,(S.stacksize+OVER)*sizeof(ele); if(!S.base) exit(0); S.top=S.base+S.stacksize; S.stacksize=S.stacksize+OVER; *S.top+=e; S.sel=S.top; return OK; int comp(Sqstack &S,Sqstack &L) /對兩個堆棧中的字符串進行比較并判斷是否為回文 int n

12、=1; if (L.top-L.base=L.stacksize) L.base=(ele *)realloc(L.base,(L.stacksize+OVER)*sizeof(ele); if(!L.base) exit(0); L.top=L.base+S.stacksize; L.stacksize=L.stacksize+OVER; S.sel=S.sel-1; while(S.sel=S.base) *L.top=*S.sel; S.sel=S.sel-1; L.top =L.top+1; S.top=S.top-2; L.top=L.top-1; while(S.top=S.base)&(L.top=L.base-1) if(*S.top!=*L.top) n=0; S.top

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論