如果是數字,則直接輸出
如果是左括號,直接入棧
如果是右括號,出棧,直到遇到第乙個左括號
如果是*或者/, 出棧,直到棧空或者左括號或者遇到+ -,當前符號入棧
如果是+或者-,出棧,直到棧空或者左括號,當前符號入棧
如果中綴表示式走完,將棧中的內容全部彈出
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 右括號...