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