#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 解釋 該算式轉化為常見的中綴...