Implement the following operations of a queue using stacks.
- push(x) -- Push element x to the back of queue.
- pop() -- Removes the element from in front of queue.
- peek() -- Get the front element.
- empty() -- Return whether the queue is empty.
typedef struct {
int num;
int* arr;
int MaxSize;
} MyQueue;
/** Initialize your data structure here. */
MyQueue* myQueueCreate(int maxSize) {
MyQueue* queue;
queue=malloc(sizeof(MyQueue));
queue->num=0;
queue->arr=(int*)malloc(sizeof(int)*maxSize);
queue->MaxSize=maxSize;
return queue;
}
/** Push element x to the back of queue. */
void myQueuePush(MyQueue* obj, int x) {
if(obj->num==obj->MaxSize){
for(int i=0;i<obj->num-1;i++)
obj->arr[i]=obj->arr[i+1];
obj->arr[obj->num-1]=x;
}
else{
obj->arr[obj->num]=x;
obj->num++;
}
}
/** Removes the element from in front of queue and returns that element. */
int myQueuePop(MyQueue* obj) {
int p;
p=obj->arr[0];
for(int i=0;i<obj->num-1;i++)
obj->arr[i]=obj->arr[i+1];
obj->num--;
return p;
}
/** Get the front element. */
int myQueuePeek(MyQueue* obj) {
return(obj->arr[0]);
}
/** Returns whether the queue is empty. */
bool myQueueEmpty(MyQueue* obj) {
return obj->num==0;
}
void myQueueFree(MyQueue* obj) {
obj->num=0;
}
/**
* Your MyQueue struct will be instantiated and called as such:
* struct MyQueue* obj = myQueueCreate(maxSize);
* myQueuePush(obj, x);
* int param_2 = myQueuePop(obj);
* int param_3 = myQueuePeek(obj);
* bool param_4 = myQueueEmpty(obj);
* myQueue Free(obj);
*/