一.棧基本原理:
棧是乙個類似於桶的陣列,資料從乙個方向進去,從乙個方向出來。本質上也是陣列的一種特殊運用。
主要應用方向:
1. 判斷表示式是否合法,即"("和")"這類的字元是不是互相對應。
2.計算輸入的一串方程,並輸出結果類問題。
3.解決火車排隊類問題:
例:c++一本通1357乙個火車站,鐵路如圖所示,每輛火車從a駛入,再從b方向駛出,同時它的車廂可以重新組合。假設從a方向駛來的火車有n節(n≤1000),分別按照順序編號為1,2,3,…,n。假定在進入車站前,每節車廂之間都不是連著的,並且它們可以自行移動到b處的鐵軌上。另外假定車站c可以停放任意多節車廂。但是一旦進入車站c,它就不能再回到a方向的鐵軌上了,並且一旦當它進入b方向的鐵軌,它就不能再回到車站c。負責車廂排程的工作人員需要知道能否使它以a1,a2,…,an的順序從b方向駛出,請來判斷能否得到指定的車廂順序。
#include#include#includeusing namespace std;
int stack[1001],a[1001];
int top,n;
int main()
if(stack[top]==a[i])
else
{ cout<<"no"《思想:通過棧只能一邊進同一邊出的性質來解決問題,在一些計算問題上注重對稱性。
二.佇列
佇列基本上相當於乙個沒有底的桶,資料從左邊進右邊出,但同時佇列也可能是乙個圓形,資料從最右邊出去後又回到最左邊。(其實感覺有一點像小範圍資料的迴圈)
同樣是資料的一種特殊表達方式。
主要解決問題:
1.對個數有限,但處理規則不變,進行多次處理的問題。
2.可以適用於處理規則小於兩個,存在一般規律的題目。
個人感想:棧大多是用於處理的問題都比較特殊,有很明顯的特徵,但佇列個人感覺就是提供了乙個解決一般規律的方法,在處理很多題上都有一定程度的應用,範圍很廣泛,也可以說就是提供了乙個找規律並把規律變成**的思路,雖然也有一些很明顯帶有佇列特徵問題,但都比較簡單,把佇列的思想融入在寫程式的程式中可能才是更高的乙個境界吧,一眼看不出佇列特徵的題目也明顯比較難,要努力多練一下了。
士兵佇列訓練
某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠攏,再從頭開始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二報數。以後從頭開始輪流進行一至二報數 一至三報數直到剩下的人數不超...
士兵佇列訓練問題
實驗任務 某部隊進行新兵佇列訓練,將新兵從一開始按順序依次編號,並排成一行橫隊,訓練的 規則如下 從頭開始一至二報數,凡報到二的出列,剩下的向小序號方向靠 攏,再從頭開 始進行一至三報數,凡報到三的出列,剩下的向小序號方向靠攏,繼續從頭開始進行一至二 報數。以後從頭開始輪流進行一至二報數 一至三報 ...
士兵佇列訓練問題
題意 hdoj1276 典型的佇列問題,入門水題 題解 第一次做普通佇列,引用了別人的演算法,優化了一下,題解記錄學到的一點東西 佇列和陣列之類的東西完全不同,和棧一樣,被固定的順序和進出卡的很死,所以在做佇列的題目時,不能像陣列一樣思維 因為是3個人,所以首先按佇列的大小來卡人數,初始化的時候,從...