回文判斷的算法實(shí)驗(yàn)報(bào)告_第1頁
回文判斷的算法實(shí)驗(yàn)報(bào)告_第2頁
回文判斷的算法實(shí)驗(yàn)報(bào)告_第3頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.實(shí)驗(yàn)題目一、一、 需求分析需求分析.回文判斷的算法.1程序的功能:實(shí)現(xiàn)對字符序列是否是一個回文序列的判斷2輸入輸出的要求:從鍵盤讀入一組字符序列, 判斷是否是回文, 并將結(jié)果顯示在屏幕上3測試數(shù)據(jù):回文字符序列輸入:非回文字符序列輸入:二、二、 概要設(shè)計(jì)概要設(shè)計(jì)1本程序所用的抽象數(shù)據(jù)類型的定義:typedef struct char itemstacksize; int top;.sqstack;typedef struct qnode char data; struct qnode *next;lqnode, *pqnode;typedef struct pqnode front,rear

2、; linkqueue;2主程序的流程及各程序模塊之間的層次關(guān)系。(1)int initstack(sqstack *s):棧初始化模塊,即初始化一個空棧,隨后對該空棧進(jìn)行數(shù)據(jù)的寫入操作;(2)int push(sqstack *s, char data) :入棧操作,即給空棧中寫入數(shù)據(jù),數(shù)據(jù)長度有宏定義給出;(3)int pop(sqstack *s, char *data) :出棧操作,即將棧中的數(shù)據(jù)輸出,由于棧的操作是先進(jìn)后出,因此,出棧的數(shù)據(jù)是原先輸入數(shù)據(jù)的逆序;(4)int initqueue(linkqueue *q):隊(duì)列初始化,即初始化一個空隊(duì)列,最后對該空隊(duì)列進(jìn)行數(shù)據(jù)的寫入操

3、作;(5)int enqueue(linkqueue *q, char item):入隊(duì)操作, 即給空隊(duì)列中寫入數(shù)據(jù), 數(shù)據(jù)長度一樣有宏定義給出;.(6)int dequeue(linkqueue *q, char *item) :出隊(duì)操作, 即將隊(duì)列中的數(shù)據(jù)輸出, 由于隊(duì)列的操作是先進(jìn)先出,因此,出隊(duì)的數(shù)據(jù)室原先輸入數(shù)據(jù)的正序;(7)int main():主函數(shù),用于調(diào)用前面的模塊,進(jìn)行出隊(duì)數(shù)據(jù)與出棧數(shù)據(jù)的比較, 判斷輸入的序列是否是回文序列。模塊之間關(guān)系及其相互調(diào)用的圖示:三、三、 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)1采用 c 語言定義相關(guān)的數(shù)據(jù)類型.整形,字符型,指針類型,聚合類型,自定義類型2寫出各模塊

4、的偽碼算法:參照源程序(1)int initstack(sqstack *s)(2)int push(sqstack *s, char data)(3)int pop(sqstack *s, char *data)(4)int initqueue(linkqueue *q)(5)int enqueue(linkqueue *q, char item)(6)int dequeue(linkqueue *q, char *item)四、四、 調(diào)試分析調(diào)試分析1調(diào)試中遇到的問題及對問題的解決方法:問題:程序出現(xiàn)未知錯誤。方法: 在感覺容易出錯的地方或者是已經(jīng)出錯的地方前面打斷點(diǎn),進(jìn)一步調(diào)試。2算法的

5、時間復(fù)雜度和空間復(fù)雜度。時間復(fù)雜度:t(n) = o(n)五、五、 使用說明及測試結(jié)果使用說明及測試結(jié)果回文字符輸入:非回文字符輸入:.六、六、 源程序(帶注釋)源程序(帶注釋)#include #include #include #define stacksize 100typedef struct char itemstacksize; int top;sqstack;/*順序棧的定義*/typedef struct qnode char data; struct qnode *next;lqnode, *pqnode;typedef struct. pqnode front,rear;

6、linkqueue;/*鏈隊(duì)列的定義*/int initstack(sqstack *s);/*初始化順序棧*/int stackempty(sqstack s);/*判斷是否為空棧*/int push(sqstack *s, char data);/*入棧*/int pop(sqstack *s, char *data);/*出棧*/int initqueue(linkqueue *q);/*初始化鏈隊(duì)列*/int queueempty(linkqueue q);/*判斷是否為空隊(duì)列*/int enqueue(linkqueue *q, char item);/*入隊(duì)*/int dequeu

7、e(linkqueue *q, char *item);/*出隊(duì)*/int traversequeue(linkqueue q);/*遍歷*/int initstack(sqstack *s) /*初始化順序棧*/s-top = -1; return 1;int stackempty(sqstack s)/*判斷是否為空棧*/. if(s.top = -1) return 1; else return 0;int push(sqstack *s, char data)/*入棧*/ if(s-top = stacksize - 1) printf(n 棧已滿,不能完成入棧操作!); return

8、 0; s-top+; s-items-top = data; return 1;int pop(sqstack *s, char *data)/*出棧*/ if (s-top = -1) printf(n 堆棧已空,不能完成出棧操作!);. return 0; *data = s-items-top; s-top-; return 1;int initqueue(linkqueue *q)/*初始化鏈隊(duì)列*/ q-front=q-rear(pqnode)malloc(sizeof(lqnode); if(!q-front)printf(n 初始化隊(duì)列失??!);return 0; q-fron

9、t-next = null; return 1;.=.int queueempty(linkqueue q)/*判斷是否為空隊(duì)列*/ if (q.front = q.rear)printf(n 隊(duì)列為空!);return 1; else return 0;int enqueue(linkqueue *q, char item)/*入隊(duì)*/ pqnode p; p = (pqnode)malloc(sizeof(lqnode); if(!p) printf(n 內(nèi)存分配失敗); return 0; p-data = item;. p-next = null; q-rear-next = p; q

10、-rear = p; return 1;int dequeue(linkqueue *q, char *item)/*出隊(duì)*/ pqnode p; if(q-front = q-rear) printf(n 隊(duì)列已空,不能出隊(duì)); return 0; p = q-front-next; *item = p-data; q-front-next = p-next; free(p); if(q-rear = p) /*若刪除的為最后一個結(jié)點(diǎn),移動隊(duì)尾指針*/ q-front = q-rear;. return 1;int traversequeue(linkqueue q)/*遍歷*/ pqnod

11、e pos; if(q.front = q.rear) printf(n 隊(duì)列為空!); return 0; pos = q.front-next; printf(nhere is the string:); while(pos != null) printf(%c, pos-data); pos = pos-next; printf(n); return 1;.int main() int i,len,count1 = 0; char str1100,ch,ch1; linkqueue lq1,lq2; sqstack sq; printf(請輸入字符:); scanf(%s, &str1); len = strlen(str1); initqueue(&lq1); initqueue(&lq2); initstack(&sq); for(i=0;ilen;i+) enqueue(&lq1,str1i); traversequeue(lq1); for(i=0;ilen;i+) . dequeue(&lq1,&ch); push(&sq,ch); enqueue(&lq1,ch); for(i=0;ilen;i+) pop(&sq,&ch); enqueue(&lq2,c

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論