#include<stdio.h>
#include<stdbool.h>
#include <stdlib.h>
#include <string.h>
#define S_SIZE 10//定义堆的大小
#define print(x) printf("%5d",x)//定义打印宏函数
typedef struct
{ int top;
} count;
count S;// 记录下一个堆元素位置
bool is_empty(count );
void push(int * ,int );
int pop(int *);
int main(void)
{ int x;
char *ch;
S.top=0;//初始化堆
int *arr=malloc(S_SIZE*sizeof(int));
puts("push element(enter q to quit)");
while(scanf("%d",&x)==1 && S.top<S_SIZE )
push(arr,x);
//打印堆中元素
for(int i=0;i<S.top;i++)
{ print(arr[i]);
putchar('\n');
}
printf("pop element");
puts("(please enter Y \n");
while(getchar()!='\n')
continue;
//弹出堆中元素
while(!strcmp("Y",gets(ch)))
printf("pop:%d\n",pop(arr));
}
//函数 检查堆是否为空
bool is_empty(count S)
{ if(S.top<0)
return true;
else
return false;
}
//函数 压入元素
void push(int * arr,int x)
{
arr[S.top]=x;
S.top++;
}
//函数 弹出元素
int pop(int *arr)
{ S.top--;
if(is_empty(S))
{ printf("StackUnderflow\n");
exit(EXIT_FAILURE);
}
return arr[S.top];
}