力扣:622. 设计循环队列

题目描述:
力扣:622. 设计循环队列
在这里插入图片描述
解题思路:
1.本题可以用数组和链表解决,但是数组更加方便,更加高效,所以选择数组进行实现本题;
2.添加rearfront 用来判断何时为空,什么时候为满,显然当rear=front为空,rear+1=front为满
3.注意边界问题,这里采用%(K+1)来控制边界问题

typedef struct {
    
    
    int* a;
    int front;
    int rear;
    int k;
} MyCircularQueue;

//创建+初始化
MyCircularQueue* myCircularQueueCreate(int k) 
{
    
    
    MyCircularQueue* obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));

    obj->a=(int*)malloc(sizeof(int)*(k+1));
    obj->front=obj->rear=0;
    obj->k=k;

    return obj;
}

//跟上边思路一样,判断是否为空
bool myCircularQueueIsEmpty(MyCircularQueue* obj) 
{
    
    
    return obj->front==obj->rear;
}

//跟上边思路一样,判断是否为满
bool myCircularQueueIsFull(MyCircularQueue* obj) 
{
    
    
    return (obj->rear+1)%(obj->k+1)==obj->front;
}

//添加一个新元素
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) 
{
    
    
	//如果满了,所以就要return false
    if(myCircularQueueIsFull(obj))
    {
    
    
        return false;
    }
    //控制边界+添加新元素
    obj->a[obj->rear++]=value;
    obj->rear%=(obj->k+1);
    return true;
}

bool myCircularQueueDeQueue(MyCircularQueue* obj) 
{
    
    
    if(myCircularQueueIsEmpty(obj)) return false;
    ++obj->front;
    obj->front%=(obj->k+1);
    return true;
}

int myCircularQueueFront(MyCircularQueue* obj)
{
    
    
    if(myCircularQueueIsEmpty(obj)) return -1;
    else return obj->a[obj->front];
}

int myCircularQueueRear(MyCircularQueue* obj) 
{
    
    
    if(myCircularQueueIsEmpty(obj)) return -1;
    else return obj->a[(obj->rear-1+obj->k+1)%(obj->k+1)];
}

void myCircularQueueFree(MyCircularQueue* obj) 
{
    
    
    free(obj->a);
    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);
*/

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/congfen214/article/details/129748756
今日推荐