C语言 用栈实现进制转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言用栈实现进制转换
#include
#include
#include
#include
#define S_SIZE 100 //栈所占空间的大小
#define STACKINCREAMENT 10 //扩充空间时一次扩充十个字节struct SqStack
{
int *base; //栈底
int *top; //栈顶
int stacksize;//栈当前的存储空间
}*S;
//主函数开始
void main()
{
//子函数声明
void InitStack(S);//初始化空栈
int StackEmpty(SqStack S);//判栈空
void GetTop(SqStack S,int &e);//获得栈顶元素
void push(SqStack &S,int e);//进栈
void pop(SqStack &S,int &e);//出栈
void convert(SqStack &5,int N,int n);//十进制转N进制
int i,num;
unsigned n,N;//要转换的进制数及要转换的数
SqStack s;
InitStack(s);//初始化空栈
printf("输入要转换的十进制数和要转换为的进制数:\n");
scanf("%d,%d",&N,&n);
printf("%d转换为%d进制后为:\n",N,n);
convert(s,N,n);
}
void InitStack(SqStack &S)
{
S.base = (int *)malloc(S_SIZE*sizeof(int));
S.stacksize=S_Size;
S.top=S.base;//初始化空栈
}
int StackEmpty(SqStack S)
{
if(S.base==S.top)
return 1;
else
return 0;
}
void GetTop(Stack S,int &e)
{
//获得栈顶元素
e = *(S.top-1);
}
void push(SqStack &5,int e)
{
//进栈
if(S.top - S.base >= S.stacksize)
{
S.base = (int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int));
S.top = S.base += S.stacksize;
S.stacksize += STACKINCREAMENT;
}
*(S.top)=e;
S.top++;
}
void pop(SqStack &S,int &e)
{
//出栈
if(S.base != S.top)
{
S.top--;
e=*S.top;
}
}
void convert(SqStack &S,int N,int n)
{
InitStack(S);
do
{
push(S,N&n);
N = N/n;
}while(N != 0);
int i,e;
while(!StackEmpty(S))
{
pop(S,e);
if(e > 9)//十六进制时输出字母
{
e = e + 55;
printf("%c",e);
}
else
printf("%d",e);
}
printf("\n");
}