概念
棧的基本操作包括建立棧、銷毀棧、出棧、入棧、獲取棧頂元素、獲取棧的大小、清空棧。
stack.h
#pragma once
typedef
int elemtype;
#define stacksize 10
typedef
struct _stack
sqstack,
*psqstack;
bool
initstack
(psqstack st)
;bool
isempty
(psqstack st)
;void
destroystack
(psqstack st)
;void
clearstack
(psqstack st)
;bool
gettop
(psqstack st, elemtype *val)
;bool
push
(psqstack st, elemtype val)
;// 入棧
bool
pop(psqstack st)
;// 出棧
///*
template class stack
~stack()
bool push(type val)
bool pop()
bool gettop(type &val)
private:
bool isempty(){}
bool isfull(){}
private:
type *data;
int top;
};*/
stack.cpp
#include
"stack.h"
#include
#include
#include
///bool
isempty
(psqstack st)
static
bool
isfull
(psqstack st)
///bool
initstack
(psqstack st)
void
destroystack
(psqstack st)
void
clearstack
(psqstack st)
bool
gettop
(psqstack st, elemtype *val)
bool
push
(psqstack st, elemtype val)
// 入棧
bool
pop(psqstack st)
// 出棧
中綴表示式轉字尾表示式:
1.遇到數字直接輸出
2.遇到左括號"("直接入棧
3.遇到 * 或者 /,開始出棧,直到棧為空或者遇到「(」或者遇到 + -符號
4.如果遇到+或者-,開始出棧,直到棧空。或者遇到左括號就不出棧了,將當前符號入棧。
5.如果遇到右括號,開始出棧直到遇到左括號。
6.如果字串訪問完,再將棧出空。
const
char
*str =
"9+(3-1)*3+10/2"
;//9 3 1 -3*+10 2/+
// const char *str2 = "9*3/2*6";
//9 3 *2 /6
比較方便的版本:
中綴轉字尾c++**實現(比較方便)
1.遇到運算元:新增到字尾表示式中或直接輸出
2.棧空時:遇到運算子,直接入棧
3.遇到左括號:將其入棧
4.遇到右括號:執行出棧操作,輸出到字尾表示式,直到彈出的是左括號
注意:左括號不輸出到字尾表示式
5.遇到其他運算子:彈出所有優先順序大於或等於該運算子的棧頂元素,然後將該運算子入棧
6.將棧中剩餘內容依次彈出字尾表示式
#include
"stack.h"
#include
#include
#include
intmain()
}if(str[i]
=='('
)// 遇到左括號直接入棧
else
if(str[i]
=='*'
|| str[i]
=='/'
)// 遇到*或/,開始出棧,直到遇到左括號或者+-或者棧空
pop(
&st)
;printf
("%c "
, val);}
push
(&st, str[i]);
}else
if(str[i]
==')'
)//遇到右括號,出棧,直到遇到左括號
printf
("%c "
, val);}
}else
//遇到+或者- 直接出棧 直到棧空或者遇到左括號
printf
("%c "
, val)
;pop
(&st);}
push
(&st, str[i]);
} i++;}
while(!
isempty
(&st)
)// 將棧中剩餘的符號輸出
printf
("\n");
}
中綴轉字尾(棧)
字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...
棧應用 中綴轉字尾 字尾計算
中綴表示式 infix expression 即 平時生活中大家對於算式的書寫格式 eg 6 5 2 3 8 3 字尾表示式 post expression 即 把數字和運算子分開,把運算子的優先順序運算內涵到字尾式的數字和運算子的順序 中 故其 優點就是,沒有必要知道任何優先的規則 乙個運算子只對...
中綴轉字尾
include using namespace std define max 30 struct stack void initstack stack s char pop stack s void push stack s,char c char top stack s int copare ch...