运用栈这种数据结构,简单的实现进制转换,代码如下:
/*进制转换问题*/
#include<stdio.h>
#include<stdlib.h>
#define stack_init_size 100
#define stackincrement 10
#define error 1
#define true 1
#define false 0
#define overflow -2
#define ok 1
typedef int Elemtype;
typedef int Status;
typedef struct
{
Elemtype *base;
Elemtype *top;
int stacksize;
}SqStack;
/*初始化栈函数*/
Status Initstack(SqStack&s)
{
s.base=(Elemtype*)malloc(stack_init_size*sizeof(Elemtype));
if(!s.base)
exit(overflow);
s.top=s.base;
s.stacksize=0;
return ok;
}
/*入栈函数*/
Status Push(SqStack &s,Elemtype e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(Elemtype*)realloc(s.base,(s.stacksize+stackincrement)*sizeof(Elemtype));
if(!s.base)
exit(overflow);
s.top=s.base+s.stacksize;
s.stacksize+=stackincrement;
}
*(s.top)=e;
(s.top)++;
return ok;
}
/*出栈函数*/
Status Pop(SqStack &s,Elemtype &e)
{
if(s.top==s.base)
return error;
s.top--;
e=*(s.top);
return ok;
}
/*判断非空函数*/
Status StackEmpty(SqStack &s)
{
if(s.top==s.base)
return true;
else
return false;
}
/*进制转换函数*/
void conversion(int i)
{
SqStack s;
Elemtype e;
Initstack(s);
printf("十进制%d转换为二进制为:",i);
while(i)
{
Push(s,i%2);
i=i/2;
}
while(!StackEmpty(s))
{
Pop(s,e);
printf("%d",e);
}
}
/*主函数*/
int main()
{
int i;
scanf("%d",&i);
conversion(i);
printf("\n");
system("pause");
return 0;
}
其他的进制转换可类比。
版权声明:本文为qq_42475914原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。