6.8 stack的常見用法詳解
與此節題目相同
emmmmm**注釋很清楚,標註⚠️的地方都是寫**的時候漏掉的,要注意!!!
一開始沒有寫node結構體,但是考慮到如果不管運算元還是操作符都用char表示的話,運算元最大為127而且不能有浮點數,這顯然是不可能的,所以還是改成了node結構體。
【書p147也有此題解析和**,可參考】
#include #include #include #include #include #include #include using namespace std;
struct node ;
stacks; //在change函式中用於存放放操作符,在calculate函式中存放運算元
queueq; //存放字尾表示式
mapmp;//操作符優先順序
string str; //讀入的中綴表示式
//將中綴表示式轉換為字尾表示式
void change()
q.push(temp);
}//是操作符
else
s.push(temp);
i++;}}
// 若s中還有操作符,則加入字尾表示式
while (!s.empty())
}//計算字尾表示式,最後s中的數為最終結果
double calculate()
//為操作符,則出棧兩個進行計算,然後結果壓棧
else
}return s.top().num;
}int main()
change();
printf("%.2f\n", calculate());
s.pop(); //因為s最後還有乙個數字,要清空s
定義棧stack,遍歷輸入的字串。
⚠️ 使用getline時,因為getline可以讀入空格,故若前面使用了scanf,要先用getchar吸收掉換行
#include #include #include #include using namespace std;
string str;
stacks;
bool match(char a, char b) ') return true;
else return false;
}bool deal() ')
}return s.empty();
}int main()
}return 0;
}
7 1棧的應用
棧就是一種後進先出的資料結構。一般都有乙個棧頂指標,指向棧的最上面的乙個元素,當用陣列實現堆疊的時候,棧頂指標就是乙個int型的變數,當沒有元素的時候記為 1,第乙個元素為0,用top來表示。當用鍊錶來實現棧的時候,則是乙個int 型的指標 typedef int position struct s...
PTA 7 1 列車廂排程(棧的應用)
題目點我 樣例如圖 1 3軌道都可以看成是棧,不論是1軌還是3軌都應該讓棧頂指向車廂在軌道的移動方向 因為棧的優點是在棧頂插入和刪除元素很方便,反過來的話 寫起來會很麻煩 結合圖和題目要求的輸入,兩個輸入都應該逆序入棧 1.先定義乙個標記int flag 1 假定按輸入的排程方式不會出現問題。當出問...
棧 71 簡化路徑
以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱 linux unix中的絕對路徑 vs 相對路徑 ...