- 完整实现代码
概述
队列是一种先进先出 (FIFO) 的数据结构,它允许在一端插入数据,在另一端删除数据。最先进入队列的数据最先出队列。除此之外,队列还允许访问队头元素和队尾元素、获取队列长度和判断空列队等操作。
队列不提供遍历的方法,也不提供迭代器。
如上图所示,插入操作将新的数据元素插到队尾,删除操作则将队头数据元素删掉,这种结构即可保证最先进入队列的数据元素可以最先出队列。
队列操作
- push()
如上示例演示了队列的插入操作,以及证明了插入操作总是在队尾进行。 - pop()
如图所示,删除操作总是删掉队头的数据元素。
队列实现代码
以下是STL中对于队列的实现:
template <class T, class Sequence=deque<T>>
class queue {
...
protected:
Sequence c;
public:
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference front() { return c.front(); }
const_reference front() const { return c.front(); }
reference back() { return c.back(); }
const_reference back() const { return c.back(); }
void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_front(); }
};
...
}
实际上,如同 stack
一般, 在 STL 中队列也是作为一种适配器出现的。
几乎所有的序列式容器都支持在两端插入和删除数据元素的操作,若以某种序列式容器为底部结构,只保留其一端的插入接口和另一端的删除接口,使其符合先进先出的特性,便轻而易举的形成了一个队列。
STL 中以 deque
为默认的底部容器,实现代码非常简单。
当然,我们可以为其制定适配容器,如下是演示示例:
以上简单介绍了STL中队列的使用及原理。
——谢谢!
参考资料
- 模拟实现的队列
【作者:果冻 http://blog.csdn.net/jelly_9】