企业如何推广网站,电脑免费安装wordpress,asp.net 网站 价格,有什么做兼职的网站目录
编辑定义结构体#xff1a;
1. MyCircularQueue(k): 构造器#xff0c;设置队列长度为 k
2. Front: 从队首获取元素。如果队列为空#xff0c;返回 -1
3. Rear: 获取队尾元素。如果队列为空#xff0c;返回 -1
4. enQueue(value): 向循环队列插入一个元素。…
目录
编辑定义结构体
1. MyCircularQueue(k): 构造器设置队列长度为 k
2. Front: 从队首获取元素。如果队列为空返回 -1
3. Rear: 获取队尾元素。如果队列为空返回 -1
4. enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真
5. deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真
6. isEmpty(): 检查循环队列是否为空
7. isFull(): 检查循环队列是否已满
8. 扩展如何判断队列有多少个元素 622. 设计循环队列 - 力扣LeetCode 设计循环队列我们可以从顺序结构和链式结构来考虑但因为链式结构实现起来较为复杂不易理解且主流使用顺序存储所以本文就是用顺序存储结构实现。 因为采用顺序存储结构所以我们循环队列的元素空间是确定好的为K1个这样可以保证总有一个空间是空的方便我们接下来的判断。 定义结构体
typedef struct {int* a;int front;int rear;int k;
} MyCircularQueue; a是存放数据的数组 front是头元素的下标; rear: 是尾元素位置的下一个下标; k: 是循环队列最多有多少个元素。
1. MyCircularQueue(k): 构造器设置队列长度为 k 我们想要构造长度为N1的顺序表来存储数据。
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* obj (MyCircularQueue*)malloc(sizeof(MyCircularQueue));obj-a (int*)malloc(sizeof(int)*(k1));obj-front 0;obj-rear 0;obj-k k;return obj;
}
2. Front: 从队首获取元素。如果队列为空返回 -1 这里我们需要注意当我们在写题是调用myCircularQueueIsEmpty时一点要把这个函数放在Front函数之前定义否则会报错。之后的韩束同理。
int myCircularQueueFront(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}return obj-a[obj-front];
}3. Rear: 获取队尾元素。如果队列为空返回 -1 写这个公式的原因是因为当rear0时我们需要单独判断如果使用这个公式则不需要。
当rear-1!-1且k1,那么(k1),在%不会有影响。如果-1(k1)后变成最后一个数的下标。可以试着代数。
int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}return obj-a[(obj-rear-1obj-k1)%(obj-k1)];
}
4. enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真 这里要注意的是rear的变化当rear后进行%如果k1%变成新的下标否则不变。
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {if(myCircularQueueIsFull(obj)){return false;}obj-a[obj-rear] value;obj-rear;obj-rear obj-rear%(obj-k1);return true;
}
5. deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真 这里front与上面得rear同理。
bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}obj-front;obj-front obj-front%(obj-k1);return true;
}6. isEmpty(): 检查循环队列是否为空 当rear front时循环队列为空。
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {return obj-front obj-rear;
}7. isFull(): 检查循环队列是否已满 这里判断rear的下一个下标是不是front如果是则循环队列已满。因为是循环所以对rear进行%确保不会越界。
bool myCircularQueueIsFull(MyCircularQueue* obj) {return (obj-rear1)%(obj-k1) obj-front;
}
8. 扩展如何判断队列有多少个元素 如果正常情况只需要 rear - front 就能得出有多少个元素。 当因为是循环队列rear可能出现在front之前这我们如何判断 与Rear一样我们总结出公式元素个数 rear - front k1% (k1)这里k1,就可以理解为将rear放到front之后。