目录
622. 设计循环队列
typedef struct {
int *queue;
int front;
int rear;
int capacity;
} MyCircularQueue;
MyCircularQueue* myCircularQueueCreate(int k)
{
MyCircularQueue *obj = malloc(sizeof(MyCircularQueue));
obj->capacity = k + 1; // 多出1个空间,作为哨兵,用来区别队列NULL与EMPTY的区别
obj->front = 0;
obj->rear = 0;
obj->queue = malloc(sizeof(int) * obj->capacity);
return obj;
}
bool myCircularQueueIsEmpty(MyCircularQueue* obj)
{
return obj->front == obj->rear; // k = 3时,rear和front的取值: 0, 1, 2, 3
}
bool myCircularQueueIsFull(MyCircularQueue* obj)
{
return (obj->rear + 1) % obj->capacity == obj->front;// k = 3时,比如满的条件: rear = 3, front = 0; rear = 2, front = 3; ...
}
// 添加元素,尾插,rear++,注意循环
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value)
{
if (myCircularQueueIsFull(obj)) return false;
obj->queue[obj->rear] = value;
// mod cap,循环;比如cap = k + 1 = 4, 则rear的取值: 0, 1, 2, 3
obj->rear = (obj->rear + 1) % obj->capacity;
return true;
}
// 删除元素,头删,front++,注意循环
bool myCircularQueueDeQueue(MyCircularQueue* obj)
{
if (myCircularQueueIsEmpty(obj)) return false;
// 比如cap = k + 1 = 4, 则front的取值: 0, 1, 2, 3
obj->front = (obj->front + 1) % obj->capacity;
return true;
}
int myCircularQueueFront(MyCircularQueue* obj)
{
if (myCircularQueueIsEmpty(obj)) return -1;
return obj->queue[obj->front];
}
int myCircularQueueRear(MyCircularQueue* obj)
{
if (myCircularQueueIsEmpty(obj)) return -1;
// obj->rear - 1 + obj->capacity,必须要 + obj->capacity,防止obj->rear - 1为负数
return obj->queue[(obj->rear - 1 + obj->capacity) % obj->capacity];
}
void myCircularQueueFree(MyCircularQueue* obj)
{
free(obj->queue);
free(obj);
}
/**
* Your MyCircularQueue struct will be instantiated and called as such:
* MyCircularQueue* obj = myCircularQueueCreate(k);
* bool param_1 = myCircularQueueEnQueue(obj, value);
* bool param_2 = myCircularQueueDeQueue(obj);
* int param_3 = myCircularQueueFront(obj);
* int param_4 = myCircularQueueRear(obj);
* bool param_5 = myCircularQueueIsEmpty(obj);
* bool param_6 = myCircularQueueIsFull(obj);
* myCircularQueueFree(obj);
*/
641. 设计循环双端队列
标签:obj,int,常见,MyCircularQueue,front,return,数据结构,leetcode,rear
From: https://www.cnblogs.com/kongweisi/p/17021582.html