1 表示式求值在計算機中進行算術表示式的計算是通過棧來實現的。
(1) 算術表示式的三種表示:
中綴:——雙目運算子出現在兩個運算元中間, 例:a+b
字首:——雙目運算子出現在兩個運算元前面, 例:+ab
字尾:——雙目運算子出現在兩個運算元後面, 例:ab+
(2) 三種表示式之間的轉換:
按運算的優先次序全部加上括號,逐個括號寫成另一種表示式
(括號—— * ,/—— +,- )
注意:運算元出現的順序不變
hdoj 1237 簡單計算器(計算器應用)
2.棧在數制轉換
十進位制n和其它進製數的轉換是計算機實現計算的基本問題,其解決方法很多,其中乙個簡單演算法基於下列原理:
n=(n div d)*d+n mod d
( 其中:div為整除運算,mod為求餘運算)
例如 (1348)10=(2504)8,其運算過程如下:
n n div 8 n mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
先入棧,再出棧
入棧順序:4,0,5,2.
出棧順序:2,5,0,4
所以 1348 = (2504)o
void conversion( ) //conversion
3. 行編輯程式
接受使用者輸入的一行字元,然後逐行存入使用者資料區。允許使用者輸入錯誤,並在發現有誤時可以及時更正。
例如:使用者發現輸入錯誤時,輸入」#」(退格符),以表示前乙個字元無效; 輸入」@」(退行符),表示當前輸入的一行無效;
設乙個棧接受輸入,每輸入乙個字元,做如下判斷:
是無效符,刪除前乙個入棧的符號
是退行符,刪除前一行入棧的符號
其它,入棧
行編輯程式演算法如下:
void lineedit( )//while
//將從棧底到棧頂的棧內字元傳送至呼叫過程的資料區
clearstack(s);
if(ch!=eof)
ch=getchar( );
destroystack(s);
}//lindeedit
棧的實際應用
棧是一種先進後出的資料結構,這個我相信大家很好理解。那下面我就通過兩個棧的實際應用來幫助大家更好的理解棧的工作狀態。十進位制數n和其他d進製數的轉換是計算機實現計算的基本問題,其解決方法很多,其中乙個簡單演算法基於下列原理 n n div d d n mod d 其中,div為整除運算,mod為求餘...
鏈棧的例項應用
利用棧的基本操作實現將任意乙個十進位制整數轉化為r進製整數演算法 r為二至九之間 由計算機基礎知識可知,把乙個十進位制整數x轉換為任一種r進製數得到的是乙個r進製的整數,假定為y,轉換方法是逐次除基數r取餘法。具體做法是 首先用十進位制整數x除以基數r,得到的整餘數是r進製數y的最低位y0,接著以x...
棧和佇列的實際應用 小貓釣魚
include include include struct queue struct stack int main else book s.data s.top 0 q1.data q1.tail s.data s.top 先判斷一下小哈手中的牌,如果此時小哈手中已無牌,遊戲結束 if q1.he...