如有不對,不吝賜教
進入正題:
算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。
輸入格式:
輸入在一行中給出不含空格的中綴表示式,可包含+、-、*、\以及左右括號(),表示式不超過20個字元。
輸出格式:
在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。
輸入樣例:
2+3*(7-4)+8/4
輸出樣例:
2 3 7 4 - * + 8 4 / +
這道題目是要我們把中綴表示式轉換成字尾表示式,我們得先知道字尾表示式咋來的:
任何乙個二元表示式a<>b(其中的<>表示乙個二元運算子,a、b也為字尾表示式)都可以寫為a b <>的形式,這樣得到的式子就是字尾表示式。
這樣以來,這不就剛好符合棧後進先出的特性了,因此我們使用棧來over這道題。
注意下括號的處理,自己動手畫畫就ok了。
下面上**:
#include
#include
intgetlevel
(char ch)
;int
main
(void
)//填入數字符號
while
((input[i]
<=
'9'&&input[i]
>=
'0')
||'.'
==input[i])if
(tag)
//表示處理了數字 那麼順序佇列要往後走if(
!input[i]
)break;if
(!top)
//運算符號的處理
sign[top++
]=input[i]
;else
top--;}
elseif(
'('==input[i]
) sign[top++
]=input[i]
;elseif(
getlevel
(input[i]
)<=
getlevel
(sign[top-1]
)&&'('!=sign[top-1]
) sign[top++
]=input[i];}
else
sign[top++
]=input[i];}
i++;}
for(i=top-
1;i>=
0;i--
)printf
("%s"
,s[0])
;for
(i=1
;i)return0;
}int
getlevel
(char ch)
測試結果:
PTA 資料結構與演算法 堆疊
1.棧底元素是不能刪除的元素。1分 tf 2.對順序棧進行進棧 出棧操作不涉及元素的前 後移動問題。1分 tf 3.若用data 1 m 表示順序棧的儲存空間,則對棧的進棧 出棧操作最多只能進行m次。1分 tf 4.通過對堆疊s操作 push s,1 push s,2 pop s push s,3 ...
PTA 資料結構與演算法 佇列
1.在用陣列表示的迴圈佇列中,front值一定小於等於rear值。1分 tf 2.迴圈佇列執行出隊操作時會引起大量元素的移動。1分 tf 3.棧是插入和刪除只能在一端進行的線性表 佇列是插入在一端進行,刪除在另一端進行的線性表。1分 tf 4.n個元素進隊的順序和出隊的順序總是一致的。1分 tf 1...
PTA 資料結構與演算法 回溯
1.在4皇后問題中,x1,x2,x3,x4 對應4個皇后位置的列下標。在回溯剪枝過程中,狀態 1,4,2,會在 2,4,1,之前被檢查,並且它們對應的分支都沒有解。tf 2.西洋棋四皇后問題僅有 2 個不同的解。tf 1.給定收費公路重建問題的距離集d 首先可以確定的是 x1 0 和 x6 8。下列...