PTA 資料結構與演算法 7 21 求字首表示式的值

2021-09-24 03:28:49 字數 2766 閱讀 4618

如有不對,不吝賜教

進入正題:

算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如2+3*(7-4)+8/4的字首表示式是:+ + 2 * 3 - 7 4 / 8 4。請設計程式計算字首表示式的結果值。

輸入格式:

輸入在一行內給出不超過30個字元的字首表示式,只包含+、-、*、/以及運算數,不同物件(運算數、運算符號)之間以空格分隔。

輸出格式:

輸出字首表示式的運算結果,保留小數點後1位,或錯誤資訊error。

輸入樣例:

+.+ 2 * 3 - 7 4 / 8 4

輸出樣例:

13.0

這道題目由中綴表示式求字首表示式,我們只要構造一棵字首樹,然後在利用字首樹進行計算就可以了,需要注意的就是數字的處理,有非個位數的數字以及可能有負數。

下面給**:

#include

#include

int flag;

//表示是否有錯誤

struct suffixtree

;//字首樹

double

atof

(char

*str)

;struct suffixtree *

insert

(struct suffixtree *root,

double number,

char sign)

;double

cal(

double num1,

double num2,

char sign)

;void

free

(struct suffixtree *root)

;int

main

(void

) j=0;

if(((

'-'==input[i]

||'+'

==input[i])&&

' '!=input[i+1]

)||(input[i]

>=

'0'&&input[i]

<=

'9'))if

(input[i]

&&' '

!=input[i]

&&'\n'

!=input[i])}

if(!root-

>flag||flag)

printf

("error");

else

printf

("%.1lf"

,root-

>number)

;free

(root)

;return0;

}double

atof

(char

*str)

elseif(

'+'==str[0]

)else

flag=1;

while

(str[i]

&&'.'

!=str[i]

)while

(str[i]

) result+=

(str[i]

-'0'

)*point;

point/=10;

i++;}

return result*flag;

}struct suffixtree *

insert

(struct suffixtree *root,

double number,

char sign)

else

newone-

>right=newone-

>left=null;if(

-1==root-

>flag)if(

!root-

>left)

elseif(

!root-

>left-

>flag)

//只用左節點沒資料(因為是先填左節點 那麼右節點肯定沒資料)

//或者左節點存的不是符號 (那麼左子樹必定有空缺可以填入資料計算出值)

//如果對左節點進行了操作 那麼右節點肯定沒有資料 因而可以返回if(

!root-

>right)

root-

>right=newone;

else

//表明左右子節點儲存的都是資料 還要存乙個資料 那麼表示式錯誤

else

}//對右節點進行計算if(

!root-

>right)

//表明右節點出現錯誤

if(root-

>right-

>flag)

return root;

}double

cal(

double num1,

double num2,

char sign)

else

result=num1/num2;

}return result;

}void

free

(struct suffixtree *root)

結果:

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。下列...