用数据结构(c语言)实现进制转换

  • Post author:
  • Post category:其他


运用栈这种数据结构,简单的实现进制转换,代码如下:

/*进制转换问题*/ 
#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 版权协议,转载请附上原文出处链接和本声明。