【STL】队列的实现以及应用

来源:互联网 发布:淘宝法院拍卖房子税费 编辑:程序博客网 时间:2024/06/04 23:34

队列的概念

定义
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作
的特殊线性表。
进行插入操作的一端称为队尾,通常称为入队列;进行删除操作的一端称为队头,通常称为出队列。
队列具有先进先出的特性(FIFO)。

顺序队列
顺序队列就是用数组实现的,定义两个变量front和rear指向队首和队尾

实现方式一:队头固定在数组的起始位置,入队时队尾移动,出队时,将队尾到队首的元素向前移动一位。

实现方式二,队头不是固定的,出队时,将队首向后移动。

循环队列
将头尾相接的顺序队列称为循环队列。

怎么判空?
1 少用一个存储单元,即那个单元标记为起始位置
2设置一个计数器

链式队列
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而异,将其称为链队列。

STL中实现的queue

STL中queue的实现是默认以deque为底层实现的 ,同样底层也可以是list实现。

template < class T, class Container = deque<T> > class queue;

操作函数
这里写图片描述

优先级队列priority_queue

优先级队列是拥有权值概念的queue,同样只允许在底端插入元素,顶端取出元素。其内的元素并非按插入的次序排列,而是按照权值排序,最大的权值排在前面。同样也是容器适配器。

默认情况下,priority_queue是利用最大堆实现的。

template < class T, class Container = vector<T>,           class Compare = less<typename Container::value_type> > class priority_queue

默认less比较器,创建的对象为递减的序列。

这里写图片描述

这里写图片描述

priority_queue的函数

这里写图片描述

队列的应用

1、生产者消费者模型
2、消息队列
3、排队现象
4、网络数据传输

原创粉丝点击