STL之queue单行队列
定义:
队列是限定在一端进行插入,另一端进行删除特殊线性表。形如我们排队买票,第一个站队的人第一个买票一样,一个可以控制变量先进先出的结构体里,我们称之为队列(queue)。
通常把队列的删除和插入分别称为出队和入队。允许出队的一端称为队头,允许入队的一端称为队尾。所有需要进队的数据项,只能从队尾进入,队列中的数据项只能从队头离去。当队列中没有元素的时候,我们称之为空队列。由于总是先入队的元素先出队(先排队的人先买完东西),这种表也称为先进先出(FIFO)表。
理解:
我们可以想象出我们在打客服热线时,有时会出现等待的现象。当其他客户挂断电话,客服人员才会接通我们的电话。因为客服相对于客户而言,总是一定数量的且总是远少于的,当客户量大于客服人员时,就会造成排队等待的现象。
应用:
队列的应用是在SPFA算法或BFS等需要先来先走的情况(比如扩展节点等)。
使用方法:
queue模板类的定义在<queue>头文件中。
定义方法如下:
1 queue<int> q1; 2 queue<double> q2;
基本操作:
1、入队:q.push(x);将x插入到队尾的末端
2、出队:q.pop();弹出队列的第一个元素。 注意:这个操作并不会返回被弹出的元素的值。
3、访问队首元素:q.front(),即最早被压入队列的元素。
4、访问队尾元素:q.back(),即最后被压入队列的元素。
5、判断队列空:q.empty(), 当队列为空时返回true,如果输出的话会输出1;相反的当队列不为空时返回false,输出0。
6、访问队列中的元素个数:q.size();
下面举一下例子:
1 #include<queue> 2 #include<iostream> 3 using namespace std; 4 int main(){ 5 int e,n,m; 6 queue<int> q1; 7 for(int i=0;i<10;i++) 8 q1.push(i); 9 if(!q1.empty() ) 10 cout<<"No empty!\n"<<endl; 11 n=q1.size(); 12 cout<<n<<endl; 13 m=q1.back() ; 14 cout<<m<<endl; 15 for(int j=0;j<n;j++){ 16 e=q1.front() ; 17 cout<<e<<" "; 18 q1.pop() ; 19 } 20 cout<<endl; 21 if(q1.empty() ) 22 cout<<"The queue is empty!\n"<<endl; 23 24 }