基本算法中的任意进制之间的转换实例,采用栈结构保存所转换的结果。先进先出,
十进制转换成任意进制,采用取余进栈的方式来完成进制转换,如下即是链栈所构
成的进制转换代码:
#define STACK_INT_SIZE 100
#define STACKINCREMENT 10
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#include<stdio.h>
#include<malloc.h>
#include<windows.h>
typedef int Status;
typedef int SelemType;
typedef struct
{
SelemType *base;
SelemType *top;
int stacksize;
}SqStack;
Status initStack(SqStack *S)
{
(*S).base=(SelemType *)malloc(STACK_INT_SIZE*sizeof(SelemType));
if(!(*S).base)
exit(OVERFLOW);
(*S).top=(*S).base;
(*S).stacksize=STACK_INT_SIZE;
return OK;
}
Status 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)
exit(OVERFLOW);
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize +=STACKINCREMENT;
}
(*S).top++;
*((*S).top)=e;/
return OK;
}
Status pop(SqStack *S,SelemType *e)
{
if((*S).top==(*S).base)
return ERROR;
*e=*((*S).top);
(*S).top--;/
return OK;
}
Status stackEmpty(SqStack S)
{
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
void conversion()
{
SqStack S;
int N, d, ys;
SelemType x, e;
initStack(&S);
while(1)
{
printf("请输入一个非负十进制数(0 over):");
scanf("%d",&N);
if(0==N)
break;
printf("请输入要转换的进制:");
scanf("%d",&d);
while(N)
{
ys=N%d;
if(ys<=9)
x=ys+'0';
else
x=ys-10+'A';
push(&S,x);
N=N/d;
}
printf("转换所得的%d进制为: ",d);
while(!stackEmpty(S))
{
pop(&S,&e);
printf("%c",e);
}
printf("\n");
}
}
int main()
{
conversion();
return 0;
}
也可以采用数组构成栈来进行进制转换,缺点是数组比较固定,要初始化一个比较大的数组。