c語言 堆疊計算字尾表示式 包含測試用例

2021-10-04 08:19:34 字數 1771 閱讀 9883

本實驗取材於浙江大學《資料結構》,計算字尾表示式,關鍵在於理解堆疊的工作順序

//堆疊的應用案例--表示式求值

//表示式求值的基本步數

//1當讀入的是乙個運算數時,把它被壓入棧中;

//2當讀入的是乙個運算子時,就從堆疊中彈出適當數量的運算數

//對該運算進行計算,計算結果再壓回到棧中。

//處理完整個字尾表達時之後,堆疊頂上的元素就是表達時的結果值

下面利用堆疊的順序儲存進行運算!

#include

#include

#include

#define maxop 100

//運算元序列可能的最大長度

#define infinity 1e9

//代表正無窮

#define error -1

typedef

double elementtype;

//將堆疊的元素型別具體化

//型別依次對應運算子、運算子、字串結尾

typedef

enum

type;

typedef

int position;

typedef

struct snode *ptrtostack;

struct snode

;typedef ptrtostack stack;

stack createstack

(int maxsize)

;//生成空堆疊,其最大長度為maxsize

intisfull

(stack s)

;//判斷堆疊s是否已滿

intpush

(stack s,elementtype x)

;//將元素item壓入堆疊

intisempty

(stack s)

;//判斷堆疊s是否為空

elementtype pop

(stack s)

;//刪除並返回棧頂元素

stack createstack

(int maxsize)

intisfull

(stack s)

intpush

(stack ptrs,elementtype x)

else

}int

isempty

(stack s)

elementtype pop

(stack ptrs)

else

}type getop

(char

*expr,

int*start,

char

*str)

elementtype postfixexp

(char

*expr)

break

;default

:printf

("fault unknown fault%s\n"

,str)

; op2 = infinity;

break;}

if(op2>=infinity)

break;}

}if(op2!isempty

(s))

op2=

pop(s)

;else

op2 = infinity;

free

(s);

return op2;

}int

main()

堆疊實現中綴表示式轉字尾表示式及計算表示式的值

算術表示式有字首表示法 中綴表示法和字尾表示法等形式。算術表示式我們的普通表示式,字尾表示式不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,例如 中綴表示式 3 4 5 6,其字尾表示式為34 5 6 輸入格式說明 輸入在一行內給出不超過30個字元的字首表示...

計算字尾表示式 C語言實現

程式相對簡單易懂,執行程式,在命令列中輸入 123 注意 由於輸入字元,以 結束 輸出 5.000000 include include typedef struct stack 建立乙個棧,100為maxsize,define無法定義 void createstack stack s 棧頂指標 f...

字尾表示式計算

演算法 1.遍歷字尾表示式中的數字和符號 對於數字 進棧 對於符號 從棧中彈出右運算元 從棧中彈出左運算元 根據符號進行運算 將運算結果壓入棧中 2.遍歷結束 棧中的唯一數字為計算結果 include include linkstack.h int isnumber char c int isope...