




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程考核報告 表達(dá)式的翻譯學(xué)號: 1515925640 姓名: 王伊慶 專業(yè): 軟件工程專業(yè) 班級: 15級云計算1班 指導(dǎo)教師: 錢 鴿 南 陽 理 工 學(xué) 院 軟 件 學(xué) 院2016年12月 目錄1.需求分析-3 1.1問題描述-3 1.2基本要求-32.系統(tǒng)設(shè)計-33.程序流程圖-44.類關(guān)系圖-65. 實現(xiàn)代碼-76.個人總結(jié)-77.參考書目-7一需求分析 1.1問題描述 編寫完整程序,將中綴表達(dá)式翻譯成后綴表達(dá)式。表達(dá)式由操作數(shù) ( 變量 ) 、操作 ( 運算符 ) 以及小括弧 “ ( ” 和 “ ) ” 組成,其中:(1)操作包括算術(shù)運算、關(guān)系運算和邏輯運算三類;(2)操作
2、數(shù)為單個字符或由字母和數(shù)字任意多個字符構(gòu)成;(3)能夠識別出簡單的錯誤,如括弧不匹配。 1.2 基本要求 輸入:中綴表達(dá)式,80個字符以內(nèi)。 輸出:運算結(jié)果 功能:將中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式 二系統(tǒng)設(shè)計 根據(jù)題目要求,將中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式。問題的解決方案有兩種,分別是利用棧結(jié)構(gòu)實現(xiàn)算數(shù)表達(dá)式的四則運算或者利用二叉樹把中綴表達(dá)式轉(zhuǎn)化為前綴表達(dá)式,我選擇棧結(jié)構(gòu)與樹結(jié)構(gòu)相結(jié)合來實現(xiàn)算數(shù)表達(dá)式的轉(zhuǎn)化。算法思想:運用棧和隊列來將中綴轉(zhuǎn)換為后綴,棧用來儲存字符,隊列用來存儲后綴表達(dá)式。:輸入字符串c,若是數(shù)字的話直接進(jìn)入隊列,若是符號,為*/(,則線檢查棧中的棧頂元素,前提是棧不為空,若棧不為空
3、的話,棧頂元素為*|/,則先將棧中的元素入隊,如果棧頂是+-這些優(yōu)先級小的,則直接將c入棧。:如果c是優(yōu)先級為“+”“-”的字符,先看一下棧是否為空,接著判斷棧頂元素是否為“(”,若是,則繼續(xù)將c進(jìn)棧,否則的話,將棧中的元素全部出棧,直到棧空。:若c為“)”則將棧中所有符號彈棧并進(jìn)入隊列。:若c為“#”,則結(jié)束,并將棧中的剩余的符號全部入隊列。:打印隊列中的,出隊打印。 開始3 程序流程圖輸入一個字符串celse ifC!=#Ifc!=.|c0If(!c!=.|c0)若為數(shù)存入數(shù)組,i=1else if將數(shù)組中第0個存到隊列中If(c*|c=/|c=()else ifIf(c+|c=-)If(
4、c=)If??諚m敵鰲=oc2while棧空棧頂出棧給eelse ifIf(c2=*|c2=/)棧頂出棧入隊操作If(e!=()棧頂出棧入隊操作棧頂元素出棧c2進(jìn)棧后c進(jìn)棧c2進(jìn)隊列c入棧else ife=(else ifwhile??誩=#入棧棧中剩余的出棧入隊操作結(jié)束4 類關(guān)系圖(1) .頭文件:#include#include(2)宏定義:#define OK 1#define ERROR 0#define STACK_SIZE 20#define STACK_INCREMENT 10#define QUEUE_SIZE 20(3) 棧的定義結(jié)構(gòu)體typedef int Status;ty
5、pedef char StackElemtype; /棧的類型typedef struct Stack StackElemtype* base; StackElemtype* top; int stackSize;Stack;(5)初始化棧:Status StackInit(Stack* s)(6)出棧:Status Pop(Stack* s,StackElemtype* value)(7)進(jìn)棧:Status Push(Stack* s,StackElemtype value)(8)求棧的長度:int StackLength(Stack s)(9)定義隊列的結(jié)構(gòu)體:typedef double
6、 QueueElemtype;typedef char QueueOperatorValue;typedef struct QueueNode /定義隊列結(jié)構(gòu)體 QueueElemtype data; QueueOperatorValue operator; struct QueueNode* next; int flag;QueueNode,*QueueNodePtr;typedef struct Queue QueueNodePtr front; QueueNodePtr rear;Queue;(10)初始化隊列Status QueueInit(Queue* q)(11)隊列的插入:Sta
7、tus QueueInsert(Queue* q,QueueElemtype value)(12)出隊列Status QueueInsert_operatorValue(Queue* q,QueueOperatorValue value)(13)中綴轉(zhuǎn)后綴函數(shù)Status Infix2Postfix(Queue* q)(14)打印后綴表達(dá)式Status ShowQueue(Queue q)(15)主函數(shù)int main() Queue q; QueueInit(&q); Infix2Postfix(&q); ShowQueue(q); return 0;5 運行截圖六實現(xiàn)代碼#include#
8、include#define OK 1#define ERROR 0#define STACK_SIZE 20#define STACK_INCREMENT 10#define QUEUE_SIZE 20typedef int Status;typedef char StackElemtype; /棧的類型typedef struct Stack StackElemtype* base; StackElemtype* top; int stackSize;Stack;Status StackInit(Stack* s) /初始化棧 s-base = (StackElemtype*)malloc
9、(sizeof(StackElemtype) * STACK_SIZE); /申請棧的空間 if( !s-base ) return ERROR; s-top = s-base; s-stackSize = STACK_SIZE; return OK;Status Pop(Stack* s,StackElemtype* value) /出棧操作 if( s-base = s-top ) printf(nstack emptyn); return ERROR; *value = *(-(s-top); return OK;Status Push(Stack* s,StackElemtype va
10、lue) /進(jìn)棧操作 if( s-top - s-base = s-stackSize) s-base = (StackElemtype*)realloc(s-base,sizeof(StackElemtype) * (STACK_INCREMENT + STACK_SIZE); if( !s-base ) return ERROR; s-top = s-base + STACK_SIZE; s-stackSize = STACK_SIZE + STACK_INCREMENT; *(s-top) = value; s-top+; return OK;int StackLength(Stack
11、s) /求棧的長度 return s.top - s.base;typedef double QueueElemtype;typedef char QueueOperatorValue;typedef struct QueueNode /定義隊列結(jié)構(gòu)體 QueueElemtype data; QueueOperatorValue operator; struct QueueNode* next; int flag;QueueNode,*QueueNodePtr;typedef struct Queue QueueNodePtr front; QueueNodePtr rear;Queue;St
12、atus QueueInit(Queue* q) /隊列初始化 q-front = (QueueNodePtr)malloc(sizeof(QueueNode); if( !q-front ) return ERROR; q-rear = q-front; q-rear-next = NULL; return OK;Status QueueInsert(Queue* q,QueueElemtype value) /隊列插入 QueueNodePtr new; new = (QueueNodePtr)malloc(sizeof(QueueNode); if( !new ) return ERRO
13、R; new-data = value; new-flag = 1; new-next = NULL; q-rear-next = new; q-rear = new; return OK;Status QueueInsert_operatorValue(Queue* q,QueueOperatorValue value) QueueNodePtr new; new = (QueueNodePtr)malloc(sizeof(QueueNode); if( !new ) return ERROR; new-operator = value; new-flag = 0; new-next = N
14、ULL; q-rear-next = new; q-rear = new; return OK;/利用棧將中綴表達(dá)式轉(zhuǎn)化為后綴表達(dá)式:Status Infix2Postfix(Queue* q) Stack s; StackInit(&s); char c,e; char bufferDigit10; int i = 0; double longDigit; printf(n); printf(n); printf(n); printf( n); printf(n); printf( * 請輸入表達(dá)式 *n); printf( * 結(jié)束符號為# *n); scanf(%c, &c); whil
15、e( # != c) while( c = 0 | . = c ) bufferDigiti+ = c; bufferDigiti = 0; scanf(%c, &c); if(!(c = 0 ) | . = c ) longDigit = atof(bufferDigit); QueueInsert(q,longDigit); i = 0; if( ( = c | * = c | / = c ) if(c=/|c=*) Pop(&s, &e); if(e=/|e=*) QueueInsert_operatorValue(q, e); if(e=+|e=-) Push(&s,e); Push(
16、&s, c); else if( + = c | - = c ) if( !StackLength(s) ) Push(&s, c); else Pop(&s, &e); while( ( != e ) QueueInsert_operatorValue(q, e); if( StackLength(s) = 0 ) break; else Pop(&s, &e); if( ( = e ) Push(&s, e); Push(&s, c); else if( ) = c ) Pop(&s, &e); while( ( != e ) QueueInsert_operatorValue(q, e)
17、; Pop(&s, &e); else if( # = c) break; else printf(input ERROR!n); return ERROR; scanf(%c, &c); while(StackLength(s) Pop(&s, &e); QueueInsert_operatorValue(q, e); QueueInsert_operatorValue(q,#); return OK;Status ShowQueue(Queue q) printf(The Reverse Polish Notation is:); if(q.front = q.rear) printf(Q
18、ueue Empty); return ERROR; QueueNodePtr p = q.front-next; while(p != q.rear) if(p-flag) printf(%g , p-data); else printf(%c , p-operator); p = p-next; printf(n); return OK;int main() Queue q; QueueInit(&q); Infix2Postfix(&q); ShowQueue(q); return 0;7. 個人總結(jié)這個課程設(shè)計為期一周,在每一次的課程設(shè)計都給我很大的收獲,至少是能徹底的把思想給明白,首先,在寫這個課程設(shè)計之前,一直都
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)間租賃辦公場地協(xié)議
- 健康體檢預(yù)約與服務(wù)協(xié)議
- 汽車應(yīng)急燈行業(yè)相關(guān)投資計劃提議范本
- 代理公司記賬協(xié)議書
- 農(nóng)村畜牧養(yǎng)殖技術(shù)支持合作合同
- 簡述治愈的根本任務(wù)和主要內(nèi)容
- 行政管理學(xué)案例分析
- 特種加工機床相關(guān)項目投資計劃書范本
- 體育賽事組織與策劃實施計劃
- 電壓力煲相關(guān)項目投資計劃書范本
- 日常采購維修合同范本
- 企業(yè)員工職務(wù)犯罪預(yù)防
- (2025春新教材)部編版七年級語文下冊全冊教案
- 5《水污染》教學(xué)設(shè)計-2023-2024學(xué)年科學(xué)六年級下冊冀人版
- 2025年安徽電氣工程職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024 河北公務(wù)員考試(筆試、省直、A類、C類)4套真題及答案
- 統(tǒng)編版歷史 選擇性必修二第12課 《水陸交通的變遷》課件(共27張)
- 幼兒園開學(xué)教職工安全教育培訓(xùn)
- 小學(xué)生雙擁活動國防教育
- 《得勝的基督新婦》課件
- 煙囪拆除工程施工方案設(shè)計及安全措施
評論
0/150
提交評論