首先對棧的編寫
本程式所需要的標頭檔案#define initszie 10
typedef
int elemtype;
typedef
struct stack
stack;
以下是對編寫中綴轉字尾函式時需要的其他功能函式的書寫#include
#include
#include
#include
void
initstack
(stack *st)
//初始化棧
(stack *st)
//申請新空間 擴容
free
(st->data)
; st->data=new_space;
st->size*=2
;return true;
}bool isfull
(stack *st)
//判滿
bool push
(stack *st,elemtype val)
//增加資料
} st->data[st->top++
]=val;
return true;
}bool isempty
(stack *st)
//判空
bool pop
(stack *st)
//取出資料
st->top--
;return true;
}//沒有通過top返回值返回棧頂元素,而是通過乙個引數將棧頂元素返回
bool top
(stack *st,elemtype *val)
void
destroystack
(stack *st)
//銷毀
最後書寫主函式,編譯執行程式。void
infixtosuffix
(const
char
*str)if(
isdigit
(*str)
)//如果是數字,則直接輸出
}elseif(
*str==
'(')
//如果是左括號,則直接入棧
elseif(
*str==
')')
//如果是右括號,出棧並輸出,直到遇到第乙個左括號
}elseif(
*str==
'+'||
*str==
'-')
//如果是+或者-,直接出棧並輸出,直到棧空或者左括號(不出),然後將當前符號入棧
push
(&st);}
elseif(
*str==
'*'||
*str==
'/')
//如果是*或者/,直接出棧,直到棧空或者左括號(不出),或者+,-(不出),然後將當前符號入棧
push
(&st,
*str);}
else
//若以上的條件都不符合,則列印出錯誤
str++;}
while(!
isempty
(&st)
)//中綴表示式遍歷結束,將棧中的所有元素全部彈出並輸出
printf
("\n");
}
執行結果如圖所示int
main()

棧應用 中綴轉字尾 字尾計算
中綴表示式 infix expression 即 平時生活中大家對於算式的書寫格式 eg 6 5 2 3 8 3 字尾表示式 post expression 即 把數字和運算子分開,把運算子的優先順序運算內涵到字尾式的數字和運算子的順序 中 故其 優點就是,沒有必要知道任何優先的規則 乙個運算子只對...
中綴轉字尾(棧)
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...
棧的應用之中綴轉字尾
include stdio.h include stdlib.h include string.h include linkstack.h int isnumber char c int isoperator char c int isleft char c int isright char c c...