棧的應用 中綴表示式轉字尾表示式

2021-10-25 22:32:47 字數 2952 閱讀 2003

如果是數字,則直接輸出

如果是左括號,直接入棧

如果是右括號,出棧,直到遇到第乙個左括號

如果是*或者/, 出棧,直到棧空或者左括號或者遇到+ -,當前符號入棧

如果是+或者-,出棧,直到棧空或者左括號,當前符號入棧

如果中綴表示式走完,將棧中的內容全部彈出

1.如果是數字,直接輸出:

**如下:

if

(isdigit

(infix[i]))

}

2.如果是左括號,直接入棧

**如下:

if

(infix[i]

=='('

)bool push

(stack *st, elemtype value)

}//將value的值賦給棧頂元素

st->low[st->top++

]= value;

return true;

}

3.如果是右括號,出棧,直到遇到第乙個左括號

if

(infix[i]

==')'

)static

void

dealrightpare

(stack *st)

printf

("%c "

, value);}

if(!flag)

}

3.如果是 * 或者 / , 出棧,直到棧空或者左括號或者遇到 + 或者 - ,當前符號入棧

if

(infix[i]

=='*'

|| infix[i]

=='/'

)static

void

dealmultidiv

(stack *st,

char ch)

push

(st, ch)

;}

4.如果是 + 或者 - ,出棧,直到棧空或者左括號,當前符號入棧

else

if(infix[i]

=='+'

|| infix[i]

=='-'

)static

void

dealaddsub

(stack *st,

char ch)

push

(st, ch)

;}

#include

#include

#include

#include

#define initsize 20

typedef

char elemtype;

typedef

struct stack

stack;

static bool full

(stack *st)

//擴容

(stack* st)

free

(st->low)

; new_space = st->low;

st->size *=2

;return true;

}//棧的初始化

void

initstack

(stack *st,

int init_size)

bool empty

(stack *st)

bool push

(stack *st, elemtype value)

}//將value的值賦給棧頂元素

st->low[st->top++

]= value;

return true;

}//獲取棧頂指標

bool top

(stack *st, elemtype *value)

bool pop

(stack *st)

static

void

clearstack

(stack *st)

//printf

("\n");

}static

void

dealrightpare

(stack *st)

printf

("%c "

, value);}

if(!flag)

}void

destroystack

(stack *st)

static

void

dealaddsub

(stack *st,

char ch)

push

(st, ch);}

static

void

dealmultidiv

(stack *st,

char ch)

push

(st, ch);}

void

infixtosuffix

(char

*infix)if(

isdigit

(infix[i]))

}else

if(infix[i]

=='('

)else

if(infix[i]

==')'

)else

if(infix[i]

=='+'

|| infix[i]

=='-'

)else

if(infix[i]

=='*'

|| infix[i]

=='/'

)else

i++;}

clearstack

(&st)

;destroystack

(&st);}

intmain()

棧的應用 中綴表示式轉字尾表示式

有關棧api詳情請參看我的另一篇博文 棧的鏈式儲存 api實現 例項 5 4 5 4 1 2 3 1 2 3 8 3 1 5 8 3 1 5 中綴表示式符合人類的閱讀和思維習慣 字尾表示式符合計算機的 運算習慣 中綴轉字尾演算法 遍歷中綴表示式中的數字和符號 對於數字 直接輸出 對於符號 左括號 進...

棧的應用 (中綴表示式 轉 字尾表示式)

中綴表示式 字尾表示式,都是用來呈現運算表示式的一種方式。標準表示式 4 5 6 7 中綴表示式,就是標準的表示式,即4 5 6 7 字尾表示式,符號在後的表示式,即4 5 6 7 中綴表示式轉字尾表示式的思想是 注意的是 只有 這5種符號才會入棧 1.讀到運算元時,立即輸出 2.讀到的是操作符,分...

棧的應用 中綴表示式轉字尾表示式

中綴轉字尾過程 1.對於數字 直接輸出 2.對於符號 2.1 左括號 進棧 2.2 運算符號 與棧頂符號進行優先順序比較,若棧頂符號優先順序低 此符號進棧 若棧頂符號優先順序不低 將棧頂符號彈出並輸出,之後進棧 若是乘除直接進棧 若是加減,與棧頂比較,若棧頂是乘除,直接輸出,否則進棧。2.3 右括號...