栈 进制转换
#include<stdlib.h>
#include<stdio.h>
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
typedef int SElemType;
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} sqstack;
void initstack(sqstack *s) \\ 构建空栈
{
s->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType));
if(!s->base)
{
printf("分配空间失败!\n");
return;
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return ;
}
void push(sqstack *s,SElemType e) \\ 进栈
{
if(s->top-s->base>=s->stacksize)
{
s->base=(SElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(SElemType));
}
if(!s->base)
{
printf("栈已满,扩充空间失败\n");
return ;
}
*s->top++=e;
return;
}
void pop(sqstack *s,SElemType *e) \\ 出栈
{
if(s->top==s->base)
{
printf("栈为空!\n");
return;
}
*e=*--s->top;
return ;
}
void reverse() \\ 函数定义
{
int ch,n;
SElemType e;
sqstack s;
initstack(&s);
printf("请输入一个十进制数值:");
scanf("%d",&ch);
printf("想要转换的进制:");
scanf("%d",&n);
while(ch)
{
push(&s,ch%n);
ch=ch/n;
printf("转换结果为:");
}
while(s.base!=s.top)
{
pop(&s,&e);
switch (e)
{
case 10:putchar('A');break;
case 11:putchar('B');break;
case 12:putchar('C');break;
case 13:putchar('D');break;
case 14:putchar('E');break;
case 15:putchar('F');break;
default:printf("%d",e);
}
}
putchar('\n');
}
void main()
{
reverse();
}