今天复习一下数据结构里面的循环队列:
1.循环队列是顺序结构
2.循环队列的总长度是MAXSIZE - 1
3.指针实现
注:循环队列的总长度不是MAXSIZE,是MAXSIZE - 1!!!
计算式:
指针移动:(front + 1)%MAXSIZE
总长度:(rear - front + MAXSIZE)% MAXSIZE
#include <stdio.h>
#include <stdlib.h>
//最大长度
#define MAXSIZE 3
//循环队列
typedef struct SqQueue
{
int* data;
int front;
int rear;
}SqQueue;
//初始化队列
SqQueue* InitQueue()
{
SqQueue* queue = (SqQueue*)malloc(sizeof(SqQueue));
queue->data = (int*)malloc(MAXSIZE * sizeof(int));
queue->front = queue->rear = 0;
return queue;
}
//清空队列
void ClearQueue(SqQueue* queue)
{
if(queue != NULL)
{
queue->front = queue->rear = 0;
printf("队列已经清空!\n");
}
else
{
printf("未初始化队列!\n");
}
}
//销毁队列
void DestroyQueue(SqQueue* queue)
{
if(queue != NULL)
{
free(queue);
queue = NULL;
printf("队列已经销毁!\n");
}
else
{
printf("未初始化队列!\n");
}
}
//入队
void InsertQueue(SqQueue* queue, int data)
{
if((queue->rear + 1) % MAXSIZE != queue->front)
{
queue->data[queue->rear] = data;
queue->rear = (queue->rear + 1) % MAXSIZE;
}
else
{
printf("队列已满!\n");
}
}
//出队
void PopQueue(SqQueue* queue)
{
if(queue->front != queue->rear)
{
queue->front = (queue->front + 1) % MAXSIZE;
}
else
{
printf("队列已空!\n");
}
}
//队长
void QueueLength(SqQueue* queue)
{
printf("%d\n", (queue->rear - queue->front + MAXSIZE) % MAXSIZE);
}
//队列遍历
void ThroughQueue(SqQueue* queue)
{
int begin = queue->front;
int end = queue->rear < queue->front ? queue->rear + MAXSIZE : queue->rear;
int index;
for (begin;begin < end;begin++)
{
index = begin >= MAXSIZE ? begin - MAXSIZE : begin;
printf("%d\t", queue->data[index]);
}
printf("\n");
}
int main()
{
int judge, data;
SqQueue* queue = NULL;
while(1)
{
fflush(stdin);
printf("1.初始化队列\n2.清空队列\n3.销毁队列\n4.入队\n5.出队\n6.遍历\n7.队长\n");
scanf("%d", &judge);
switch(judge)
{
case 1://初始化队列
queue = InitQueue();
break;
case 2://清空队列
ClearQueue(queue);
break;
case 3://销毁队列
DestroyQueue(queue);
break;
case 4://入队
printf("请输入一个数据:");
scanf("%d", &data);
InsertQueue(queue, data);
break;
case 5://出队
PopQueue(queue);
break;
case 6://遍历
ThroughQueue(queue);
break;
case 7://队长
QueueLength(queue);
break;
default:
printf("请输入正确的数字!");
}
}
return 0;
}