队列

1.队列定义

  • 先进先出first in first out
  • 按照到达的顺序删除元素
  • 所有的插入在表的一端进行,所有的删除在表的另一端
  • 主要元素 : 队头front  队尾rear
  • 主要操作: enQueue  deQueue getFront  isEmpty

2.实现方式

  • 顺序队列  关键是防止假溢出
  • 链式队列  用单链表方式存储

顺序队列(采用循环队列实现)

 1 #include<iostream>
 2 using namespace std;
 3 const int QueueSize=100;
 4  
 5 class CirQueue
 6 {
 7     public:
 8         CirQueue()                             //构造函数,置空队列
 9         {
10             front=rear=0;
11         }
12         ~CirQueue(){cout<<"destory";}    //析构函数
13         void EnQueue(int x);                   //元素x入队
14         int DeQueue();                         //队头元素出队
15         int GetQueue();                       //获取队头元素,不删除队头
16         bool Empty()                          //判断队列是否为空
17         {
18             if(front==rear)
19                 return 1;
20             else
21                 return 0;
22         }
23     private:
24         int data[QueueSize];                  //存放队列的数组
25         int front,rear;                      //头指针与尾指针
26 };
27  
28 void CirQueue::EnQueue(int x)
29 {
30     if((rear+1)%QueueSize==front)             //判断队列是否已满
31         cout<<"queue is full,can't put "<<x<<" into it"<<endl;
32     else
33     {
34         rear=(rear+1)%QueueSize;             //移动尾指针指向下一个空间
35         data[rear]=x;                        //元素x入队
36     }
37 }
38  
39 int CirQueue::DeQueue()                    //队头元素出栈     
40 {
41     if(Empty())                            //判断队列是否为空
42         cout<<"queue is empty"<<endl;
43     else
44     {
45         front=(front+1)%QueueSize;        //移动队头指针指向下一个空间,即被删元素所在位置
46         return data[front];               //返回被删除的元素的值
47     }
48 }
49  
50 int CirQueue::GetQueue()
51 {
52     if(Empty())
53         cout<<"queue is empty"<<endl;
54     else
55     {
56         return data[(front+1)%QueueSize];
57     }
58 }
59 int main()
60 {
61     CirQueue Q;
62     Q.EnQueue(5);
63     Q.EnQueue(9);
64     Q.EnQueue(7);
65     cout<<Q.DeQueue()<<endl;
66     cout<<Q.GetQueue()<<endl;
67     cout<<Q.DeQueue()<<endl;
68     cout<<Q.DeQueue()<<endl;
69     Q.DeQueue();
70     return 0;
71 }
View Code

 

posted @ 2020-06-12 22:02  wsl96  阅读(128)  评论(0编辑  收藏  举报