队列的基本操作

来源:互联网 发布: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著,张怀勇等译

 

原创粉丝点击