#include <stdio.h>
#define MaxSize 5
//循环队列,first in first out 先进先出
//在rear添加,在front删除
typedef int ElementType;
//结构体
typedef struct SqStack {
ElementType data[MaxSize];
int front, rear;
} SqQueue;
//init循环队列,加引用
void initQueue(SqQueue &queue) {
queue.front = queue.rear = 0;
}
//判断队列是否为空
bool isEmptyQueue(SqQueue queue) {
if (queue.rear == queue.front) {
return true;
}
return false;
}
//EnQueue
bool EnQueue(SqQueue &queue, ElementType data) {
//判断是否超过最大值
if ((queue.rear + 1) % MaxSize == queue.front) {
return false;
}
//在队尾添加数据
queue.data[queue.rear] = data;
//赋值队尾数据
queue.rear = (queue.rear + 1) % MaxSize;
return true;
}
//遍历打印队列
void printQueue(SqQueue queue) {
if (isEmptyQueue(queue)) {
printf("printQueue():queue is empty");
} else {
int start = queue.front;
int end = queue.rear;
printf("start=%d\n", start);
printf("end=%d\n", end);
if (end > start) {
for (int i = start; i < end; i++) {
printf("data[%d]=%d\n", i, queue.data[i]);
}
} else if (start - end == 1) {
for (int i = 0; i < MaxSize; i++) {
if (i != end) {
printf("data[%d]=%d\n", i, queue.data[i]);
}
}
} else if (end < start) {
for (int i = 0; i < MaxSize; i++) {
if(i!=end){
if (end == 1 && i == 0) {
printf("data[%d]=%d\n", i, queue.data[i]);
} else if (i == start || i < MaxSize && i > start) {
printf("data[%d]=%d\n", i, queue.data[i]);
}
}
}
}
}
}
//DeQueue
bool DeQueue(SqQueue &queue, ElementType &data) {
if (!isEmptyQueue(queue)) {
//从栈顶删除
data = queue.data[queue.front];
//更改栈顶标记
queue.front = (queue.front + 1) % MaxSize;
return true;
}
return false;
}
int main() {
SqQueue queue;
bool flag;
ElementType data;
initQueue(queue);
flag = isEmptyQueue(queue);
if (flag) {
printf("---queue is empty---\n");
} else {
printf("---queue is not empty---\n");
}
EnQueue(queue, 1);
EnQueue(queue, 2);
EnQueue(queue, 3);
EnQueue(queue, 4);
printf("---printQueue---\n");
printQueue(queue);
DeQueue(queue, data);
DeQueue(queue, data);
DeQueue(queue, data);
DeQueue(queue, data);
printf("---printQueue---\n");
printQueue(queue);
EnQueue(queue, 5);
EnQueue(queue, 6);
printf("---printQueue---\n");
printQueue(queue);
DeQueue(queue, data);
DeQueue(queue, data);
printf("---printQueue---\n");
printQueue(queue);
}
C语言实现循环队列,入队,出队,遍历打印
于 2023-05-16 22:49:57 首次发布