循环队列②:利用队列长度size判断空/满

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 typedef char DataType;
  5 
  6 #define QueueSize 40
  7 
  8 /*
  9 
 10 该种循环队列实现的原理是通过size实现判断队列是否已满
 11 
 12 */
 13 
 14 //构造循环队列
 15 typedef struct 
 16 {
 17     DataType  data[QueueSize];
 18     int front, rear, size;//用size记录队列的长度
 19 }ScQueue;
 20 
 21 //初始化循环队列
 22 void InitScQueue(ScQueue &Q)
 23 {
 24     Q.front = Q.rear = 0;
 25     Q.size = 0;//初始化时队列的长度为0
 26 }
 27 
 28 //判断循环队列是否为空---同时要判断flag是否为0
 29 bool ScQueueEmpty(ScQueue Q)
 30 {
 31     if (Q.front == Q.rear && Q.size == 0)
 32     {
 33         return true;
 34     }
 35     else
 36     {
 37         return false;
 38     }
 39 }
 40 
 41 //入队操作--插入队列
 42 bool EnterScqueue(ScQueue &Q, DataType x)
 43 {
 44     //判断队列是否已满
 45     if (Q.front == Q.rear && Q.size == QueueSize)
 46     {
 47         return false;
 48     }
 49     else
 50     {
 51         Q.data[Q.rear] = x;
 52         Q.rear += 1;
 53         //插入队列了要把长度加1
 54         Q.size += 1;
 55         return true;
 56     }
 57 }
 58 
 59 //出队操作--删除队列元素
 60 bool DeleteScqueue(ScQueue &Q, DataType &x)
 61 {
 62     //判断队列是否为空
 63     if (Q.front == Q.rear && Q.size == 0) 
 64     {
 65         return false;
 66     }
 67     else
 68     {
 69         x = Q.data[Q.front];
 70         Q.front += 1;
 71         //删除时长度减1
 72         Q.size -= 1;
 73         return true;
 74     }
 75 }
 76 
 77 //读取队头元素
 78 bool GetScqueueHead(ScQueue Q, DataType &x)
 79 {
 80     //判断队列是否为空
 81     if (Q.front == Q.rear && Q.size == 0)
 82     {
 83         return false;
 84     }
 85     else
 86     {
 87         x = Q.data[Q.front];
 88         return true;
 89     }
 90 }
 91 
 92 //清空队列---只要将三者全部置为0即可清空队列
 93 void ClearScqueue(ScQueue &Q)
 94 {
 95     Q.front = 0;
 96     Q.rear = 0;
 97     Q.size = 0;
 98 }
 99 
100 
101 int main()
102 {
103     char str[] = "ABCDEFGH";
104     char x;
105     
106     ScQueue Q;
107     InitScQueue(Q);
108 
109 
110     for (int i = 0; i < sizeof(str) - 1; i++)
111     {
112         //将字符串中的数据插入队列
113         EnterScqueue(Q, str[i]);
114     }
115 
116     DeleteScqueue(Q, x);
117     printf("出队列的元素为:%c\n", x);
118 
119     printf("顺序队列中的元素为:");
120     //判断是否队列不为空
121     if (ScQueueEmpty(Q) == false)
122     {
123         //这里循环时要注意用队列的头和尾进行循环
124         for (int i = Q.front; i < Q.rear; i++)
125         {
126             printf("%c", Q.data[i]);
127         }
128     }
129 
130 
131     
132 
133     getchar();
134     return 0;
135 }

 

posted @ 2020-10-09 23:29  小迪xiaodi  阅读(784)  评论(0)    收藏  举报