Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!
我的博客:<但凡.
我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》
欢迎点赞,关注!
1、题目
2、题解
typedef struct {int* arr;int front;//队头下标int rear;//队尾后一个元素下标//rear始终指向空白格子或可被覆盖int capacity;//最大容量//最大有效元素个数
} MyCircularQueue;//初始化
MyCircularQueue* myCircularQueueCreate(int k) {MyCircularQueue* pq=(MyCircularQueue*)malloc(sizeof(MyCircularQueue));pq->arr=(int*)malloc((k+1)*sizeof(int));//实际空间比capacity要多一个pq->capacity=k;pq->front=pq->rear=0;return pq;
}
bool myCircularQueueIsEmpty(MyCircularQueue* obj) {if(obj->front==obj->rear){return true;}return false;
}
bool myCircularQueueIsFull(MyCircularQueue* obj) {if((obj->rear+1)%(obj->capacity+1)==obj->front){return true;}return false;
}
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) {//考虑无法成功插入的情况,如果队列已满,则无法插入//用isFUll来检测是否满if( myCircularQueueIsFull(obj)){return false;}obj->arr[obj->rear++]=value;obj->rear %= obj->capacity+1;//防止rear指向数组外return true;
}bool myCircularQueueDeQueue(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return false;}//队列保证先进先出//所以队头先出obj->front++;//front有可能会超出范围obj->front %= obj->capacity+1;return true;
}int myCircularQueueFront(MyCircularQueue* obj)
{if(myCircularQueueIsEmpty(obj)){return -1;}return obj->arr[obj->front];
}int myCircularQueueRear(MyCircularQueue* obj) {if(myCircularQueueIsEmpty(obj)){return -1;}if(obj->rear==0){return obj->arr[obj->capacity];}else{return obj->arr[obj->rear-1];}
}void myCircularQueueFree(MyCircularQueue* obj) {free(obj->arr);obj->arr=NULL;free(obj);obj=NULL;
}/*** 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);
*/
好了,今天的内容就分享到这,我们下期再见!