C语言循环队列

MyCircularQueue(k): 构造器,设置队列长度为 k 。
Front: 从队首获取元素。如果队列为空,返回 -1 。
Rear: 获取队尾元素。如果队列为空,返回 -1 。
enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
isEmpty(): 检查循环队列是否为空。
isFull(): 检查循环队列是否已满。

typedef struct {
    int* _array;
    int _capacity;
    int _size;
    int _front;
    int _back;
    
} MyCircularQueue;

/** Initialize your data structure here. Set the size of the queue to be k. */

MyCircularQueue* myCircularQueueCreate(int k) {
    MyCircularQueue* q=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));
    q->_array=(int*)malloc(sizeof(int)*k);
    q->_capacity=k;
    q->_size=0;
    q->_front=0;
    q->_back=0;
    return q;
    
}


bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {
    assert(obj);
    if(obj->_capacity==obj->_size){
        return false;
    }
    obj->_array[obj->_back++]=value;
    obj->_size++;
    if(obj->_back==obj->_capacity){
        obj->_back=0;
    }
    return true;
  
}


bool myCircularQueueDeQueue(MyCircularQueue* obj) {
    assert(obj);
    if(obj->_size==0){
        return false;
    }
    ++obj->_front;
    obj->_size--;
    if(obj->_front==obj->_capacity){
        obj->_front=0;
    }
    return true;
  
}


int myCircularQueueFront(MyCircularQueue* obj) {
    if(obj->_size==0){
        return -1;
    }
    return obj->_array[obj->_front];
  
}


int myCircularQueueRear(MyCircularQueue* obj) {
    if(obj->_size==0){
        return -1;
    }
    if(obj->_back==0){
        return obj->_array[obj->_capacity-1];
    }
    return obj->_array[obj->_back-1];
  
}


bool myCircularQueueIsEmpty(MyCircularQueue* obj) {
    return obj->_size==0;
  
}


bool myCircularQueueIsFull(MyCircularQueue* obj) {
    return obj->_size==obj->_capacity;
  
}

void myCircularQueueFree(MyCircularQueue* obj) {
    free(obj->_array);
    free(obj);
    
}
发布了78 篇原创文章 · 获赞 10 · 访问量 3835

猜你喜欢

转载自blog.csdn.net/weixin_44374280/article/details/103051646