版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一、實(shí)驗(yàn)?zāi)康谋敬螌?shí)驗(yàn)為了學(xué)習(xí)用基本的數(shù)據(jù)結(jié)構(gòu)解決實(shí)際應(yīng)用中的問題,將學(xué)習(xí)的理論知識(shí)應(yīng)用于實(shí)踐,增強(qiáng)解決實(shí)際問題的能力。學(xué)會(huì)利用棧結(jié)構(gòu),按照算術(shù)運(yùn)算優(yōu)先級(jí)順序,實(shí)現(xiàn)基本算術(shù)表達(dá)式的運(yùn)算過程。二、實(shí)驗(yàn)要求功能要求:要求使用堆棧實(shí)現(xiàn)算術(shù)表達(dá)式的求值功能。數(shù)據(jù)結(jié)構(gòu)要求:使用兩個(gè)工作棧,一個(gè)為optr,用于寄存運(yùn)算符;另一個(gè)為opnd,用于寄存操作數(shù)和運(yùn)算結(jié)構(gòu)。數(shù)據(jù)要求:輸入:操作數(shù)棧的數(shù)據(jù)為整型,運(yùn)算符棧的數(shù)據(jù)位字符型 輸出:整型數(shù)據(jù)三、設(shè)計(jì)實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):設(shè)置兩個(gè)棧,一個(gè)為操作數(shù)棧opnd,一個(gè)為運(yùn)算符棧optr。輸入的表達(dá)式,遇到如果是操作數(shù)就壓入到操作數(shù)堆棧中,如果是運(yùn)算符就將優(yōu)先級(jí)與當(dāng)前堆棧
2、運(yùn)算符的優(yōu)先級(jí)比較,誰的優(yōu)先級(jí)數(shù)大就壓入堆棧,否則將棧頂運(yùn)算符彈出來進(jìn)行運(yùn)算。程序流程設(shè)計(jì):定義鏈棧,判斷運(yùn)算符優(yōu)先級(jí),實(shí)現(xiàn)具體計(jì)算,錯(cuò)誤處理、算法流程:主功能程序代碼實(shí)現(xiàn):#include stdafx.h#include stdlib.h#include math.h#include string.h#include conio.h#include iostream.h#include float.hstruct optr /存放操作符的棧char * base;char* top;int size;struct opnd /存放操作數(shù)的棧 int* base;int* top;int s
3、ize;void initstack(struct optr* s)/申請(qǐng)操作符棧的空間及長度s-base = (char*)malloc(100*sizeof(char);s-top = s-base;s-size =100;void initstack(struct opnd* s)/申請(qǐng)操作數(shù)棧的空間及長度s-base = (int*)malloc(100*sizeof(int);s-top = s-base;s-size =100;struct optr* push(struct optr* stack , char opp)/插入操作符opp*stack-top = opp;stac
4、k-top+;return stack;struct opnd* push(struct opnd* stack , int num , int i)*stack-top = num;stack-top+;return stack;char gettop(struct optr* stack)/取棧頂元素return *(stack-top-1);int gettop(struct opnd * stack) /取棧頂元素return *(stack-top-1);char precede(char oldchar , char newchar)int oldint;int newint;sw
5、itch (oldchar)case +:oldint = 4;break;case -:oldint = 4;break;case *:oldint = 6;break;case /:oldint = 6;break;case (:oldint = 2;break;case ):oldint = 7;break;case =:oldint = 0;break;switch (newchar)case +:newint = 3;break;case -:newint = 3;break;case *:newint = 5;break;case /:newint = 5;break;case (
6、:newint = 7;break;case ):newint = 2;break;case =:newint = 0;break;if(oldint newint)return ; if(oldint newint)return ;if(oldint = newint)return =;int add(int a , int b)return (a+b);int minute(int a ,int b)return (a-b);int multiply (int a ,int b)return (a*b);int division (int a,int b)return (a/b);int
7、operate(int a , char theta ,int b)switch (theta)case +:return add(a,b);case -:return minute(a ,b);case *:return multiply(a,b);case /:return division(a,b);int main(int argc, char* argv)char a80; /建立一個(gè)字符串用來存放表達(dá)式char temp;int stringcount = 0;struct optr* stackoptr=(struct optr*)malloc(sizeof(optr);stru
8、ct opnd* stacknopnd=(struct opnd*)malloc(sizeof(opnd);printf(請(qǐng)輸入算數(shù)表達(dá)式); scanf(%s,a); initstack(stackoptr);stackopp = push(stackopnd,= );initstack(stackopnd);temp = astringcount;stringcount+;while(temp != = | gettop(stackopptr) != = )/如果不是等于號(hào)執(zhí)行下面的操作if(!in(temp)/將輸入字符轉(zhuǎn)化成數(shù)字,并入棧,然后加一int value = (int)tem
9、p-48;stacknum = push(stackoptr,value,0); coutgettop(stackopnd) ;temp = astringcount;stringcount= stringcount+1;elseswitch(precede(gettop(stackopnd),temp)case ;int a = (int)*(-stackoptr-top);coutgettop(stackopnd)top);char theta = *(-stackopnd-top);stackopnd = push(stackopnd,operate(b,theta,a),0);coutgettop(stackopnd)top-;temp = astringcount;stringcount+;break;printf(感謝您的使用:n);printf(n運(yùn)算結(jié)果=:%dn,gettop(stackopnd); return 0;四、實(shí)驗(yàn)結(jié)果輸入輸出結(jié)果 1. 輸入:5+2(7-4)=輸出:數(shù)據(jù)棧棧頂元素:3,7,2,7,5,3,15最后結(jié)果為1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《舞蹈教程》期末試卷
- 第1單元 中華人民共和國的成立與鞏固 測試卷-2021-2022學(xué)年部編版八年級(jí)歷史下冊(cè)
- 投影圖像邊緣畸變校正技術(shù)-洞察分析
- 圍絕經(jīng)期抑郁識(shí)別策略-洞察分析
- 用戶信任感知影響因素-洞察分析
- 虛擬現(xiàn)實(shí)與增強(qiáng)現(xiàn)實(shí)的技術(shù)發(fā)展-洞察分析
- 輿場治理機(jī)制創(chuàng)新-洞察分析
- 隧道防水結(jié)構(gòu)設(shè)計(jì)探討-洞察分析
- 信息技術(shù)驅(qū)動(dòng)下的組織變革-洞察分析
- 閱讀教學(xué)策略研究-洞察分析
- Lesson-1.-spring-festival(雙語課件-春節(jié))
- 追求“真實(shí)、樸實(shí)、扎實(shí)”的語文課堂
- 螺桿空壓機(jī)操作規(guī)程完整
- 702班素質(zhì)評(píng)價(jià)觀測學(xué)生填寫完成情況檢查
- 大學(xué)學(xué)院成績單(模板)
- 奧林燃燒器說明書(GP130-150H)
- 績效管理模塊-績效管理與績效考核制度
- 《工人工資發(fā)放承諾書范文 》
- 馬達(dá)加斯加 礦產(chǎn)和能源開發(fā)戰(zhàn)略
- 忘憂草(周華健)原版五線譜鋼琴譜正譜樂譜.docx
- 一年級(jí)必背古詩(拼音版)
評(píng)論
0/150
提交評(píng)論