[問題描述]
利用棧實現算術表示式的求值。可以簡單一些,假設表示式中含有一位整數,以及+、-、*、/、(、)。但不受此限制。(難易程度:中)
[實驗目的]
1、掌握棧的應用。
2、掌握算符優先表示式求值的演算法。
3、掌握字串處理和數值的轉換。
[實驗內容及要求]
1、表示式以字串形式輸入,並以『#』開始和結束(『#』也作為演算法來處理)。如輸入:#6+3*(9-7)-8/2#
[測試資料]
1、#6+3*(9-7)-8/2#
2、#(8-2)/(3-1)*(9-6)#
3、#5+(7-3)*6#
#include
using
namespace
std;
const
int size=10; //size為順序棧的最大儲存大小
template
class seqstack //seqstack類
~seqstack(){}
void push(t x); //入順序棧
t pop(); //出順序棧
t gettop(); //取棧頂
};template
void seqstack::push(t x) //入順序棧
template
t seqstack::pop() //出順序棧
template
t seqstack::gettop()//取棧頂
seqstack opnd; //運算元
seqstack optr; //運算子
int precede(char a,char b) //求運算子a,b的優先順序
; int i=-1;
int j=-1;
switch(a)
switch(b)
if(i>=0&&j>=0)
return prior[i][j]; //返回優先順序,-1為<,0為=,1為》
else
return -2;
}int operate(int a,char alpha,int b) //進行a和b的一種運算
return ans;
}void calvalue() //計算表示式的值
else
//如果是運算子的話,需要判斷優先順序}}
cout
<<"結果是:"
}#include
#include"seqstack.h"
using
namespace
std;
int main()
資料結構 棧 (十) 使用棧實現佇列
使用兩個棧模擬佇列,比如輸入 1 2 3 4,則要求輸出仍是 1 2 3 4 1 有兩個棧,乙個用來存放入隊資料 資料棧 乙個用來輔助 輔助棧 實現資料出隊。2 資料新增時,會依次壓人棧,取資料時會取棧頂元素,但要模擬佇列的先進先出,所以就得取棧底元素,那麼輔助棧就派上用場了,把資料棧的元素依次彈出...
資料結構實驗 棧
掌握棧的結構特性及其棧的相關操作。要求實現棧的操作集。status initstack sqstack s status push sqstack s,selemtype e status pop sqstack s,selemtype e status gettop sqstack s,selem...
資料結構 棧 鍊錶實現
鍊錶實現的棧可以克服在程式執行時也無法估計棧容量大小的情況 棧中的元素是儲存在稱為節點的類中,每個節點都包含乙個資料域和乙個指標域 資料域儲存棧的值,指標域指示棧中下乙個值得位置 而棧類的資料成員是需要乙個指向棧頂的指標即可 類宣告如下 typedef int stackelement class ...