#include <stdio.h>
#include <stdlib.h>
#define DEF_SIZE 3
typedef struct {
char *data;
int length;
int allocated;
} Stack;
void init(Stack *stack) {
stack->data = (char *) malloc(sizeof(char) * DEF_SIZE);
stack->length = 0;
stack->allocated = DEF_SIZE;
}
void push(char c, Stack *stack) {
if (++stack->length > stack->allocated) {
stack->data = (char *) realloc(stack->data, sizeof(char) * (stack->length));
}
stack->data[stack->length - 1] = c;
}
char pop(Stack *stack) {
return stack->data[--stack->length];
}
#define N 10
int main() {
int i;
char c;
Stack s;
init(&s);
for (i = 0; i < N; i++) {
push((c = 'a' + i), &s);
putchar(c);
}
putchar('\n');
while ((c = pop(&s)) != 0)
putchar(c);
putchar('\n');
return 0;
}
/* end */