巅云建站,as.net 网站开发视频教程,梧州网站制作公司,网上开店如何推广自己的网店1. 思路解析 循环队列就是在只有有限的空间时使用队列实现循环存储数据#xff0c;有双向链表和数组两种选择#xff0c;这里我们使用数组实现循环队列#xff08;因为链表我不会 -#xff09; 2. 相关函数及其实现 2.1 判空与判满
判空#xff1a;直接返回头尾… 1. 思路解析 循环队列就是在只有有限的空间时使用队列实现循环存储数据有双向链表和数组两种选择这里我们使用数组实现循环队列因为链表我不会 - 2. 相关函数及其实现 2.1 判空与判满
判空直接返回头尾是否相等的结果相等为空反之不为空
判满判断tail1head的结果是否为真是则满反之不满需要注意的是在tail指向数组最后一个元素时tail1越界所以要使用取模运算限制其范围。
bool myCircularQueueIsEmpty(MyCircularQueue* obj)
{return obj-head obj-tail;
}bool myCircularQueueIsFull(MyCircularQueue* obj)
{return (obj-tail 1) % (obj-k 1) obj-head;
} 2.2 入队列与出队列
入队列入队列要判断是否为满满则不能插入返回false不满直接插入tail同样取模防止越界
出队列出队列判断是否为空为空不能出队列返回false不为空直接将head当然也要取模保证不越界。
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value)
{if(myCircularQueueIsFull(obj))return false;obj-a[obj-tail] value;obj-tail;obj-tail % (obj-k1);return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj)
{if(myCircularQueueIsEmpty(obj))return false;obj-head;obj-head % (obj-k1);return true;
} 2.3 取队首与队尾元素
取队首判断队列是否为空为空返回-1不为空直接返回队头元素
取队尾判断队列是否为空为空返回-1不为空返回tail前一个元素也就是队尾元素这里由于不是直接返回tail所指元素而是tail-1所指元素所以要取模保证tail-1不越界。
int myCircularQueueFront(MyCircularQueue* obj)
{if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj-a[obj-head];
}int myCircularQueueRear(MyCircularQueue* obj)
{if(myCircularQueueIsEmpty(obj))return -1;elsereturn obj-a[(obj-tail -1 obj-k 1) % (obj-k 1)];
}2.4 释放队列
释放先释放小弟再释放大哥即先释放obj-a所申请的数组再释放obj防止内存泄漏
void myCircularQueueFree(MyCircularQueue* obj)
{free(obj-a);free(obj);
}