




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)三 基于棧結(jié)構(gòu)的中綴表達(dá)式求值班級(jí):計(jì)科131、問(wèn)題描述從鍵盤(pán)輸入一中綴表達(dá)式字符串,讀字符串,利用棧結(jié)構(gòu)實(shí)現(xiàn)表達(dá)式求值。2、輸入與輸出 輸入:從鍵盤(pán)中綴表達(dá)式如: 325×(64)輸出:計(jì)算結(jié)果423、需求分析1.定義兩個(gè)棧結(jié)構(gòu),數(shù)棧用于存放表達(dá)式中的數(shù),符號(hào)棧用于存放表達(dá)式中的符號(hào),實(shí)現(xiàn)棧的運(yùn)算2.在讀數(shù)的時(shí)候考慮多位運(yùn)算 3.實(shí)現(xiàn)表達(dá)式求值4、開(kāi)發(fā)工具與環(huán)境硬件設(shè)備:微型計(jì)算機(jī)系統(tǒng)軟件環(huán)境:操作系統(tǒng)Windows,開(kāi)發(fā)工具VC6.0等等5、概要設(shè)計(jì)1.結(jié)構(gòu)定義 typedef struct /* 運(yùn)算符棧 */ char *base,*top; int stacksize;
2、 SqStack; typedef struct /* 運(yùn)算數(shù)棧 */ int *base,*top; int stacksize; SqStack1;int priority77='>', '>', '<', '<', '<', '>', '>', / + '>', '>', '<', '<', '<', '>'
3、;, '>', / - '>', '>', '>', '>', '<', '>', '>', / * '>', '>', '>', '>', '<', '>', '>', / / '<', '<', '<'
4、;, '<', '<', '=', , / ( '>', '>', '>', '>', ' ', '>', '>', / ) '<', '<', '<', '<', '<', ' ', '=' / #; /*用于比較符號(hào)優(yōu)先級(jí)的全局二維數(shù)組*/2各函
5、數(shù)模塊void InitStack(SqStack *s);操作結(jié)果:初始化運(yùn)算符棧。void InitStack1(SqStack *s);操作結(jié)果:初始化運(yùn)算數(shù)棧。void InitStack1(SqStack *s);操作結(jié)果:初始化運(yùn)算符棧。char GetTop(SqStack s)操作結(jié)果:若棧不空,則返回運(yùn)算符棧棧頂元素,否則返回ERROR。int GetTop1(SqStack1 s)操作結(jié)果:若棧不空,則用,否則返回ERROR。void PushS(SqStack &s, char e)操作結(jié)果:插入元素e為新的運(yùn)算符的棧頂。void PushS1(SqStack1
6、&s, int e)操作結(jié)果:插入元素e為新的運(yùn)算數(shù)棧頂。int pop(SqStack &s, char &e)操作結(jié)果:若運(yùn)算符棧不空,則刪除s的棧頂元素,用e返回其值,并返回OK,否則返回ERROR。int pop1(SqStack1 &s, int &e)操作結(jié)果:若運(yùn)算數(shù)棧不空,則刪除s的棧頂元素,用e返回其值,并返回OK,否則返回ERROR。6、程序清單#include<iostream>using namespace std;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10
7、#define ERROR 0#define OK 1typedef struct /* 運(yùn)算符棧 */char *base, *top;int stacksize;SqStack;typedef struct /* 運(yùn)算數(shù)棧 */int *base, *top;int stacksize;SqStack1;int priority77 = '>', '>', '<', '<', '<', '>', '>' ,/ + 0 '>&
8、#39;, '>', '<', '<', '<', '>', '>' ,/ - 1 '>', '>', '>', '>', '<', '>', '>' ,/ * 2 '>', '>', '>', '>', '<&
9、#39;, '>', '>' ,/ / 3 '<', '<', '<', '<', '<', '=', ,/ ( 4 '>', '>', '>', '>', ' ', '>', '>' ,/ ) 5 '<', '<', '<
10、', '<', '<', ' ', '=' / # 6;/*用于比較符號(hào)優(yōu)先級(jí)的全局二維數(shù)組*/void InitStack(SqStack &s)/初始化運(yùn)算符棧s.base = (char *)malloc(STACK_INIT_SIZE*sizeof(char);if (!s.base)exit(OVERFLOW);s.top = s.base;s.stacksize = STACK_INIT_SIZE;void InitStack1(SqStack1 &s)/初始化運(yùn)算數(shù)棧s.base
11、= (int *)malloc(STACK_INIT_SIZE*sizeof(int);if (!s.base)exit(OVERFLOW);s.top = s.base;s.stacksize = STACK_INIT_SIZE;void PushS(SqStack &s, char e)/插入元素e為新的運(yùn)算符棧的棧頂if (s.top - s.base >= s.stacksize)s.base=(char *)realloc(s.base, (s.stacksize + STACKINCREMENT)*sizeof(char);if (!s.base)exit(OVERF
12、LOW);s.top = s.base + s.stacksize;/指向棧頂s.stacksize += STACKINCREMENT;*s.top+ = e;void PushS1(SqStack1 &s, int e)/插入元素e為新的運(yùn)算數(shù)的棧頂if (s.top - s.base >= s.stacksize)s.base = (int *)realloc(s.base, (s.stacksize + STACKINCREMENT)*sizeof(int);if (!s.base)exit(OVERFLOW);s.top = s.base + s.stacksize;/
13、指向棧頂s.stacksize += STACKINCREMENT;*s.top+ = e;/Pushchar GetTop(SqStack s)/若棧不空,則返回s的棧頂元素,否則返回ERRORif (s.top = s.base) return ERROR;return *(s.top - 1);int GetTop1(SqStack1 s)/若棧不空,則用e返回s的棧頂元素,否則返回ERRORif (s.top = s.base) return ERROR;return *(s.top - 1);int pop(SqStack &s, char &e)/若棧不空,則刪除s
14、的棧頂元素,用e返回其值if (s.top = s.base) return ERROR;e = *-s.top;return OK;int pop1(SqStack1 &s, int &e)/若棧不空,則刪除s的棧頂元素,用e返回其值if (s.top = s.base) return ERROR;e = *-s.top;return OK;int number(char a)/將運(yùn)算符的位置轉(zhuǎn)化為數(shù)字以便于在二維數(shù)組中找到優(yōu)先級(jí)switch (a)case '+': return 0;break;case '-': return 1;brea
15、k;case '*': return 2;break;case '/': return 3;break;case '(': return 4;break;case ')': return 5;break;case '#': return 6;break;default:return ERROR;char precede(char a, char b)int i, j;i = number(a);j = number(b);return priorityij;int Operate(int a, char c, in
16、t b)/計(jì)算表達(dá)式結(jié)果并返回其值switch (c)case'+':return a + b;case'-':return a - b;case'*':return a*b;case'/':return a / b; default: return ERROR;int input(SqStack &s, SqStack1 &s1)/完成表達(dá)式的輸入與計(jì)算char c1, c2;char temp;int e, a, b;c1 = getchar();while (c1 != '#' | GetTo
17、p(s) != '#')if (c1 >= '0'&&c1 <= '9')c2 = getchar();if (c2 != '#'&&c2 >= '0'&&c2 <= '9')/c2為數(shù)字e = (int)c1 - 48) * 10 + (int)c2 - 48;PushS1(s1, e);/內(nèi)層ifelse/c1為運(yùn)算數(shù),c2為運(yùn)算符 else1PushS1(s1, (int)c1 - 48);/將運(yùn)算數(shù)入棧again:if
18、(c2 != '#' | GetTop(s) != '#')switch (precede(GetTop(s), c2)case'<':/棧頂元素優(yōu)先權(quán)低PushS(s, c2);/c1 = getchar();break;case'=':/脫括號(hào)并接收下一個(gè)字符pop(s, c2);/c1 = getchar();break;case'>':/退棧并將運(yùn)算結(jié)果入棧pop(s, temp);pop1(s1, b);pop1(s1, a);PushS1(s1, Operate(a, temp, b);goto again;/switch/ifelsegoto exit;/計(jì)算完成晚會(huì)結(jié)果/內(nèi)層else/ifelseaga:if (c1 != '#' | GetTop(s) != '#')switch (precede(GetTop(s), c1)case'<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- DZ/T 0196.7-1997測(cè)井儀通用技術(shù)條件聲波測(cè)井儀
- CJ/T 90-1999真空吸污車(chē)性能試驗(yàn)方法
- CJ/T 427-2013超高分子量聚乙烯膜片復(fù)合管
- CJ/T 358-2010非開(kāi)挖鋪設(shè)用高密度聚乙烯排水管
- CJ/T 213-2005城市市政綜合監(jiān)管信息系統(tǒng)單元網(wǎng)格劃分與編碼規(guī)則
- CJ/T 192-2017內(nèi)襯不銹鋼復(fù)合鋼管
- CJ/T 189-2007鋼絲網(wǎng)骨架塑料(聚乙烯)復(fù)合管材及管件
- CJ/T 163-2015導(dǎo)流型容積式水加熱器和半容積式水加熱器
- CJ 42-1999工業(yè)用水考核指標(biāo)及計(jì)算方法
- 2025年軟件評(píng)測(cè)師面臨的技術(shù)挑戰(zhàn)試題及答案
- 學(xué)生課業(yè)負(fù)擔(dān)監(jiān)測(cè)、公告、舉報(bào)、問(wèn)責(zé)制度
- 2024北京大興區(qū)高一(下)期末數(shù)學(xué)試題及答案
- PLCS7-300課后習(xí)題答案
- 肘管綜合癥患者護(hù)理查房
- 2023年演出經(jīng)紀(jì)人考試歷年真題附答案(鞏固)
- 媒介與性別文化傳播智慧樹(shù)知到期末考試答案章節(jié)答案2024年浙江工業(yè)大學(xué)
- 工作場(chǎng)所職業(yè)病危害作業(yè)分級(jí)第1部分:生產(chǎn)性粉塵
- 24春國(guó)家開(kāi)放大學(xué)《學(xué)前兒童美術(shù)教育活動(dòng)指導(dǎo)》期末大作業(yè)參考答案
- 頭孢他啶的代謝研究
- 智能輪椅項(xiàng)目融資方案
- 2024年江蘇武進(jìn)經(jīng)濟(jì)發(fā)展集團(tuán)招聘筆試參考題庫(kù)含答案解析
評(píng)論
0/150
提交評(píng)論