数据结构与算法——栈与队列(三) 学习笔记

二、队列

队列(queue)仍为一种线性序列。与栈类似,队列也是受限的序列,其中一端只能够出,另一端只能够进。(联想排队时的情况)
只能在队尾插入(查询):enqueue(), rear()
只能在队首删除(查询):dequeue(), front()

下图摘自清华大学《数据结构(C++语言版)》

数据结构与算法——栈与队列(三) 学习笔记_第1张图片

与栈结构恰好相反,队列中各对象的操作次序遵循先入先出(FIFO) 的规律。在社会资源或是各种计算资源的分配的场合中被广泛应用

2.1 ADT接口

操作 功能
size() 报告队列的规模(元素总数)
empty() 判断队列是否为空
enqueue(e) 将e插入队尾
dequeue() 删除并返回队首对象
front() 引用队首对象
rear() 引用队尾对象

2.2 Queue模板类

与栈同理,队列也属于序列,故亦可直接基于向量或者列表派生,继承(沿用)其size()和empty()接口,只需写其他的特殊接口。
由于队列需要在队首和队尾分别执行删除和插入操作,为降低复杂度,使用列表派生更加方便。

以下代码摘自清华大学《数据结构(C++语言版)

template <typename T> class Queue : public List<T> { //队列模板类(继承List原有接口)
public: //size()、empty()以及其它开放接口均可直接沿用
	void enqueue(T const& e) { insertAsLast(e); } //入队:尾部插入
	T dequeue() { return remove(first()); } //出队:首部删除
	T& front() { return first()->data; } //队首
};

如此实现的队列接口,其时间复杂度均为常数O(1)

你可能感兴趣的:(数据结构,c++)