#include <stdio.h>

#define SIZE 5

int stack[SIZE];
int sp;

void push(int value);
int pop(void);
int isFull(void);
int isEmpty(void);
void display(void);
void initialize(void);

int main(void) {
    sp = 0;
    int resp, data;

    while (1) {
        printf("1:push 2:pop 3:initialize 0:end:");

        if (scanf("%d", &resp) != 1) {
            break;
        }

        if (!resp) break;

        switch (resp) {
            case 1:
                printf("push:");
                scanf("%d", &data);
                push(data);
                break;

            case 2:
                printf("pop: %d\n", pop());
                break;

            case 3:
                initialize();
                printf("スタックを初期化しました\n");
                break;
        }

        printf("sp=%d\n", sp);
    }

    display();

    return 0;
}

int isFull(void)
{
    if (sp >= SIZE) {
        return 1;
    } else {
        return 0;
    }
}

int isEmpty(void)
{
    if (sp <= 0) {
        return 1;
    } else {
        return 0;
    }
}

void push(int value)
{
    if (isFull()) {
        printf("スタックが満杯で入りませんでした\n");
    } else {
        stack[sp++] = value;
    }
}

int pop(void)
{
    if (isEmpty()) {
        printf("スタックが空で取り出せませんでした\n");
        return 0;
    } else {
        return stack[--sp];
    }
}

void display(void)
{
    printf("\n");

    for (int i = 0; i < sp; i++) {
        printf("stack[%d]=%d\n", i, stack[i]);
    }
}

void initialize(void)
{
    sp = 0;
}