PTA 資料結構與演算法 7 20 表示式轉換

2021-09-24 02:37:00 字數 1649 閱讀 7596

如有不對,不吝賜教

進入正題:

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。

輸入格式:

輸入在一行中給出不含空格的中綴表示式,可包含+、-、*、\以及左右括號(),表示式不超過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。下列...