代码实现
typedef struct {
int stackInTop, stackOutTop;
int stackin[100], stackout[100];
} MyQueue;
MyQueue* myQueueCreate() {
MyQueue* queue = (MyQueue*)malloc(sizeof(MyQueue));
queue->stackInTop = 0;
queue->stackOutTop = 0;
return queue;
}
void myQueuePush(MyQueue* obj, int x) {
obj->stackin[(obj->stackInTop)++] = x;
}
int myQueuePop(MyQueue* obj) {
int stackInTop = obj->stackInTop;
int stackOutTop = obj->stackOutTop;
if(stackOutTop == 0){
while(stackInTop > 0){
obj->stackout[stackOutTop++] = obj->stackin[--stackInTop];
}
}
int top = obj->stackout[--stackOutTop];
while(stackOutTop > 0)
obj->stackin[stackInTop++] = obj->stackout[--stackOutTop];
obj->stackInTop = stackInTop;
obj->stackOutTop = stackOutTop;
return top;
}
int myQueuePeek(MyQueue* obj) {
return obj->stackin[0];
}
bool myQueueEmpty(MyQueue* obj) {
return obj->stackInTop == 0 && obj->stackOutTop == 0;
}
void myQueueFree(MyQueue* obj) {
obj->stackInTop = 0;
obj->stackOutTop = 0;
}
代码实现
typedef struct {
int queue[100];
int front;
int rear;
} MyStack;
MyStack* myStackCreate() {
MyStack* stack = (MyStack*)malloc(sizeof(MyStack));
stack->front = 0;
stack->rear = 0;
return stack;
}
void myStackPush(MyStack* obj, int x) { obj->queue[(obj->rear)++] = x; }
int myStackPop(MyStack* obj) {
int front = obj->front;
int rear = obj->rear;
int size = rear - front;
while (size-- > 1) {
obj->queue[rear++] = obj->queue[front++];
}
int top = obj->queue[front++];
obj->front = front;
obj->rear = rear;
return top;
}
int myStackTop(MyStack* obj) {return obj->queue[(obj->rear) - 1];}
bool myStackEmpty(MyStack* obj) { return obj->rear == obj->front; }
void myStackFree(MyStack* obj) {
obj->front = 0;
obj->rear = 0;
}
/**
* Your MyStack struct will be instantiated and called as such:
* MyStack* obj = myStackCreate();
* myStackPush(obj, x);
* int param_2 = myStackPop(obj);
* int param_3 = myStackTop(obj);
* bool param_4 = myStackEmpty(obj);
* myStackFree(obj);
*/