注:實驗用書為 資料結構 c語言版 第2版,人民郵電出版社出版。
實驗題目:學生管理系統的設計與實現
實驗環境:visual c++ 6.0或其他c++環境
一、實驗目的
1、掌握棧的定義及實現;
2、掌握利用棧求解算術表示式的方法。
二、實驗內容
通過修改完善教材中的演算法3.4,利用棧來實現算術表示式求值的演算法。對演算法3.4中呼叫的幾個函式要給出其實現過程:
1、函式in(c):判斷c是否為運算子;
2、函式precede(t1,t2):判斷運算子t1和t2的優先順序;
3、函式operate(a,theta,b):對a和b進行二元運算theta。
4、程式執行時,輸入合法的算術表示式(中間值及最終結果要在0~9之間,可以包括加減乘除和括號),便可輸出相應的計算結果。如下圖所示。
三、實驗吐槽
此**有很多缺陷,比如只能整數運算。而且單個運算最多到127。即數字執行結果最好在100以內。但可以實現10*10#等運算,這是因為演算法的儲存環境是char,最大256,而『0』這個ascii值又是48,對運算有所限制,但突破了之前的只能一位數字運算。
四、**
**主檔案(calculator.cpp):
**標頭檔案(stack.h):#include
#include "stack.h"
#include
using
namespace
std;
bool in(char e)//判斷讀入字元是否為運算子
char precede(char a,char b)//比較運算子的優先順序
else
if(a=='*'||a=='/')
else
if(a=='(')
else
if(a==')')
else
if(a=='#')
return f;
}int operate(int i,char theta,int j)//計算a(theta)b結果
return result;
}int read_c(int *n)
dowhile(!in(c)); //如果下乙個字元是數字,進入下一輪迴圈
ungetc(c,stdin);//新讀入的字元不是數字,可能是運算子,為了不影響下次讀入,把該字元放回到輸入緩衝區
return0;}
int evaluateexpression()
else}}
return gettop(opnd);
}int main()
另外提供一種我第一次實踐的方法,這裡的算數表示式只能計算1位數值。#ifndef stack_h_included
#define stack_h_included
#endif // stack_h_included
#define maxsize 100
#include
using namespace std;
typedef char selemtype;
typedef struct
sqstack;
void initstack(sqstack &s)
bool push(sqstack &s,char e)
bool pop(sqstack &s,char &e)
char gettop(sqstack s)
五、流程圖#include
#include "stack.h"
#include
using
namespace
std;
bool in(char e)//判斷讀入字元是否為運算子
char precede(char a,char b)//比較運算子的優先順序
else
if(a=='*'||a=='/')
else
if(a=='(')
else
if(a==')')
else
if(a=='#')
return f;
}char operate(char a,char theta,char b)//計算a(theta)b結果
int evaluateexpression()
else}}
return gettop(opnd)-'0';
}int main()

棧的應用 算術表示式求值
選擇棧作為資料結構,所以所有操作都要圍繞棧的特點來進行。因為先入棧而被壓在下面的意味著要後處理,所以優先順序低的不能壓著優先順序高的而入棧。對於同級的操作符,因為要按照從左往右的運算規則,所以也不 能壓著同級的操作符而入棧。簡單來說,與棧頂的操作符比較,優先順序高的則入棧,否則操作符出棧作相應運 算...
棧的應用 算術表示式求值
算術表示式中可以包含 這6個運算子,要計算的表示式以字串行的形式在程式執行時輸入。為了便於實現,規定 1 每個表示式均以字元 開始,以 號結束,例如,23 13 8 76 100 表示式中不能出現數字和運算子外的其它字元 空格也不行 2 表示式中的運算數只能是非負整數 3 輸入的表示式都是合法的。編...
棧的應用之算術表示式求值
1 2 3 4 此算術表示式由一些操作符和運算元組成。其中,操作符有 等,運算元有 1 2 3 等。對於操作符來說,其運算是有優先順序的。比如,上述表示式中,3 4應該先進行操作,將得到的結果再與2相乘。算符間的優先關係如下 運算子 根據算符間的優先關係表,使用兩個棧。乙個棧為optr,儲存運算子,...