我想知道如何創建一個可以處理操作符的堆棧。例如:1 + 2 * 5,所以第一個堆棧將採用1,2和5 ...,另一個堆棧採用C++中的運算符+和*把運算符和+和 - 放在變量中嗎? C++
這樣我就可以知道我可以在結構節點使用的數據類型:
struct node{
int data;
char operator [];
node* next;};
我想知道如何創建一個可以處理操作符的堆棧。例如:1 + 2 * 5,所以第一個堆棧將採用1,2和5 ...,另一個堆棧採用C++中的運算符+和*把運算符和+和 - 放在變量中嗎? C++
這樣我就可以知道我可以在結構節點使用的數據類型:
struct node{
int data;
char operator [];
node* next;};
首先,不要創建自己的鏈表實現。 C++已經有了標準的棧(和列表)類型。你可能需要一個堆棧整數,並且字符串堆棧:
#include <stack>
#include <string>
std::stack <int> numbers;
std::stack <std::string> operators;
您也可以使用焦炭的堆棧運營商:
std::stack <char> operators;
但使用字符串允許多字符操作符,如&&
。
謝謝尼爾的回覆......但實際上這是一項任務,我必須這樣做 – 2011-05-28 10:01:59
如果你正在尋找通過操作符重載來定製操作符,你可能會這樣做.. 所有你需要做的就是創建一個你想使用的所有操作符的枚舉並使用該枚舉的堆棧,這將解決以下問題: 1.檢查是否輸入了正確的操作員。 2.執行操作時無需堆疊if/else或switch。
您無法將操作員作爲變量傳遞,這在我看來是輕微的失敗。但是,您可以使用通用函數對象(在Boost中可用)併爲它們生成函子,這可以實現這一點。
我不知道我明白你想做什麼,但每個節點都可以取一個整數和一個包含操作符的字符。這樣,第一個節點包含例如1和'+',第二個節點包含2個數據和'*'作爲運算符,對於最後一個節點,運算符應該爲null,表示不再有更多操作完成。
這是無效的。你不能這樣做。你能告訴我們你想做什麼嗎? – Nawaz 2011-05-28 10:00:11
1 + 2 * 5答案應該是11 2 * 5 = 10和+ 1 = 11 ....所以乘法然後addition.i想手動。但1,2和5成堆棧和運營商+和* ...然後作爲堆棧是LIFO.i將從第一堆棧獲得5然後*從第二個,然後2所以答案將是10(2 * 5)..我將返回進入第一個堆棧的值現在是第一個堆棧1中的值,然後是第二個堆棧中的值+10,第二個堆棧只有+操作符。不是從第一個堆棧調用10,然後是+,然後從第一個堆棧調用1,最後變成加法10 + 1 = 11進棧。 – 2011-05-28 10:12:46