7 1 棧的應用

2022-07-01 14:33:11 字數 1464 閱讀 4704

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 相對路徑 ...