两种方式实现循环队列 -- 数组形式 和 链表形式
目录
题目:
需要注意的是这里的队列的长度是限定好的 因此无论我们在使用链表还是使用数组时 均需要考虑K的影响。因为这是个循环队列 为了区别该队列为空还是满 我们要增加一个额外的空间 作为缓冲
数组形式:
创建基本结构
typedef struct {
int *a ;
int head ;
int tail ;
int k ;
} MyCircularQueue;
MyCircularQueue* myCircularQueueCreate(int k) {
MyCircularQueue* cq = ( MyCircularQueue*)malloc(sizeof(MyCircularQueue));
cq->a =(int*)malloc(sizeof(int)*(k+1));//a也需要动态开辟出来
cq->head = cq->tail = 0;
cq->k=k;
return cq;
}
判断数组是否为空
bool myCircularQueueIsEmpty(MyCircularQueue* obj)
{
return obj->head == obj->tail;
}
判断数组是否满了
bool myCircularQueueIsFull(MyCircularQueue* obj) {
return (obj->tail+1)%(obj->k+1)==(obj->head);
}
插入数据
这个需要注意的是 队列的长度是固定的 如果数组下标会超出限定值之外时 要对下标进行一个处理
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
//插入 要确定是否满了
if(myCircularQueueIsFull(obj))
{
return false;
}
//开始插入
obj->a[obj->tail]=value;
obj->tail&#