队列与优先队列
1.队列的概念
只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);
队列具有先进先出(FIFO)的特性。
2.队列性质
- **定义:**队列是限定只能在表的一端(队尾)进行插入,在表的另一端(队首)进行删除的线性表
队尾(tail)——允许插入的一端
队头(head)——允许删除的一端 - 队列特点:先进先出(FIFO)
- 队列中有效元素的个数:tail – head
- **约定:**head指向第1个元素,tail指向最后元素的下个位置。(可以改变)
- (出队)队首删除一个数的操作是head++;
- (入队)队尾增加一个数(假设这个数是x)的操作是q[tail]=x; tail ++;
- 空队列的判断条件:head == tail;
3.队列实现
队列结构实现:
struct queue
{
int data[100]; //队列的主体,用于存储内容
int head; //队首
int tail; //队尾
}
4.队列成员函数
C++队列queue类成员函数如下:
- back()返回队尾元素
- empty()如果队列空则返回真
- front()返回队头元素
- pop()删除队头元素
- push()在队尾加入一个元素
- size()返回队列中元素的个数
5.优先队列的概念
出队顺序和入队顺序无关,与优先级相关。主要区别普通队列在于出队,优先级高者出队。
C++优先队列priority_queue类成员函数如下
5.1出队是从大到小的顺序:大根堆
//默认是降序排列,大顶堆
priority_queue <int>q;
5.2出队是从大到小的顺序:小根堆
//升序队列,小顶堆
priority_queue <int,vector<int>,greater<int> > q;