76 實現中綴轉字尾 對棧的應用

2021-10-11 18:41:03 字數 1943 閱讀 7503

首先對棧的編寫

#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...