本實驗取材於浙江大學《資料結構》,計算字尾表示式,關鍵在於理解堆疊的工作順序
//堆疊的應用案例--表示式求值
//表示式求值的基本步數
//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...