隊列的概念 在說隊列之前,先回憶一下棧是什麼,我們一般說棧是一個先進後出的數據結構,而隊列就是先進先出的數據結構。 隊列是定在表的一端進行插入,表的另一端進行刪除。 通常,我們稱進數據的一端為隊尾,出數據的一端為隊首(這邊需要註意,經常會記反起碼我是這樣的),數據元素進隊列的過程稱為入隊,出隊列的過 ...
隊列的概念
在說隊列之前,先回憶一下棧是什麼,我們一般說棧是一個先進後出的數據結構,而隊列就是先進先出的數據結構。
隊列是定在表的一端進行插入,表的另一端進行刪除。
通常,我們稱進數據的一端為隊尾,出數據的一端為隊首(這邊需要註意,經常會記反起碼我是這樣的),數據元素進隊列的過程稱為入隊,出隊列的過程稱為出隊。
隊列存儲的方式主要分為兩種:
1.順序隊列(集中存儲) 2.鏈隊列(分散存儲)
兩者的區別主要就是順序表和鏈表的區別。
隊列的用法
和棧一樣,隊列同樣可以使用STL來操作。
隊列的頭文件是:
1 #include<queue> //當然萬能頭中也包括此頭文件
有以下幾種操作方式:
1 queue<int> q; //建立一個隊列q 2 q.push(a); //將元素a插入到隊列q的末尾 3 q.pop(); //刪除q的隊首元素 4 q.front(); //查詢q的隊首元素(這裡要註意它和棧略有不同,棧中用的是top函數) 5 q.back(); //查詢q的隊尾元素 6 q.size(); //查詢q的元素個數 7 q.empty(); //查詢q是否為空
一定要註意在隊列中查詢隊首元素是front不是top,不然就會被無情報錯 本蒟蒻第一次打隊列時記錯了,結果……
隊列的模板
題目
題目描述
請你實現一個隊列(queue),支持如下操作:
push(x):向隊列中加入一個數 x。
pop():將隊首彈出。如果此時隊列為空,則不進行彈出操作,並輸出 “ERR_CANNOT_POP”。
query():輸出隊首元素。如果此時隊首為空,則輸出“ERR_CANNOT_QUERY”。
size():輸出此時隊列內元素個數。
輸入格式
第一行,一個整數n,表示操作的次數。
接下來n行,每行表示一個操作。格式如下:
“1 x”,表示將元素 `x` 加入隊列。
“2”,表示將隊首彈出隊列。
”3”,表示查詢隊首。
“4”,表示查詢隊列內元素個數。
輸出格式
輸出若幹行,對於每個操作,按「題目描述」輸出結果。
每條輸出之間應當用空行隔開。
輸入樣例 輸出樣例
13 2
1 2 1
3 2
4 233
1 233 0
3 ERR_CANNOT_POP
2 ERR_CANNOT_QUERY
3 144
2
4
3
2
1 144
3
1 #include<bits/stdc++.h> //萬能頭文件,包含了<queue> 2 #define MAXN 100010 3 #define ll long long 4 using namespace std; 5 int n; 6 queue<unsigned long long> s; 7 int main() 8 { 9 cin>>n; 10 for(int i=1;i<=n;i++) 11 { 12 int a; 13 cin>>a; 14 if(a==1) 15 { 16 int x; 17 cin>>x; 18 s.push(x); 19 } 20 if(a==2) 21 { 22 if(s.empty()) 23 cout<<"ERR_CANNOT_POP"<<endl; 24 else 25 s.pop(); 26 } 27 if(a==3) 28 { 29 if(s.empty()) 30 cout<<"ERR_CANNOT_QUERY"<<endl; 31 else 32 cout<<s.front()<<endl; 33 } 34 if(a==4) 35 cout<<s.size()<<endl; 36 } 37 return 0; 38 }
碼字不易,點個贊唄§(* ̄▽ ̄*)§