資料結構實驗十 利用棧實現算術表示式的求值

2021-08-15 12:21:17 字數 1400 閱讀 7714

[問題描述]

利用棧實現算術表示式的求值。可以簡單一些,假設表示式中含有一位整數,以及+、-、*、/、(、)。但不受此限制。(難易程度:中)

[實驗目的]

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 ...