通过数据结构的学习,完成了通过C语言来实现使用栈来实现十进制转二、八、十六进制的功能#define _CRT_SECURE_NO_WARNINGS
#include
#include
#define SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量
typedef int SElemType;
typedef struct {
SElemType *base;
SElemType *top; //栈顶指针
int stacksize; //当前以分配的存储空间,以元素为单位
}sqstack;
void kong(sqstack &S) //构造一个空栈
{
S.base = (SElemType *)malloc(SIZE*sizeof (SElemType));
//if(!S.base) exit(OVERFLOW);//存储分配失败
S.top = S.base;
S.stacksize = SIZE;
//return OK;
}
void push(sqstack &S, SElemType e)
{
if (S.top - S.base >= S.stacksize){//栈满,追加存储空间
S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof (SElemType));
// if(!S.base) exit(OVERFLOW);//存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
// return OK;
}
void pop(sqstack &S, SElemType &e)
{
//if(S.top == S.base) return ERROR;
e = *--S.top;
//return OK:
}
void er(sqstack &S, int x)//十进制转换二进制
{
int a;
while (x)
{
a = x % 2;
push(S, a);
x = x / 2;
}
while (!(S.base == S.top))
{
int e;
pop(S, e);
printf("%d", e);
}
}
void ba(sqstack &S, int x)//十进制转换八进制
{
int a;
while (x)
{
a = x % 8;
push(S, a);
x = x / 8;
}
while (!(S.base == S.top))
{
int e;
pop(S, e);
printf("%d", e);
}
}
void shiliu(sqstack &S, int x)//十进制转换十六进制
{
int a;
while (x)
{
a = x % 16;
push(S, a);
x = x / 16;
}
while (!(S.base == S.top))
{
int e;
pop(S, e);
if (e<10) printf("%d", e);
else if (e == 10) printf("A");
else if (e == 11) printf("B");
else if (e == 12) printf("C");
else if (e == 13) printf("D");
else if (e == 14) printf("E");
else if (e == 15) printf("F");
}
}
int main(){
sqstack S;
kong(S);
int x;
printf("请输入要转换的十进制数:");
scanf("%d", &x);
printf("\n转换为二进制:");
er(S, x);
printf("\n转换为八进制:");
ba(S, x);
printf("\n转换为十六进制:");
shiliu(S, x);
system("pause");
}