課程作業五

2022-08-15 11:39:11 字數 2320 閱讀 4821

本次作業要求將程式寫成.cpp和.h分離的形式。根據設計的類圖進行編碼,搭建主體框架。####

上一次作業裡已經將類的**歸類,這次將分散的**整理成乙個完整的**體。

[head](

對棧的知識學習探索####

我是在四則運算的基礎上進行棧的應用.四則運算裡主要明白前/中/字尾表示式的轉換.

四則運算的運用可分為兩類:

①將中綴表示式轉為字尾表示式

規則:從左到右遍歷中綴表示式的每一數字和符號,若是數字就輸出,即成為字尾表示式的一部分;若是符號,則判斷其與棧 頂符號的優先順序,是右括號或優先順序低於棧頂符號(乘除優先加減)則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止。

舉例:中綴表示式「9+(3-1)3+10/2」轉化為字尾表示式為「9 3 1- 3 * + 10 2 / +」.

.思路:1.第乙個字元是數字9,輸出9,後面是符號「+」,進棧。

2.第三個字元是「(」,依然是符號,因其只是左括號,還沒有配對,故進棧。

3.第四個字元是數字3,輸出,總表示式為9 3,接著是「-」,進棧。

4.接下來是數字1,輸出,總表示式為9 3 1,後面是符號「)」,此時,我們需要去匹配此前的「(」,所以棧頂依次出棧,並輸出,直到「(」出棧為止。此時左括號上方只有「-」,因此輸出「-」。總的表示式為9 3 1 -。

5.接著是數字3,輸出,總的表示式為9 3 1 - 3.緊接著是符號「」,因為此時的棧頂符號為「+」號,優先順序低於「」,因此不輸出,「」進棧。

6.之後是符號「+」,此時當前棧頂元素「*」比這個「+」的優先順序高,因此棧中元素出棧並輸出(沒有比「+」更低的優先順序,所以全部出棧),總輸出表示式為9 3 1 - 3 * +。然後將當前這個符號「+」進棧。

7.緊接著數字10,輸出,總表示式為9 3 1 - 3 * + 10。後是符號「/」,所以「/」進棧。

8.最後乙個數字2,輸出,總的表示式為9 3 1 - 3 * + 10 2。

中綴表示式轉換為字尾表示式**如下.

stacks;   //初始化一空棧,用來對符號進出棧使用。

stackss; 初始化乙個空棧。此棧用來對要運算的數字進行進出使用。

int main()

}

else

s.push(str1[i]);

}

}

else

}

}

}

} if (s.size() != 0)

}

cout << str2 << endl;

②入棧計算字尾表示式並得出結果

規則為:從左到右遍歷表示式的每個數字和符號,遇到是數字就進棧,遇到是符號,就將處於棧頂兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。

舉例:字尾表示式為:9 3 1 - 3 * + 10 2 / +.

1.字尾表示式中前三個是、都是數字,所以9 3 1 進棧。

2.接下來是「-」,所以將棧中的1出棧作為減數,3出棧作為被減數,並運算3-1得到2,再講2進棧。

3.接著是數字3進棧。

4.後面是「*」,也就意味著棧中3和2出棧,2與3相乘,得到6,並將6進棧。

5.下面是「+」,所以棧中6和9出棧,9和6相加,得到15,將15進棧。

6.接著是10和2兩數字進棧。

7.接下來是符號「/」,因此,棧頂的2與10出棧,10與2相除,得到5,將5進棧。

8.最後乙個是符號「+」,所以15與5出棧並相加,得到20,講20進棧。

9.結果是20出棧,棧變為空。

由字尾表示式計算結果**如下.

int temp1, temp2, te***;   

len2 = str2.length();

for (i = 0; i < len2; i++)

else

else if (str2[i] == '-')

else if (str2[i] == '*')

else if (str2[i] == '/')

ss.push(te***);

} }

cout << ss.top() << endl;

}

system("pause");

}

學習心得####

上面的**只是支援一些簡單的整數的加減乘除運算,而且不支援浮點數,負數或者數字大於9的數字的運算,上網搜素了棧的資料,因為一直在進行四則運算這個**,就學習了簡單的中字尾的轉換。

課程作業五

上次作業我已經將我的乙個類分為了四個類,而且已經進行了 的實現。git傳送門 在四則運算器的計算算式的值的編寫中,我用到了棧。下面是我所學到的一些知識。棧是一種特殊的線性表,只能從固定的方向進出,而且棧進出的基本原則是 先進棧的元素後出棧。它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的...

課程作業五

git鏈結 include stack採用模板類實現,stack物件的預設構造形式 stack stkt stack stkint 乙個存放int的stack容器。stack stkfloat 乙個存放float的stack容器。stack stkstring 乙個存放string的stack容器。...

課程作業五

提供本次作業的github鏈結 對棧的知識學習探索 概念很簡單,棧 stack 是一種後進先出的資料結構。棧的實現 棧是一種後進先出的資料結構,對於stack 我們希望至少要對外提供以下幾個方法 stack 建立乙個空的棧 void push t s 往棧中新增乙個新的元素 t pop 移除並返回最...