中綴表示式:就是目前我們用到的計算表示式 如:「9+(3-1)*3+5/2」
字尾表示式:就是把運算子放置到數字的後面 如:"9 3 1 - 3 * + 5 2 / +"
中綴表示式 轉化為字尾表示式規則:
從走到有遍歷中綴表示式的數字和字元
若是數字輸出,即成為字尾表示式的一部分
若是符號則判斷其與棧頂符號的優先順序
是右括號或者優先順序低於棧頂符號(乘除優先於加減)則棧頂元素一次出棧並輸出
並將當前符號進棧
一直到最終輸出字尾表示式
字尾表示式如何用計算機得到結果:
從左到右遍歷表示式的每個數字和符號,
遇到數字就進棧,
遇到符號就將處於棧頂的兩個數字出棧,
進行運算,
運算結果進棧,
一直到最終結果
具體**如下:
usingsystem;
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,這種表示式的特點是將運算子放在了運算...