Implement the following operations of a stack using queues.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- empty() -- Return whether the stack is empty.
typedef struct {
int num;
int* arr;
int MaxSize;
} MyStack;
/** Initialize your data structure here. */
MyStack* myStackCreate(int maxSize) {
MyStack* stack;
stack=malloc(sizeof(MyStack));
stack->num=0;
stack->arr=(int*)malloc(sizeof(int)*maxSize);
stack->MaxSize=maxSize;
return stack;
}
/** Push element x onto stack. */
void myStackPush(MyStack* 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 on top of the stack and returns that element. */
int myStackPop(MyStack* obj) {
int p;
p=obj->arr[obj->num-1];
obj->num--;
return p;
}
/** Get the top element. */
int myStackTop(MyStack* obj) {
return obj->arr[obj->num-1];
}
/** Returns whether the stack is empty. */
bool myStackEmpty(MyStack* obj) {
return obj->num==0;
}
void myStackFree(MyStack* obj) {
obj->num=0;
}
/**
* Your MyStack struct will be instantiated and called as such:
* struct MyStack* obj = myStackCreate(maxSize);
* myStackPush(obj, x);
* int param_2 = myStackPop(obj);
* int param_3 = myStackTop(obj);
* bool param_4 = myStackEmpty(obj);
* myStackFree(obj);
*/