6 棧 中綴轉字尾

2021-10-03 14:17:22 字數 2912 閱讀 3389

概念

棧的基本操作包括建立棧、銷毀棧、出棧、入棧、獲取棧頂元素、獲取棧的大小、清空棧。

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