#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXSIZE 8
typedef int dataType;

typedef struct Stack
{
    dataType date[MAXSIZE];
    int top;
}Stack;

void initStack(Stack *s)//初始化堆栈函数
{
    s->top=-1;  //初始化top指向堆栈的最底部
    memset(s->date,0,sizeof(dataType)*MAXSIZE);//将堆栈空间初始化为0(可省略该步骤)
}

void push(Stack *s,int e)
{
    if (s->top==MAXSIZE-1) {
        return;
    }
    s->top++;
    s->date[s->top]=e;
}

void pop(Stack *s,int *e)
{
    if (s->top==-1) {
        return ;
    }
    
    *e=s->date[s->top];//通过传址的方式获取堆栈中最顶层的数据
    s->top--;
}

int main(void)
{
    Stack myTest;
    int temp;
    initStack(&myTest);
    
    printf("Push Order:\n");
    for (int i=0; i<8; i++) {
        printf("%d ",i);
        push(&myTest, i);
    }
    printf("\n");
    
    printf("Pop Order:\n");
    for (int i=0; i<8; i++) {
        pop(&myTest, &temp);
        printf("%d ",temp);
    }
    
    printf("\n");
    return 0;
}