使用容量最大为20的顺序栈简单完成输入任意数字进行任意进制转换,输出转换后的数字
#include<stdio.h>
#include<stdlib.h>
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int top;
}seqStack;
// 创建
seqStack * stack_create()
{
seqStack *s = (seqStack *)malloc(sizeof(seqStack));
if(NULL==s)
{
printf("创建失败\n");
return NULL;
}
//初始化
s->top = -1;
//printf("创建成功\n");
return s;
}
// 判空
int stack_empty(seqStack *s)
{
return s->top == -1; //1表示空 0表示非空
}
// 判满
int stack_full(seqStack *s)
{
return s->top == MAX-1; //1表示满 0表示非满
}
// 入栈、压栈、进栈
void stack_push(seqStack *s,datatype e)
{
//判断逻辑
if(NULL==s || stack_full(s))
{
printf("入栈失败\n");
return;
}
//入栈逻辑:先加后压
//s->top++;
s->data[++s->top] = e; //将元素压入栈中
//printf("入栈成功\n");
}
// 遍历
void stack_show(seqStack *s)
{
if(NULL==s || stack_empty(s))
{
printf("遍历失败\n");
return;
}
//遍历逻辑
printf("转换后为: ");
for(int i=s->top;i>=0;i--)
{
printf("%d\t",s->data[i]);
}
printf("\n");
}
void conver(seqStack *s,int a,int b)
{
while (a!=0)
{
int c = a%b;
stack_push(s,c);
a = a/b;
}
stack_show(s);
}
int main(int argc, char const *argv[])
{
seqStack *s = stack_create();
if(NULL==s)
{
return -1;
}
int a=0;
int b=0;
printf("请输入要转换的数字和转换的进制:");
scanf("%d %d",&a,&b);
conver(s,a,b);
return 0;
}