字尾表示式求值

2022-08-02 00:09:11 字數 1741 閱讀 9697

#include#include

#include

//鏈棧

typedef struct

node node;

typedef

struct

stack stack;

//佇列

typedef struct

queuenode queuenode;

typedef

struct

queue queue;

//初始化棧

stack*initstack()

//判斷棧是否為空

int stackempty(stack *s)

//建立節點,入棧時用

node *makenode(char *data)

//入棧

void push(char *item, stack *s)

//出棧

void pop(char *item, stack *s) }//

建立鏈佇列的節點

queuenode* makequeuenode(char *item)

//初始化佇列

queue*initqueue()

//佇列是否空

int queueempty(queue *q)

//入隊操作

queuenode *pnode =makequeuenode(item);

if(queueempty(q))

else}//

出隊void serve(char *item, queue *q)

//判斷運算子優先順序

int priority(char

opr) }//

計算void caculate(queue *q)

sprintf(num, "%f

", fa); //

將數字再轉成字元

push(num, stack_num);}}

pop(num, stack_num);

printf(

"結果是:\n%s

", num);}//

遍歷佇列

void printqueue(queue *q)

}}//

遍歷棧void printstack(stack *s)

}}int

main()

if(isnum)

else

//是操作符的話

push(temp, stack_opr);

break

;

case')

':while (stack_opr->top->item[0] != '('

)

pop(opr, stack_opr);

break

; }

}//printstack(stack_opr);

//printqueue(queue_exp);

}

while (!stackempty(stack_opr)) //

將表示式剩下的入佇列

caculate(queue_exp);

//計算字尾表示式

//printstack(stack_opr);

//printqueue(queue_exp);

system(

"pause");

}

字尾表示式求值

字尾表示式求值過程中不需要考慮運算子的優先順序,只需要對該表示式中的每乙個元素進行判斷,若為運算元則將其儲存在乙個陣列裡 入棧 若為運算子則取出前面的兩個運算元 彈棧 並運算,並將運算結果放回該陣列 入棧 最終陣列的最後乙個元素 棧頂元素 即為該表示式的運算結果.如 字尾表示式 23 等價於中綴表示...

字尾表示式求值

題目描述 為了便於處理表示式,常常將普通表示式 稱為中綴表示 轉換為字尾sqstack 順序棧的初始化 status initstack sqstack s 順序棧的入棧 status push sqstack s,selemtype e 演算法3.3 順序棧的出棧 status pop sqsta...

字尾表示式求值

根據 逆波蘭表示法,求表示式的值。有效的算符包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 整數除法只保留整數部分。給定逆波蘭表示式總是有效的。換句話說,表示式總會得出有效數值且不存在除數為 0 的情況。示例 1 輸入 tokens 2 1 3 輸出 9 解釋 該算式轉化為常見的中綴...