#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int Elem;
struct Stack {
int Max;
int SP;
Elem* SS;
};
void stack_init(struct Stack *s, int size) {
s->SP = 0;
s->Max = size;
s
->SS
= (Elem
*)malloc(sizeof(Elem
)*size
);}
void stack_push(struct Stack *s, Elem e) {
if (s->SP >= s->Max) {
Elem
*temp
= (Elem
*)malloc(sizeof(Elem
)*2*s
->Max
); int i;
for(i=0; i<s->Max; i++) {
temp[i] = s->SS[i];
}
s->SS = temp;
s->Max*=2;
}
s->SS[s->SP++] = e;
}
Elem stack_pop(struct Stack *s) {
return s->SS[--s->SP];
}
int main()
{
struct Stack s1;
stack_init(&s1, 2);
stack_push(&s1, 5);
stack_push(&s1, 4);
stack_push(&s1, 3);
stack_push(&s1, 2);
stack_push(&s1, 1);
printf("%d\n", stack_pop
(&s1
)); printf("%d\n", stack_pop
(&s1
)); printf("%d\n", stack_pop
(&s1
)); printf("%d\n", stack_pop
(&s1
)); printf("%d\n", stack_pop
(&s1
)); return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8YXNzZXJ0Lmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgoKdHlwZWRlZiBpbnQgRWxlbTsKCnN0cnVjdCBTdGFjayB7CiAgaW50IE1heDsKICBpbnQgU1A7CiAgRWxlbSogU1M7Cn07Cgp2b2lkIHN0YWNrX2luaXQoc3RydWN0IFN0YWNrICpzLCBpbnQgc2l6ZSkgewogIHMtPlNQID0gMDsKICBzLT5NYXggPSBzaXplOwogIHMtPlNTID0gKEVsZW0qKW1hbGxvYyhzaXplb2YoRWxlbSkqc2l6ZSk7CiAgYXNzZXJ0KHMtPlNTIT1OVUxMKTsKfQoKdm9pZCBzdGFja19wdXNoKHN0cnVjdCBTdGFjayAqcywgRWxlbSBlKSB7CiBpZiAocy0+U1AgPj0gcy0+TWF4KSB7CiAgICAgRWxlbSAqdGVtcCA9IChFbGVtKiltYWxsb2Moc2l6ZW9mKEVsZW0pKjIqcy0+TWF4KTsKICAgICBhc3NlcnQodGVtcCE9TlVMTCk7CiAgICAgaW50IGk7CiAgICAgZm9yKGk9MDsgaTxzLT5NYXg7IGkrKykgewogICAgICAgICB0ZW1wW2ldID0gcy0+U1NbaV07CiAgICAgfQogICAgIGZyZWUocy0+U1MpOwogICAgIHMtPlNTID0gdGVtcDsKICAgICBzLT5NYXgqPTI7CiB9CiBzLT5TU1tzLT5TUCsrXSA9IGU7Cn0KCkVsZW0gc3RhY2tfcG9wKHN0cnVjdCBTdGFjayAqcykgewogIGFzc2VydChzLT5TUD4wKTsKICByZXR1cm4gcy0+U1NbLS1zLT5TUF07Cn0KCgoKaW50IG1haW4oKQp7CiAgc3RydWN0IFN0YWNrIHMxOwogIHN0YWNrX2luaXQoJnMxLCAyKTsKICBzdGFja19wdXNoKCZzMSwgNSk7CiAgc3RhY2tfcHVzaCgmczEsIDQpOwogIHN0YWNrX3B1c2goJnMxLCAzKTsKICBzdGFja19wdXNoKCZzMSwgMik7CiAgc3RhY2tfcHVzaCgmczEsIDEpOwogIHByaW50ZigiJWRcbiIsIHN0YWNrX3BvcCgmczEpKTsKICBwcmludGYoIiVkXG4iLCBzdGFja19wb3AoJnMxKSk7CiAgcHJpbnRmKCIlZFxuIiwgc3RhY2tfcG9wKCZzMSkpOwogIHByaW50ZigiJWRcbiIsIHN0YWNrX3BvcCgmczEpKTsKICBwcmludGYoIiVkXG4iLCBzdGFja19wb3AoJnMxKSk7CiAgcmV0dXJuIDA7Cn0K