题目:利用栈表的特性,实现任何整数的多进制输出
注意:整数转化为多进制使用的时候,使用短除法
思路:将余数进栈,进行计算,最后输出相应的进制
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//定义顺序栈的管理节点
typedef struct stack
{
int *num;//顺序栈的数据域
int size;//设置数据域的长度
int top;//顺序表的栈顶位置
}stack,*pstack;
//初始化顺序栈
pstack stack_init(int size)
{
//申请顺序栈
pstack mystack=malloc(sizeof(stack));
if(mystack ==NULL)//判断栈表是否创建成功
{
printf("栈表创建失败\n");
return NULL;
}
//初始化栈表
//申请数据域的存储空间
mystack->num=malloc(size*sizeof(int));
mystack->size=size;//记录栈表的总长
//栈顶初始化
mystack->top=-1;
return mystack;
}
//空栈
bool stack_empty(pstack mystack)
{
return mystack->top==-1;
}
//满栈
bool stack_full(pstack mystack)
{
return mystack->top == mystack->size-1;
}
//压栈 尾插数据
int push_stack(pstack mystack,int n)
{
//判断栈表是否已满
if(stack_full(mystack))
{
printf("满栈状态\n");
return -1;
}
//压栈数据 尾部插入
//栈顶自增 ++
mystack->top++;
//数据域赋值
mystack->num[mystack->top]=n;
return 0;
}
//弹栈 尾部删除
int pop_stack(pstack mystack)
{
//判断是否为空栈
if(mystack->top == -1)
{
printf("栈表为空表\n");
return -1;
}
//从栈顶获取数据
int someone=mystack->num[mystack->top];
//栈顶位置 --
mystack->top--;
//返回弹栈结果
return someone;
}
//弹栈 尾部删除 参数返回弹栈结果
int pop1_stack(pstack mystack,int *n)
{
//判断是否为空栈
if(stack_empty(mystack))
{
printf("栈表为空表\n");
return -1;
}
//从栈顶获取数据
*n=mystack->num[mystack->top];
//栈顶位置 --
mystack->top--;
}
//检测一下数据
void show(pstack mystack)
{
//判断是否为空栈
if(mystack->top == -1)
{
printf("栈表为空表\n");
return;
}
for(int i=0;i<=mystack->top;i++)
{
printf("-%d",mystack->num[i]);
}
printf("\n");
}
//进制转化 整数 进制数
int convert(pstack mystack,int num,int radix)
{
//定义一个整数保存商的结果
int trade;
trade=num/radix;
//让余数压栈
push_stack(mystack,num%radix);
//思想:让商继续完成取余工作
while(trade != 0)
{
//让余数压栈
push_stack(mystack,trade%radix);
//获取商的结果
trade = trade/radix;
}
//保存栈顶的位置、
int topnum=mystack->top;
int ret;
//打印进制数据
printf("%d数据的%d进制为:",num,radix);
for(int i=0;i<=topnum;i++)
{
//获取每次出栈的结果
ret=pop_stack(mystack);
switch(ret)
{
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default:printf("%d",ret);break;
}
}
printf("\n");
}
int main()
{
//初始化栈表
pstack mystack=stack_init(10);
int num,radix;
printf("请输入整数以及进制数\n");
scanf("%d %d",&num,&radix);
convert(mystack,num,radix);
return 0;
}
运行结果如下: