棧的應用 四則運算表示式求值

2022-04-12 00:43:24 字數 3129 閱讀 1829

中綴表示式:就是目前我們用到的計算表示式 如:「9+(3-1)*3+5/2」

字尾表示式:就是把運算子放置到數字的後面 如:"9 3 1 - 3 * + 5 2 / +"

中綴表示式 轉化為字尾表示式規則:

從走到有遍歷中綴表示式的數字和字元

若是數字輸出,即成為字尾表示式的一部分

若是符號則判斷其與棧頂符號的優先順序

是右括號或者優先順序低於棧頂符號(乘除優先於加減)則棧頂元素一次出棧並輸出

並將當前符號進棧

一直到最終輸出字尾表示式

字尾表示式如何用計算機得到結果:

從左到右遍歷表示式的每個數字和符號,

遇到數字就進棧,

遇到符號就將處於棧頂的兩個數字出棧,

進行運算,

運算結果進棧,

一直到最終結果

具體**如下:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

namespace

console_sizeyunsuanfu}}

//////

得到字尾表示式

///規則:從走到有遍歷中綴表示式的數字和字元

///若是數字輸出,即成為字尾表示式的一部分

///若是符號則判斷其與棧頂符號的優先順序

///是右括號或者優先順序低於棧頂符號(乘除優先於加減)則棧頂元素一次出棧並輸出

///並將當前符號進棧

///一直到最終輸出字尾表示式

/// ///

中綴表示式

///字尾表示式

static

string gethouzhuistr(string

zhongzhuistr)

else

else

houzhuistr +=str;

}continue

; }

//如果棧不是空那麼比較優先順序 優先順序大 與棧頂元素那麼入棧

if (!stack.isempty() &&isyouxian(zhongzhuistr[i].tostring(), stack.top.tostring()))

else

//如果優先順序小那麼出棧 直到遇到比其優先順序 大的元素

//將這個字元入棧

stack.push(zhongzhuistr[i]);}}

}}

//將所有棧中的元素 出棧 追加到 字尾表示式中

while (!stack.isempty())

return

houzhuistr;

}//////

得到計算的值

///規則:

///從左到右遍歷表示式的每個數字和符號,

///遇到數字就進棧,

///遇到符號就將處於棧頂的兩個數字出棧,

///進行運算,

///運算結果進棧,

///一直到最終結果

/// ///

字尾表示式

///結果 static

decimal getvalue(string

houzhuistr)

else

//不是數字那麼吧處於站頂端的兩個元素出棧,並運算得到結果

else

if (houzhuistr[i].tostring() == "-"

)

else

if (houzhuistr[i].tostring() == "*"

)

else

if (houzhuistr[i].tostring() == "/"

)

//將值儲存到棧中

stack.push(num3);}}

return

convert.todecimal(stack.pop().tostring());

}//////

判斷str1是否比str2優先

/// ///

//////

static

bool isyouxian(string str1, string

str2)

else

}//////

判斷是否為int型別

/// ///

///static

bool isint(string

str)

catch

return

true

; }

}//////

/// class

stack

public node nextnode

public node(object

o)

public

override

string

tostring()

}//////

指向棧頂元素

/// public node top

//////

指向棧頂元素的下乙個元素

/// public node bottom

//////

構造方法

/// public

stack()

//////

進棧

/// public

void push(object

data)

//////

出棧

/// ///

public

object

pop()

//////

棧空

/// ///

public

bool

isempty()

}}

天王蓋地虎**網:

四則運算表示式求值(棧的應用)

1.前 中 字尾表示式的轉換 首先需要明白三者之間的轉換 自然表示式轉換為前 中 字尾表示式,其實是很簡單的。首先將自然表示式按照優先順序順序,構造出與表示式相對應的二叉樹,然後對二叉樹進行前 中 字尾遍歷,即得到前 中 字尾表示式。舉例說明將自然表示式轉換成二叉樹 a b c d 根據表示式的優先...

棧的應用 四則運算表示式求值

1 字尾表示法定義 所有的符號都是在要運算數字的後面出現。如 9 3 1 3 10 2的字尾表示法應該是9 3 1 3 10 2 2 字尾表示式計算結果 規則 從左到右遍歷表示式的每個數字和符號,遇到數字就進棧,遇到是符號,就將處於棧頂的兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。以9...

棧的應用 四則運算表示式求值

棧是計算機中非常基礎而又極其重要的一種資料結構,許多演算法的實現都離不開棧,它的特點是 先進後出 也可以說 後進先出 打乙個形象的比方 棧好比乙個彈夾,最先放入的子彈只能最後打出 而最後放入的子彈則最先打出。我們生活中接觸的表示式大部分都是中綴表示式,形如a b,這種表示式的特點是將運算子放在了運算...