//2020.9.23栈
#include <stdio.h>
#include <stdlib.h>


#define N 20

//定义顺序栈的类型
typedef struct sqstack{
int *base; //栈底指针
int *top; //栈顶指针
int stacksize; //存储空间大小
}sqs;

sqs s; //定义一个顺序栈

//初始化
void initstack(){
s.base=(int *)malloc(N*sizeof(int));
if(!s.base)
exit(0);
s.top=s.base; //空栈
s.stacksize=N;
}

//入栈(插入元素)
void push(int e){
if(s.top-s.base>=s.stacksize){
printf("栈满\n");
exit(0);
/*s.base=(int *)realloc(s.base,(N+M)*sizeof(int))
if(!s.base) exit(0);
s.top=s.base+s.stacksize;
s.stacksize+=M;
*/
}
*s.top=e; //插入
s.top++; //修改栈顶指针
}

//出栈(删除)
int pop(){
int e;
if(s.top==s.base){
printf("空栈\n");
exit(0);
}
s.top--;//修改栈顶指针
e=*s.top;//赋值
return e;
}

//数值转换
void conversion(){
int n,x;
initstack();
printf("请输入十进制数:");
scanf("%d",&n);
while(n)
{
x=n%2;
push(x);
n=n/2;
}
printf("转换为二进制数:");
while(s.top!=s.base)
printf("%d",pop());
printf("\n");
}

void main(){
int e,n;
initstack();
printf("请输入入栈元素个数:");
scanf("%d",&n);
printf("请输入入栈元素:");
for(int i=1;i<=n;i++){
scanf("%d",&e);
push(e);
}
printf("返回删除的值:");
while(s.top!=s.base)
printf("%d ",pop());
printf("\n");
conversion();
}