循环队列的顺序存储结构及其操作

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <exception>
 4 using namespace std;
 5 
 6 //循环队列的顺序存储结构
 7 typedef int QElemType;
 8 typedef int Status;
 9 const int ok = 1;
10 const int error = 0;
11 const int maxSize = 5;
12 
13 typedef struct 
14 {
15     QElemType data[maxSize];
16     int front;
17     int rear;
18 }SqQueue,*pSqQueue;
19 
20 //初始化队列
21 Status InitQueue(SqQueue *Q)
22 {
23     Q->front = 0;
24     Q->rear = 0;
25     for(int i = 0;i!=maxSize;++i)
26         Q->data[i]=0;
27     return ok;
28 }
29 
30 //获取队列长度
31 int QueueLenght(const SqQueue *Q)
32 {
33     return (maxSize-Q->front+Q->rear)%maxSize;
34 } 
35 
36 //入队操作,如果队列未满,则插入元素e为Q新的队尾元素
37 Status EnQueue(SqQueue *Q,const int &e)
38 {
39     if((Q->rear+1)%maxSize==Q->front)
40     {
41         cout<<"队列已满,入队失败!"<<endl;
42         return error;
43     }
44     Q->data[Q->rear]=e;
45     Q->rear=(Q->rear+1)%maxSize;
46     return ok;
47 }
48 Status DeQueue(SqQueue *Q)
49 {
50     if(Q->rear==Q->front)
51         return error;
52     cout<<"出队列:"<<Q->data[Q->front]<<endl;;
53     Q->front=(Q->front+1)%maxSize;
54     return ok;
55 }
56 void outputQueue(const SqQueue *Q)
57 {
58     if(Q->rear == Q->front)
59     {
60         cout<<"队列空了!"<<endl;
61         return ;
62     }
63 
64     if(Q->rear>Q->front)
65     {
66         for(int i = Q->front ;i != Q->rear;i++)
67             cout<<Q->data[i]<<"  ";
68     }
69     else
70     {
71         for(int i = Q->front;i!=maxSize;++i)
72         {
73             cout<<Q->data[i]<<"  ";
74         }
75         for(int j = 0;j!=Q->rear;++j)
76         {
77             cout<<Q->data[j]<<"  ";
78         }
79     }
80 }
81 int _tmain(int argc, _TCHAR* argv[])
82 {
83     SqQueue *qQueue = new SqQueue;
84     InitQueue(qQueue);
85     EnQueue(qQueue,1);
86     EnQueue(qQueue,2);
87     EnQueue(qQueue,3);
88     EnQueue(qQueue,4);
89     DeQueue(qQueue);
90     DeQueue(qQueue);
91     DeQueue(qQueue);
92     DeQueue(qQueue);
93     EnQueue(qQueue,5);
94     DeQueue(qQueue);
95     cout<<"队列长度为:"<<QueueLenght(qQueue)<<endl;
96     outputQueue(qQueue);
97     return 0 ;
98 }
原文地址:https://www.cnblogs.com/crazycodehzp/p/3541730.html