队列的基本操作
来源:互联网 发布:python int函数 编辑:程序博客网 时间:2024/04/23 18:09
队列的基本操作
队列是一种先进先出(First In-First Out)的表。元素在最尾端入队列,在最首端出队列。队列的应用相当广泛,只要满足先进先出的特性就可以利用。比如我们日常排队打饭买票、不少高效算法运用队列、CPU资源竞争通过请求时间顺序排成一个队列等。队列在我们日常生活以及程序设计中都起到非常重要的作用。
队列的结构,如图所示:
对于队列的基本操作,具体要做些什么?
1.将数据压入Queue
2.将数据从Queue弹出
3.判断此Queue是否为空
4.返回此Queue元素个数
5.返回此Queue前端元素
6.返回此Queue后端元素
7.对空队列企图进行弹出元素和返回首端元素及尾端元素的情况,进行异常处理
通过观察STL源码,进而学习世界一流程序员的身手、组合成自己的代码、进一步提升STL扩充能力,是一种相当合适的方式。
下面上传部分STL源代码截图~~
选自<queue> ,说明实作在stl_queue.h中,默认用deque作为底层容器
选自stl_queue.h,对底层容器及对应类型进行了命名,容器默认为deque.
由于deque是双向开口的数据结构,若以deque为底部结构并封闭首端入口和尾端出口,便轻而易举地形成了一个queue。
并且,list也是双向开口的数据结构,而且deque所选用的函数,list都具备。所以,用list作为底部容器也是一个不错的选择。
选自stl_queue.h,这里对判断队列是否为空empty()和获取队列元素个数size()进行了定义
选自stl_queue.h,这里对获取首端元素front()进行了定义
选自stl_queue.h,这里对获取尾端元素back()进行了定义
选自stl_queue.h,这里对元素入队列push()进行了定义
选自stl_queue.h,这里对元素出队列pop()进行了定义
最后通过以上STL源代码以及部分参考文献,表达出自己的代码:
//Queue.hpp#ifndef QUEUE_HPP#define QUEUE_HPP#include<iostream>#include<deque>#include<list>#include<exception> template<typename T>class Queue{private:std::list<T> c; //由于Stack的内部结构和deque以及list很相似 ,也可以定义std::queue<T> c;public:class ReadEmptyQueue :public std::exception{public:virtual const char* what()const throw(){return "the Queue is empty";}};bool empty()const {return c.empty(); } //判断队列是否为空typename std::list<T>::size_type size()const {return c.size(); } //返回容器元素个数T& front() //返回首端元素{if (empty())throw ReadEmptyQueue();T& front(c.front());return front;}T& back() //返回尾端元素{if (empty())throw ReadEmptyQueue();T& back(c.back());return back;}void push(const T& element) //入队列操作{c.push_back(element);}bool pop() //出队列操作{if (empty()){throw ReadEmptyQueue();return false; } c.pop_front(); return true;}}; #endif
参考文献:
1.《C++标准模板库 -自修教程及参考手册-》 Nicolai M.Josuttis著,侯捷/孟岩译
2.《STL源码剖析》 侯捷著
3.《数据结构与算法分析 C++描述》第3版 Mark Allen Weiss著,张怀勇等译
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作!
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- 队列的基本操作
- Sqlserver转mysql方法
- 第1天
- java 守护线程
- ios6下的storyboard使用详解
- 使用gdb调试程序
- 队列的基本操作
- jdbc(Oracle数据库)
- Java中的50个关键字
- mongodb常用命令
- 与时俱进,让思维飞起来
- Java中JDK的安装和path,classpath的环境配置
- 2013华为上机试题
- 想想这些,工作的事就简单了
- 中用简易方法实现淡入淡出的启动画面