队列的基本用法
转载:
https://blog.csdn.net/dy_1748204009/article/details/60592794
https://www.cnblogs.com/yaoyueduzhen/p/4456430.html
一、什么是队列
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口,因此我们可以把LinkedList当成Queue来用。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
二、队列的使用方法
头文件:
#include <queue>
声明方法:
1、普通声明
queue <int> q;
2、结构体
struct node
{
int x, y;
};
queue <node> q;
三、队列的基本操作
队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个 线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。下表显示了jdk1.5中的阻塞队列的操作:
push(x) 将x压入队列的末端
pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
front() 返回第一个元素(队顶元素)
back() 返回最后被压入的元素(队尾元素)
empty() 当队列为空时,返回true
size() 返回队列的长度
四、队列操作代码示例
#include <iostream>
#include <queue>
using namespace std;
int main()
{
int e,n,m;
queue<int> q1;
for(int i=0;i<10;i++)
{
//入列,插入队列的末端。
q1.push(i);
}
//判断队列是否为空,当队列为空时,q1.empty(),返回true.
if(!q1.empty())
cout<<"The queue isn't empty\n";
//访问队列中的元素个数
n=q1.size();
cout<<n<<endl;
//back。访问队列尾元素
m=q1.back();
cout<<m<<endl;
for(int j=0;j<n;j++)
{
//访问队列首元素
e=q1.front();
cout<<e<<" ";
//出列,弹出队列的第一个元素,应注意,并不会返回弹出元素。
q1.pop();
}
cin.ignore();
return 0;
}
程序的输出为:
The queue isn't empty
10
9
0 1 2 3 4 5 6 7 8 9
五、优先队列
优先队列的使用方法:
https://www.cnblogs.com/yaoyueduzhen/p/4456430.html
上一篇: 单向队列,双向队列,优先队列的基本用法
下一篇: 优先队列的基本用法(初步)