单位的网站怎样设计才美观,做网站排名软件,湖南省建设工程网站,环保材料 技术支持 东莞网站建设目录 一、前言
1.如何实现循环#xff1f;
2.如何判断队列为空#xff1f;
3.如何判断队列为满#xff1f;
二、循环队列的结构定义
三、循环队列的创建及其初始化
四、入队
五、出队
六、取队头元素
七、取队尾元素
八、循环队列判空
九、循环队列判满
十、循环…目录 一、前言
1.如何实现循环
2.如何判断队列为空
3.如何判断队列为满
二、循环队列的结构定义
三、循环队列的创建及其初始化
四、入队
五、出队
六、取队头元素
七、取队尾元素
八、循环队列判空
九、循环队列判满
十、循环队列销毁 一、前言
利用数组实现循环队列重点要解决的问题有三个
1.如何实现循环
由于数组大小k是确定的要实现队列循环就需要让数组下标循环利用两个下标front、back分别指向首元素和尾元素的下一个位置。front (front1) % kback (back1) % k即可完成下标的循环。
2.如何判断队列为空
初始化时front和back都为0此时为空。因此我们确定判空条件为 front back时循环队列为空。
3.如何判断队列为满
我们发现当队列满时由于back指向队尾元素的下一个因此队列满时front back 与队列空时相矛盾。如何解决呢
两种解决方法
一是循环队列结构中新增队列大小 size 当size0且front back时队列为空当size≠0且front back时队列为满。
二是新增一个空间不存储数据back (back1) % (k1)当 (back1) % (k1) front时队列为满。
二、循环队列的结构定义
循环队列的结构中包含数组、头指针、尾指针、队列容量、队列大小队列大小用于区分队列空与满的情况
//方法一
typedef int MCQDataType;
//循环队列结构定义
typedef struct {MCQDataType *a;int front;//头指针指向队头元素int back;//尾指针指向队尾元素的下一个位置int size;//队列大小int k;//队列容量
} MyCircularQueue;
三、循环队列的创建及其初始化
为循环队列动态申请一个内存空间再将头指针、尾指针、队列大小都初始化为0队列容量为k
//方法一
//循环队列创建及其初始化
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* mcq(MyCircularQueue*)malloc(sizeof(MyCircularQueue));mcq-a(MCQDataType*)malloc(sizeof(MCQDataType)*(k));mcq-frontmcq-backmcq-size0;mcq-kk;return mcq;
}
四、入队
先通过size判断队列是否满不满再将数据入队同时尾指针要 加1模k back (back1) % k
//方法一
//入队
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(obj-sizeobj-k)//队列已满{return false;}obj-a[obj-back]value;obj-back(obj-back1)%obj-k;obj-size;return true;
}
五、出队
先通过size判断队列是否空不空再将数据出队同时头指针要 加1模k front (front1) % k
//方法一
//出队
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(obj-size0)//队列为空{return false;}obj-front(obj-front1)%obj-k;obj-size--;return true;
}
六、取队头元素
先通过size判断队列是否为空不空直接返回队头元素即可
//方法一
//取队头元素
int myCircularQueueFront(MyCircularQueue* obj) {if(obj-size0)//队列为空{return -1;}return obj-a[obj-front];
}
七、取队尾元素
先通过size判断队尾是否为空。由于尾指针指向的是队尾元素的下一个位置所以需要返回back-1位置的元素。由此需要判断尾指针是否指向0位置如果指向0位置则不能back-1否则越界需要返回数组的最后一个位置元素即k-1的位置如果不指向0位置则返回back-1位置的元素即可。
//方法一
//取队尾元素
int myCircularQueueRear(MyCircularQueue* obj) {if(obj-size0){return -1;}if(obj-back0){return obj-a[obj-k-1];}else{return obj-a[obj-back-1];}
}
八、循环队列判空
通过size判空即可
//方法一
//循环队列判空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj-size0;
}
九、循环队列判满
通过size判满即可
//方法一
//循环队列判满
bool myCircularQueueIsFull(MyCircularQueue* obj) {return obj-sizeobj-k;
}
十、循环队列销毁
动态申请的内存空间也需要动态销毁
//方法一
//循环队列销毁
void myCircularQueueFree(MyCircularQueue* obj) {free(obj);objNULL;
}