队列(Queue)
1. 队列的概念
1.1 队列的定义
- 队列是一种特殊的线性表,是一种运算受限的线性表。
- 队列是先进先出(FIFO,First In First Out)的线性表。
1.2 队列的逻辑结构和存储表示
- 队列的逻辑结构和线性表相同。
- 队列的抽象数据类型有两种典型的存储表示:基于数组的存储表示和基于链表的存储表示。
(1)基于数组的存储表示实现的队列称为顺序队列,顺序队列可以采用顺序表作为其存储表示,因此,可以在顺序队列的声明中用顺序表定义它的存储空间。
(2)基于链表的存储表示实现的队列称为链式队列,链式队列可以采用单链表作为其存储表示,因此,可以在链式队列的声明中用单链表定义它的存储空间。
1.3 队列的运算规则
- 队列中没有任何元素时称为空队列。
- 队列可定义为只允许在表的最末端进行插入和最前端进行删除的线性表。允许插入的一端叫队尾(rear),允许删除的一端叫队头(front)。
- 向一个队列插入新元素称为入队,它是把新元素放到队列的最末端,使之成为新的队尾元素。
- 从一个队列删除元素称为出队,它是把队头元素删除,使其下一个元素成为新的队头元素。
- 设定队列Q=( a1,a2,……,an ),称最先加入队列的元素 a1 为队头,最后加入队列的元素 an 为队尾。根据先进先出原则,队列中各元素的入队和出队顺序相同,都是按 a1,a2,……,an 的顺序入队和出队。
- 队列的模型:
2. 队列的抽象类定义——应用了模板类来描述队列抽象数据类型
文件:Queue.h
#ifndef QUEUE_H_ #define QUEUE_H_ template <class T> class Queue { public: Queue(){} //构造函数 virtual ~Queue(){} //析构函数 public: virtual bool getHead(T& x) const = 0; //读取队头元素,并将该元素的值保存至x virtual bool EnQueue(const T& x) = 0; //新元素x入队 virtual bool DeQueue(T& x) = 0; //队头元素出队,并将该元素的值保存至x virtual bool IsEmpty() const = 0; //判断队列是否为空 virtual bool IsFull() const = 0; //判断队列是否为满 virtual void MakeEmpty() = 0; //清空队列的内容 virtual int getSize() const = 0; //计算队列中元素个数 }; #endif /* QUEUE_H_ */
参考文献:
[1]《数据结构(用面向对象方法与C++语言描述)(第2版)》殷人昆——第三章
[2]《C/C++常用算法手册》秦姣华、向旭宇——第二章
[3] 百度搜索关键字:队列