队列<queue>

来源:互联网 发布:windows apm命令 编辑:程序博客网 时间:2024/05/29 17:50

队列的概念:

指允许在一端进行插入、在另一端进行删除的线性表。允许插入的一端是队尾,通常用rear(尾指针)总是指向队尾,允许删除的是排头,front(头指针)指向排头元素的前一个位置。

循环队列:

将队列的最后一个位置绕到第一个位置,形成逻辑上的环状,供队列循环使用;在循环队列中,当储存的最后一个位置被使用而再要进行入队时,只要第一个位置空闲,便可以将第一个元素放到第一个位置,即存储空间的第一个位置作为队尾。

注意:当rear = front时,不能确定队列是空还是满,需要增加一个标志来判断。比如s=0时,说明队列空,s=1时,队列满。

入队操作:

判断队列是否满。当循环队列非空时且头指针等于尾指针时,说明循环队列已满,不能进行入队操作

将队尾指针进一(即rear=rear+1),并当rear=m+1时,rear1

ƒ将新元素x插入队尾中时,要置循环队列非空的标志。

退队操作:

判断队列是否空

将排头指针进一,即front=front+1;当front=m+1时,front=1

ƒ排头指针指定的元素赋给指定的变量。

4.判断退队后循环队列是否为空。

 

循环队列代码:

 1 #include<iostream>

  2 using namespace std;

  3

  4 template<class Type>

  5 class Queue

  6 {

  7 public:

  8         Queue(int);

  9         void prt_Queue();

 10         int flag_Queue();

 11         void ins_Queue(Type);

 12         Type del_Queue();

 13 private:

 14         int mm;

 15         int front;

 16         int rear;

 17         int s;

 18         Type *q;

 19 };

 20

 21 template<class Type>

 22 Queue<Type>::Queue(int m)

 23 {

 24         mm = m;

 25         q = new Type[mm];

 26         front = mm;

 27         rear = mm;

 28         s = 0;

 29 }

 30 template<class Type>

 31 void Queue<Type>::prt_Queue()

 32 {

 33         int i;

 34         cout<<"front="<<front<<endl;

 35         cout<<"rear="<<rear<<endl;

 36         if(s == 0)

 37         {

 38                 cout<<"empty!"<<endl;

 39                 return ;

 40         }

 41         i = front;

 42         do

 43         {

 44                 i = i+1;

 45                 if(i == mm+1)

 46                 i = 1;

 47                 cout<<q[i-1]<<endl;

 48         }while(i!=rear);

 49         return ;

 50 }

 51 template<class Type>

 52 int Queue<Type>::flag_Queue()

 53 {

 54         if((s==1)&&(rear == front))

 55         return -1;

 56         if(s == 0)

 57         return 0;

 58         return 1;

 59 }

 60 template<class Type>

61 void Queue<Type>::ins_Queue(Type x)

 62 {

 63         if((rear==front)&&(s==1))

 64         {

 65                 cout<<"Queue is overflow!"<<endl;

 66         }

 67         rear = rear+1;

 68         if(rear == mm+1)

 69         rear = 1;

 70         q[rear-1]= x;

 71         s = 1;

 72         return ;

 73 }

 74 template<class Type>

75 Type Queue<Type>::del_Queue()

 76 {

 77         Type y;

 78         if(s == 0)

 79         {

 80                 cout<<"Empty!"<<endl;

 81         }

 82         front = front+1;

 83         if(front == mm+1)

 84         front = 1;

 85         y = q[front-1];

 86         if(front == rear)

 87         s= 0;

 88         return y;

 89 }

#include"queue.h"

int main()

{

        Queue<int>q(10);

        q.prt_Queue();

        q.ins_Queue(5);

        q.ins_Queue(4);

        q.ins_Queue(3);

        q.prt_Queue();

}

~                     

 

1 0
原创粉丝点击