#include <stdio.h>
#include <stdlib.h>
// 定义队列的容量,可以修改为更小的值测试循环队列
#define MAX_SIZE 100
typedef int dataType;
// 2.4.3 顺序存储的循环队列
typedef struct
{
dataType a[MAX_SIZE];
int front,rear; // 队头指针和队尾指针
}seqQueue;
// 1.初始化队列
void init(seqQueue *queue)
{
queue->front = queue->rear = 0;
}
// 2.判断队列是否为空
int empty(seqQueue queue)
{
return queue.rear == queue.front;
}
// 3.打印队列
void display(seqQueue queue)
{
if(empty(queue))
{
printf("队列为空!\n");
return;
}
while (!empty(queue))
{
printf("%d ",queue.a[queue.front]);
queue.front = (queue.front + 1)%MAX_SIZE;
}
printf("\n");
}
// 4.获取队首结点的值
dataType get(seqQueue queue)
{
if(empty(queue))
{
printf("队列为空!\n");
exit(1);
}
return queue.a[queue.front];
}
// 5.入队操作
void insert(seqQueue *queue, dataType x)
{
if((queue->rear + 1)%MAX_SIZE == queue->front)
{
printf("队列已满,无法入队!\n");
exit(1);
}
queue->a[queue->rear] = x;
queue->rear = (queue->rear + 1)%MAX_SIZE;
}
// 6.出队操作
void del(seqQueue *queue)
{
if(queue->rear == queue->front)
{
printf("队列为空,无法出队!\n");
exit(1);
}
queue->front = (queue->front + 1)%MAX_SIZE;
}
// 7.获取队列中元素的个数
int getSize(seqQueue queue)
{
return (queue.rear-queue.front+MAX_SIZE)%MAX_SIZE;
}
int main()
{
seqQueue queue; // 声明队列
init(&queue); // 初始化队列
dataType a = 1, b = 2;
insert(&queue,a); // 元素入队
insert(&queue,b); // 元素入队
printf("此时队列中元素有%d个\n", getSize(queue));
display(queue); // 打印队列元素
del(&queue); // 队首元素出队
printf("队首元素是%d\n", get(queue));
display(queue); // 打印队列元素
return 0;
}
版权属于:
lixiangrong
作品采用:
《
署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
》许可协议授权
评论 (0)