队列的封装(线性循环队列)

源代码

Queue.h

 1 #include<iostream>
 2 using namespace std;
 3 #define QMaxSize 100  //队列最大容量
 4 typedef int   QElemType;//提高程序可读性 
 5 typedef QElemType   Queue_Data;   //队列存储元素类型
 6 typedef struct QueueNode                //存储结构
 7 {
 8     Queue_Data data[QMaxSize];
 9     int front;
10     int rear;
11     int count;
12 }QueueNode,*Que;
13 class  Queue
14 {
15 private:
16     Que  Q;
17 public:
18     Queue();//初始化空的队列
19     bool EnterQueue(Queue_Data e);// 入队操作
20     bool DeleteQueue(Queue_Data *e);//出队操作;
21     bool IsEmpty();//判空
22     bool IsFull();//判满
23     void Display();
24 };
25 Queue::Queue()
26     {  
27         Q=new QueueNode;
28         Q->front=0;
29         Q->rear=0;
30         Q->count=0;
31     }
32 bool Queue::EnterQueue(Queue_Data e)
33 {
34     if(!IsFull())//如果队列不满的话,增加元素
35     {
36         Q->count++;//计数器示数即为队列元素个数
37         Q->data[Q->rear]=e;//队尾指针所指空间即为下一个入队元素的存放位置
38         Q->rear=(Q->rear+1)%QMaxSize;//队列的精华
39         return true;
40     }
41     else return false;
42 }
43 bool Queue::DeleteQueue(Queue_Data *e)
44 {
45     if(!IsEmpty())//如果队列不为空,操作合法
46     {
47         *e=Q->data[Q->front];//队首指针指示位置即为要出队元素的位置
48         Q->front=(Q->front+1)%QMaxSize;//这里容易出错,切记是加一
49         Q->count--;
50         return true;
51     }
52     else return false;
53 }
54 bool Queue::IsEmpty()
55 {
56     if(Q->count==0)//判空最简单的一种计数器方法
57         return true;
58     else 
59         return false;
60 }
61 bool Queue::IsFull()
62 {
63     if(Q->count==QMaxSize)//判满,计数器
64         return true;
65     else 
66         return false;
67 }
68 void Queue::Display()
69 {  
70     int b;
71     int p;
72     b=Q->count;
73     p=Q->front;
74     while(b)
75     {
76         cout<<Q->data[p]<<endl;
77         p=(p+1)%QMaxSize;
78         b--;
79     }
80 }

测试函数

Main.cpp

int main()
{
    Queue q;
    bool t;
    while(true)
    {   
        cout<<"是否入队 "<<endl;
        cout<<"是    1"<<endl;
        cout<<"否    0"<<endl;
        cin>>t;
        if(!t)
        {
            break;
        }
        Queue_Data e;
        cout<<"请输入队元素"<<endl;
        cin>>e;
        if(!q.EnterQueue(e))
           cout<<"Defeat"<<endl;

    }
    q.Display();
    while(true)
    {   
        cout<<"是否出队 "<<endl;
        cout<<"是    1"<<endl;
        cout<<"否    0"<<endl;
        cin>>t;
        if(!t)
        {
            break;
        }
        Queue_Data e;
        if(q.DeleteQueue(&e))
           cout<<"出队元素   "<<e<<endl;
        else
             cout<<"Defeat"<<endl;
    }
    q.Display();
    return 0;
}

运行结果

原文地址:https://www.cnblogs.com/Howbin/p/8780018.html