#define LEN 0xfffff
typedef struct {
int *q1, head1, rear1;
int *q2, head2, rear2;
} MyStack;
/** Initialize your data structure here. */
MyStack* myStackCreate() {
MyStack* stack = (MyStack * )malloc(sizeof(MyStack));
stack->q1 = (int *)malloc(sizeof(int) * LEN);
stack->q2 = (int *)malloc(sizeof(int) * LEN);
stack->head1 = 0;
stack->rear1 = 0;
stack->head2 = 0;
stack->rear2 = 0;
return stack;
}
void print(MyStack *obj){
return;
int i, j;
for(i=obj->rear1; i<obj->head1; i++){
printf("%d,", obj->q1[i]);
}
printf("\n");
for(i=obj->rear2; i<obj->head2; i++){
printf("%d,", obj->q2[i]);
}
printf("\n");
}
/** Push element x onto stack. */
void myStackPush(MyStack* obj, int x) {
if(obj->head1 - obj->rear1 > 0 || (obj->head1 - obj->rear1 == 0 && (obj->head2 - obj->rear2 == 0))){
obj->q1[obj->head1++] = x;
}
if(obj->head2 - obj->rear2 > 0){
obj->q2[obj->head2++] = x;
}
print(obj);
}
/** Removes the element on top of the stack and returns that element. */
int myStackPop(MyStack* obj) {
int ret = 999;
if(obj->head2-obj->rear2 > 0){
while(obj->head2-obj->rear2 > 1){
obj->q1[obj->head1++] = obj->q2[obj->rear2++];
}
ret = obj->q2[obj->rear2++];
goto RET;
}
if(obj->head1 - obj->rear1 > 0) {
while(obj->head1 - obj->rear1 > 1) {
obj->q2[obj->head2++] = obj->q1[obj->rear1++];
}
ret = obj->q1[obj->rear1++];
}
RET:
print(obj);
return ret;
}
/** Get the top element. */
int myStackTop(MyStack* obj) {
int ret = myStackPop(obj);
myStackPush(obj, ret);
print(obj);
return ret;
}
/** Returns whether the stack is empty. */
bool myStackEmpty(MyStack* obj) {
if(obj->rear1>=obj->head1 && obj->rear2>=obj->head2)
return true;
return false;
}
void myStackFree(MyStack* obj) {
free(obj->q1);
free(obj->q2);
free(obj);
}
/**
* 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);
*/
leetcode-225. 用队列实现栈-C语言
最新推荐文章于 2022-05-28 13:50:39 发布