数据结构进制转换源代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hhy2014yatan/article/details/46922591
#include<stdio.h>
#include<stdlib.h>
#define SIZE 100
#define ADDSIZE 10
#define ERROR 0
#define OK 1
typedef struct{    
int *base;    
int *top;    
int stacksize;
}sqstack;
int Initstack(sqstack &s);
int push(sqstack &s, int e);
int pop(sqstack &s,int &e);
int stackempty(sqstack &s);
void conversion(int n,int m);
int main()
{    
            sqstack s;
Initstack(s);
int N;
printf("......进制转换......\n\n");
while(scanf("%d",&N)!=0)
{printf("以下为转化结果:\n\n");
if(N==0)
return ERROR;
else
{
printf("您转化的二进制是:");
conversion(N,2);
printf("您转化的八进制是:");
conversion(N,8);
printf("您转化的十六进制是:");
conversion(N,16);
}
}
   return OK;
}
int Initstack(sqstack &s)
{     
s.base = (int *)malloc(SIZE * sizeof(int));    
if(!s.base) return ERROR;    
s.top = s.base;    
s.stacksize = SIZE;    
return OK;
}
int push(sqstack &s, int e)

if(s.top - s.base >= s.stacksize)
{        
s.base = (int *) realloc(s.base, (s.stacksize + ADDSIZE) * sizeof(int)); 
 if(!s.base)
return ERROR;        
s.top = s.base + s.stacksize;        
s.stacksize += ADDSIZE;    
}    
*s.top++ = e;    
return OK;
}
int pop(sqstack &s,int &e)
{
    if(s.top == s.base)         
return ERROR;   
e = * --s.top;    
return OK;
}
int stackempty(sqstack &s)
{    
if(s.base == s.top)        
return OK;    
else         
return ERROR;
}


void conversion(int n,int m)
{


int e;
    sqstack s;
    Initstack(s);
while(n)
{
push(s,n%m);
n=n/m;
}
while(!stackempty(s))
{
pop(s,e);
if(e>9)
printf("%c",'A' + e - 10);
else
printf("%d",e);
}
printf("\n");
}



























猜你喜欢

转载自blog.csdn.net/hhy2014yatan/article/details/46922591