顺序循环队列的基本操作
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 10
//顺序循环队列(rear:即将入队的元素的下标,不是真正的队尾,是队尾的后一个)
typedef struct {
int rear;
int front;
int* data;
} SqQueue;
//初始化
void initSqQueue(SqQueue* q) {
q->data = (int*)malloc(sizeof(int) * MAXSIZE);
q->rear = 0;
q->front = 0;
}
//入队
void enQueue(SqQueue* q, int e) {
//判断是否队满
if ((q->rear+1)%MAXSIZE == q->front)
{
printf("队满\n");
return;
}
int index = q->rear;
q->data[index] = e;
q->rear = (q->rear + 1) % MAXSIZE;
}
//出队
void deQueue(SqQueue* q, int* res) {
//判断队是否为空
if (q->rear == q->front)
{
printf("队空\n");
return;
}
*res = q->data[q->front];
q->front = (q->front+1) % MAXSIZE;
}
//求队列长度
int getSize(SqQueue* q) {
return (q->rear + MAXSIZE - q->front) % MAXSIZE;
}
//取对头元素
int getHead(SqQueue* q) {
if (getSize(q) == 0)
{
printf("队空\n");
return -999;
}
return q->data[q->front];
}
void main() {
SqQueue q;
initSqQueue(&q);
printf("刚初始化后测试取队头元素===>%d\n", getHead(&q));
printf("测试入队\n");
for (int i = 0; i < 9; i++)
{
enQueue(&q, i);
}
printf("入队后测试取队头元素===>%d\n", getHead(&q));
printf("队列当前长度%d\n", getSize(&q));
printf("测试出队\n");
int res;
for (int i = 0; i < 9; i++)
{
deQueue(&q, &res);
printf("队尾元素===>%d出队\n", res);
}
printf("刚初始化后测试取队头元素===>%d\n", getHead(&q));
}