队列

来源:互联网 发布:斯坦福英语软件下载 编辑:程序博客网 时间:2024/05/29 02:32

      数据结构期中考试一塌糊涂,下定决心利用这学期剩下不多的时间好好学学了。

      先从队列开始吧

1.队列的基本概念

        只能在表的一端进行插入操作,只能在表的另一端进行删除操作,这种数据结构称为队列。把允许插入的一端叫队尾(rear),允许删除的一端叫对头(front)。也就是所谓的First In First  Out。

    队列的实现也有基于数组和指针两种方式。其中基于指针实现,没有任何技术难度,每个节点加上一个指针成员即可,但是在一定程度上消耗了更多的空间。而基于数组的实现,则会出现一个问题,就是随着元素的不断入队列和出队列,可能会导致整体可用的范围在不断缩小,最终导致效率低下,储存不了几个元素。所以就出现了一个循环队列的东东。循环队列,基于数组实现,无论是查找还是插入删除都是最高效的。实现的核心是一个取模的运算操作。

2.循环队列的实现

         队列长度:(rear-front+QueneSize)%QueneSize

       队空:front==rear

       队满:(rear+1)%QueueSize==front

#include<iostream>  using namespace std;  const int QueueSize=100;    class CirQueue  {      public:          CirQueue()                             //构造函数,置空队列          {              front=rear=0;          }          ~CirQueue(){cout<<"destory";}    //析构函数          void EnQueue(int x);                   //元素x入队          int DeQueue();                         //队头元素出队          int GetQueue();                       //获取队头元素,不删除队头          bool Empty()                          //判断队列是否为空          {              if(front==rear)                  return 1;              else                  return 0;          }      private:          int data[QueueSize];                  //存放队列的数组          int front,rear;                      //头指针与尾指针  };    void CirQueue::EnQueue(int x)  {      if((rear+1)%QueueSize==front)             //判断队列是否已满          cout<<"queue is full,can't put "<<x<<" into it"<<endl;      else      {          rear=(rear+1)%QueueSize;             //移动尾指针指向下一个空间          data[rear]=x;                        //元素x入队      }  }    int CirQueue::DeQueue()                    //队头元素出栈       {      if(Empty())                            //判断队列是否为空          cout<<"queue is empty"<<endl;      else      {          front=(front+1)%QueueSize;        //移动队头指针指向下一个空间,即被删元素所在位置          return data[front];               //返回被删除的元素的值      }  }    int CirQueue::GetQueue()  {      if(Empty())          cout<<"queue is empty"<<endl;      else      {          return data[(front+1)%QueueSize];      }  }  int main()  {      CirQueue Q;      Q.EnQueue(5);      Q.EnQueue(9);      Q.EnQueue(7);      cout<<Q.DeQueue()<<endl;      cout<<Q.GetQueue()<<endl;      cout<<Q.DeQueue()<<endl;      cout<<Q.DeQueue()<<endl;      Q.DeQueue();      return 0;  }  
这里队列储存是int,是便于实现。可以存储其他任意类型的数据结构。


0 0
原创粉丝点击