7.7 栈与队列-队列及其操作

来源:互联网 发布:自然语言处理算法 编辑:程序博客网 时间:2024/05/18 03:07
队列(Queue)也是一种限定存取位置的线性表。它只允许在表的一端插入,而在另一端删除。

允许插入的一端称为队尾(rear),允许删除的一端叫做队头(front)。每次在队尾加入新元素,加入称为进队,删除称为出队。(查看动画演示

队列的这种特性正好与栈相反,叫做先进先出(FIFO,First In First Out)。

顺序队列

空队时指针(下标)front和rear在一起都指向队前方,当有元素进队,则rear后移;有元素出队,则front后移,最后,开始时分配给队的前端不再被利用。(查看动画演示

为了充分利用队列,顺序队列总是做成一个逻辑上的循环队列。


注意:空队时rear等于front,满队时必须空一个位置。

顺序循环队列类模板

template<typename T>class Queue
{
       int rear,front; //队尾与队头下标
       T *elements; //存放队列元素的容器
       int maxSize; //队列最多可容纳元素个数+1
public:
       Queue(int ms=18);
       ~Queue()
       {
              delete[] elements;
       }
       bool IsEmpty() const //判队空
       {
              return front==rear;
       }
       bool IsFull() const //判队满
       {
              return (rear+1)%maxSize==front;
       }
       int Length() const  //求队中元素数,注意求余算法
       {
              return (rear-front+maxSize)%maxSize;
       }
     
       void EnQue(const T &data); //进队
       T DeQue(); //出队
       T GetFront(); //取队头数据
       void MakeEmpty()//队置空(初始态)
       {
              front=rear=0;
       }
      
};

更详细的代码参见【例7.10】。

链队列类模板示例:请参见【例7.11】。
0 0
原创粉丝点击