#include<stdio.h>
#include<stdlib.h>
#define stack_size 100000000
//#define stack_long 100000
struct stack {
int size;
int *base;
int *top;
};
struct stack s;
void creat_stack() //创建栈
{
s.base = (int *)malloc((stack_size)*sizeof(int));
s.top = s.base;
s.size = stack_size;
}
void input_stack(int num) //入栈
{
/*if(s.top - s.base > s.size) //判断栈满
{
s.base = (int *)realloc(s.base,(s.size + stack_long)*sizeof(int));
s.top = s.base + s.size;
s.size = s.size + stack_long;
}
else*/
*(s.top) = num;
s.top = s.top + 1;
}
void output_stack() //出栈
{
int num;
if(!is_empty())
{
num = *(s.top - 1);
s.top = s.top - 1;
}
else
return;
}
int is_empty() //判断为空
{
if(s.top == s.base)
return 1;
else
return 0;
}
void top_stack() //输出栈顶元素
{
int val;
if(is_empty())
{
printf("impossible!\n");
return;
}
else
{
val = *(s.top - 1);
printf("%d\n",val);
}
}
int main()
{
int i,val,n,m;
creat_stack();
printf("请输入操作数:");
scanf("%d",&n);
i=0;
for(i = 0;i < n;i++)
{
printf("请输入一个整数:");
scanf("%d",&m);
if(m == 1)
{
scanf("%d",&val);
input_stack(val);
}
else if(m == 2)
{
output_stack();
}
else
{
top_stack();
}
}
return 0;
}