C语言 用栈实现进制转换

  • 格式:docx
  • 大小:12.82 KB
  • 文档页数:3

下载文档原格式

  / 8
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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");

}