c 結構體方式實現字尾表示式計算(資料結構)

2021-09-27 12:05:43 字數 1329 閱讀 5020

功能:

大致思路:

整體思路:

1.建棧:建立乙個空鏈棧,把數字型別放入棧中。

2.入棧:需要乙個棧頭和準備入棧的數字。push(t *,int);

3.計算:從輸入中讀取資料,當遇到不是數字型別時,就從棧頂上往下取資料,取top->data和(top->next)->data;進行計算;

4.出棧:計算完成之後把剛才計算的那兩個節點出棧,把得到的計算的結果從新放入棧中,並釋放記憶體;

5.其他:使用字串輸入需要注意:當多個數字一起時不能判斷大於10位以上的,所以需要做相關記號,或者採用迴圈單個輸入法以某個特定符號結束。

**實現:

節點設計:

typedef struct operandtype*linkedlist;
構建空棧:

linkedlist createstack()

}

入棧實現:

int

push

(linkedlist top,

int num)

else

}

計算步驟:這個

int

calculate

(linkedlist top,

char oper)

else

cout<

" = "

<

//把結果放入棧

push

(top,result)

;return result;

}}

出棧實現:

//5.刪除 

intpop

(linkedlist top)

else

}

其他:

#include//這個是用來char 轉 int 的

stringstream ss ;

string num = 「404」;

ss << num;

ss >> number; //number type int

2.強轉問題:

char c = 『5』;

int a = (int)c; //此時的a轉為5的ascii碼,可以a = a - 48;得到5

執行結果:

9.原始碼:

在這裡

字尾表示式計算

演算法 1.遍歷字尾表示式中的數字和符號 對於數字 進棧 對於符號 從棧中彈出右運算元 從棧中彈出左運算元 根據符號進行運算 將運算結果壓入棧中 2.遍歷結束 棧中的唯一數字為計算結果 include include linkstack.h int isnumber char c int isope...

字尾表示式計算

將中綴表示式轉換為字尾表示式 與轉換為字首表示式相似,遵循以下步驟 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從左至右掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與s1棧頂運算子的優先順序 4 1 如果s1為空,或棧頂運算子為左括號 則直接將此運算子入棧 ...

字尾表示式計算

字尾表示式這樣一種型別的表示式,運算元在前,操作符在後。例如這樣的一位數字尾表示式 32 5 4 對等的四則表示式為 3 2 5 4。試編寫程式,求解乙個一位數的字尾表示式計算,表示式支援 操作,其中 為整除。輸入 表示式輸出 計算值樣例輸入 32 5 4 樣例輸出 21提示 可使用棧 解題關鍵 1...