queue
头文件:
#include<stdlib.h> 或 #include<cstdlib> + #include<queue>
定义一个queue的变量 | queue<Type> que |
查看是否为空范例 | que.empty() 是的话返回1,不是返回0; |
在已有元素后面增加元素(入队) | que.push() |
现有元素的个数 | que.size() |
显示第一个元素 (最早的元素) | que.front() |
显示最后一个元素 | que.back() |
清除第一个元素 (出队) | que.pop() |
例子1:
注意:
#include<cstdlib>
#include<iostream>
#include<queue>
using namespace std;
int main()
{
queue<int>q;
cout<<"现在queue是否empty?"<<q.empty()<<endl;
cout<<"push 5,push 6, push 7"<<endl;
q.push(5);
q.push(6);
q.push(7);
cout<<"现在queue的元素有几个?"<<q.size()<<endl;
cout<<"现在queue的front为什么?"<<q.front()<<endl;
cout << "现在 queue 的rear为何? " << q.back() << endl;
cout << "pop" << endl; q.pop();
cout << "现在 queue 的元素有几个? " << q.size() << endl;
cout << "现在 queue 的front为何? " << q.front() << endl;
cout << "现在 queue 的rear为何? " << q.back() << endl;
system("PAUSE");
return 0;
}
输出结果为:
注意:
(1)定义格式: queue<int> q; 或 queue<int> Q[10000];
(2)
queue(const queue&) 复制构造函数
例如:用一行代码利用queue对象q1,创建一个以双向链表为底层容器的queue对象q2
queue<int,list<int>>q1;
queue<int,list<int>>q2(q1);
(3)
如何实现固定大小的queue队列
例子3:(与作业题的代码相似)
在每一次元素入队列前都判断当前的队列是否满,用双向链表做queue 的底层容器可以实现
例子2:
#include<iostream>
#include<list>
#include<queue>
using namespace std;
#define QUEUE_SIZE 50 //固定大小;
int main()
{
queue<int,list<int>> q;
if(q.size(QUEUE_SIZE) )
q.push(51);
if(q.size(QUEUE_SIZE) )
q.push(36);
if(q.size(QUEUE_SIZE))
q.push(28);
while(!q.empty() )
{
cout<<q.front()<<endl;
q.pop();
}
return 0;
}
例子3:(与作业题的代码相似)
#include<iostream>
#include<cstdio>
#include<queue>
#include<stdlib>
using namespace std;
int main()
{
register int i,j;
int m,n;
char c[6];
int x,y;
while(scanf("%d %d",&n,&m)!=EOF)
{
queue<int> Q[10000];
for(i=1;i<m;i++)
{
scanf("%s",&c);
if(strcmp(c,"INT") == 0)
{
for(j=1;j<=n;j++)
{
while(!Q[j].empty())
{
Q[j].pop();
}
continue;
}
}
if(strcmp(c,"PUSH")==0)
{
scanf("%d %d",&x,&y);
Q[x].push(y);
continue;
}
if(strcmp(c,"POP")==0)
{
scanf("%d ",&y);
if(Q[y].empty)
{
printf("NULL\n");continue;
}
else
{
printf("%d\n",Q[y].front());
}
Q[y].pop;
}
}
}
return 0;
}