给定一个大小为MAXSIZE的数组储存一个队列,经过若干次的插入和删除以后,当队尾指针 rear = MAXSIZE 时,呈现队列满的状态,而事实上数组的前部可能还有空闲的位置。为了有效地利用空间,引入循环队列(环状)。
在循环队列中,如果队列中最后一个结点存放在数组的最后一个元素位置,而数组前面有空位置的话,则下次在进行插入操作时,将插入到数组最前面那个元素的位置。其他情况下的插入操作和一般的队列的插入操作一样。
如果再插入一个新的结点,则数组空间将全部被占用,队列已满,且rear == front。
若删除一个结点,队列成为空队列,也有 rear == front。
如何区别?
方法一:
设置一个标志。由于rear+1使rear==front -> 满队列
由于 front +1 使rear == front -> 空队列
方法二:
牺牲一个数组元素的空间,即若数组大小为MAXSIZE,该数组所表示的循环队列最多允许储存MAXSIZE-1个结点。
循环队列满的条件:(rear+1)%MAXSIZE == front
循环队列空的条件: rear == front
#include <stdio.h>
#include <stdlib.h>
const int MAXSIZE = 5;
typedef struct
{
int a[MAXSIZE];
int front;
int rear;
}sequence_queue;
void init(sequence_queue *sq)
{
sq->front=0;
sq->rear=0;
}
void insert(sequence_queue *sq,int x)
{
if((sq->rear+1)%MAXSIZE==sq->front)
{
printf("full\n");
return ;
}
sq->a[sq-

本文介绍了循环队列的概念,旨在有效利用空间避免数组在队列满时出现的浪费。循环队列在队尾指针到达数组末尾时,会重新从数组开头插入元素。当(rear+1)%MAXSIZE == front时,队列满;当rear == front,队列为空。文中探讨了两种判断满队列和空队列的方法,并提到了牺牲一个数组元素来区分这两种状态的情况。
最低0.47元/天 解锁文章
1149

被折叠的 条评论
为什么被折叠?



