构造一个顺序栈,进行进栈和出栈操作,并用栈实现把任意一个十进制数转换为其他进制数的运算。改完之后发现不对,运行不出来。
#include
#include //新增预处理指令
#define MAXSIZE 100
typedef struct //定义结构体为顺序站
{ int base;
int top;
int stacksize;//定义顶端指针
}SqStack;
SqStack InitStack(SqStack S) //顺序栈的初始化 s 为 名字
{ int data[MAXSIZE];
S.top=S.base;
S.top=0;
S.stacksize= MAXSIZE ; // 初始化 站定指针 为 -1
return S; //返回S为栈 /1
}
int push(SqStack S, int e ) //进栈操作 push 进展
{ if(S.top - S.base == S.stacksize)
{
exit(0);
}
S.top=e;
S.top++;//将数值压入指针
return e; //站定指针加
}
int pop(SqStack S) //出栈操作
{ int e;
if(S.top == S.base)
{
return 0;
} //如果定点指针为 -1,为空
e=S.top;
S.top--;
// 将定点元素给x ,指针-1
return e;
}
void Digit_conversion(SqStack S) //用栈实现数制的转换
{
int i=0,x,y,k[100],m; InitStack(S);// 定义 数组
printf("输入十进制数和要转换的数制:\n");
scanf("%d,%d",&x,&y); //进制转换运算方法,求余数
while(x>0)
{
push(S,k[i]); //将 x%y的余数数值给x ,输入站
x=x/y;
}
while(!(S.top==0)) //站不为空 时执行语句
{
k[i]=pop(S); //数组元素 x%y k[i]
i++;
m=i;
} //将k[i]数值给出战
printf("转换结果:");
for(i=0;i<m;i++) //用于16进制转换
{
if(k[i] >9) printf("%c",k[i]+'A'-10);
else printf("%3d",k[i]); }
}
int main( ) //程序从主函数开始
{ int e,i,x;
SqStack S;
S.top=0;
printf("请输入元素个数:\n");
scanf("%d",&x); //从键盘输入个数
printf("请输入元素并依次进栈:");
for(i=0;i<x;i++)
{ scanf("%d",&e); //从键盘输入元素
push(S,e);
} //调用进站
printf("出栈顺序为:"); //出战
for(i=0;i<x;i++)
{ e=pop(S) ; //调用出战
printf("%5d",e);
}
printf("\n");
Digit_conversion(S);
printf("\n"); //调用转制
return 0;
}