#include<stdio.h> //栈的顺序存储
#include<stdlib.h>
#define stack_int_size 100
#define stack_increment 10
typedef struct
{
int *top;
int *base;
int sqlist; //栈的当前大小
}Stack;
void init(Stack *p) //初始化栈
{
p->base=(int *)malloc(stack_int_size*sizeof(int));
if(!p->base) exit(-1);
p->top=p->base;
p->sqlist=stack_int_size;
}
int getTop(Stack *p) //栈非空,返回栈顶元素
{
if(p->top==p->base) return 0;
else return *(p->top-1);
}
int insertTop(Stack *p,int m) //插入元素m到栈顶
{
if(p->top-p->base>=p->sqlist) //栈满
{
p->base=(int *)realloc(p->base,(stack_increment+stack_int_size)*sizeof(int));
if(!p->base) exit(-1); //分配失败
p->top=p->base+p->sqlist;
p->sqlist+=stack_increment;
}
*(p->top++)=m;
}
void scanf_1(Stack *p,int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",p->top);
p->top++;
}
}
void print_1(Stack *p)
{
int i;
for(i=0;p->top!=p->base;i++)
printf("%d
",*(--p->top));
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
Stack m,*p;
p=&m;
init(p);
scanf_1(p,n);
printf("输出栈顶元素:");
printf("%d
",getTop(p));
printf("请输入要插入到栈顶的元素:");
int u;
scanf("%d",&u);
insertTop(p,u);
printf("栈里面元素如下排列:");
printf("
");
print_1(p);
}
}
运行结果如下: