栈源代码(c语言版)
/**********实现了pop,push,empty,print,conversion等功能*********/
#include
#include
#define stack_init_size 10
#define stackincrement 10
//定义栈结构
typedef struct{
int * base;
int * top;
int stacksize;
}sqstack;
//初始化栈
void initstack(sqstack * s){
s->base=(int *)malloc(stack_init_size*sizeof(int));
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=stack_init_size;
}
//压栈
void push(sqstack * s,int e){
if(s->top-s->base==s->stacksize){
s->base=(int *)realloc(s->base,(s->stacksize stackincrement)*sizeof(int));
if(!s->base)
exit(0);
s->top=s->base s->stacksize;
s->stacksize =stackincrement;
}
*s->top=e;
s->top ;
}
//弹栈
int pop(sqstack * s){
int e;
if(s->top==s->base)
{printf("栈已空!\n");
exit(0);
}
s->top--;
e=*s->top;
return e;
}
//判断是否为空
int emptystack(sqstack s){
if(s.top==s.base)
return 1;
else
return 0;
}
//置空栈 后面没用上。。。
void clearstack(sqstack * s){
s->top=s->base;
}
//打印栈
void printstack(sqstack s){
while(!emptystack(s)){
s.top--;
printf("%d ",*s.top);
}
printf("\n\n");
}
//进制转换函数
void conversion(int n,int d){
sqstack m;
initstack(&m);
printf("你输入的数值%d转换成%d进制后为:",n,d);
while(n){
push(&m,n%d);
n=n/d;
}
while(!emptystack(m)){
printstack(m);
break;
}
printf("\n");
}
//主函数
int main(){
sqstack m;
int x,y,z,i,j;
initstack(&m);
printf("——栈已初始化完成——\n\n\n");
printf("请输入要操作的序号:\n");
printf("1·入栈 2·出栈 3·进制转换 4·退出\n");
scanf("%d",&x);
while(x!=0){
switch(x){
case 1:printf("请输入要入栈的数值:\n");
scanf("%d",&y);
push(&m,y);
printstack(m);
break;
case 2:printf("出栈的数值为:");
z=pop(&m);
printf("%d\n",z);
printstack(m);
break;
case 3:printf("请输入要转换的数值和进制:\n");
scanf("%d%d",&i,&j);
conversion(i,j);
break;
case 4:exit(0);
break;
default:printf("输入有误,请重新输入:\n");
}
printf("1·入栈 2·出栈 3·进制转换 4·退出\n");
scanf("%d",&x);
}
return 0;
}
程序运行截图