如有不對,不吝賜教
進入正題:
算術表示式有字首表示法、中綴表示法和字尾表示法等形式。字首表示式指二元運算子位於兩個運算數之前,例如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。下列...