#include <stdio.h>
#define STACK_NUM 100
#define STACK_NUM_ADD 100
typedef struct num
{
int num;
struct num *Pnext;//为什么需要这个指针
}num;
typedef struct change
{
num *base;
num *top;
int stacksize;
}change;
//初始化栈
int initstack(change *s)
{
(*s).base = (num *)malloc(sizeof(num));
if (!(*s).base)
return 0;
(*s).top = (*s).base;
(*s).stacksize = STACK_NUM;
return 1;
}
// 入栈 若输入成功就返回1 否则返回0
int push(change *x,int y)
{
if ((*x).top - (*x).base >= (*x).stacksize)
{
(*x).base = (num*)realloc((*x).base, ((*x).stacksize + STACK_NUM_ADD) * sizeof(num));
if (!(*x).base)
return 0;
(*x).top = (*x).top + (*x).stacksize;
(*x).stacksize += STACK_NUM_ADD;
}
num *p;
p = (num*)malloc(sizeof(num));
p->num = y;
p->Pnext = (*x).top;
(*x).top = p;
return 1;
}
//弹出栈顶并释放栈顶 并记录数据
int Pop(change *s, int *e)
{
if (s->base == s->top)
{
return 0;
}
change *temp;
*e = s->top->num;
temp = s->top->Pnext;
free(s->top);
s->top = temp;
return 1;
}
//如果栈为空就返回1 否则返回0
int isStackempty(change s)
{
if (s.base == s.top)
{
return 1;
}
else
return 0;
}
//进行数制转换
void conversion()
{
int n, d;
change s;
initstack(&s);
printf("请输入要被转化的数字:\n");
scanf_s("%d", &n);//要被转化的数字
printf("请输入转化数制:\n");
scanf_s("%d", &d);//转化的数制
while (n)
{
push(&s, n%d);
n = n / d;
}
printf("转化后的数是:\n");
while (!isStackempty(s) )
{
int e;
Pop(&s, &e);
printf("%d",e);
}
printf("\n");
}
int main()
{
//输入要转换的数字 和要转换的进制
conversion();
return 0;
}
#define STACK_NUM 100
#define STACK_NUM_ADD 100
typedef struct num
{
int num;
struct num *Pnext;//为什么需要这个指针
}num;
typedef struct change
{
num *base;
num *top;
int stacksize;
}change;
//初始化栈
int initstack(change *s)
{
(*s).base = (num *)malloc(sizeof(num));
if (!(*s).base)
return 0;
(*s).top = (*s).base;
(*s).stacksize = STACK_NUM;
return 1;
}
// 入栈 若输入成功就返回1 否则返回0
int push(change *x,int y)
{
if ((*x).top - (*x).base >= (*x).stacksize)
{
(*x).base = (num*)realloc((*x).base, ((*x).stacksize + STACK_NUM_ADD) * sizeof(num));
if (!(*x).base)
return 0;
(*x).top = (*x).top + (*x).stacksize;
(*x).stacksize += STACK_NUM_ADD;
}
num *p;
p = (num*)malloc(sizeof(num));
p->num = y;
p->Pnext = (*x).top;
(*x).top = p;
return 1;
}
//弹出栈顶并释放栈顶 并记录数据
int Pop(change *s, int *e)
{
if (s->base == s->top)
{
return 0;
}
change *temp;
*e = s->top->num;
temp = s->top->Pnext;
free(s->top);
s->top = temp;
return 1;
}
//如果栈为空就返回1 否则返回0
int isStackempty(change s)
{
if (s.base == s.top)
{
return 1;
}
else
return 0;
}
//进行数制转换
void conversion()
{
int n, d;
change s;
initstack(&s);
printf("请输入要被转化的数字:\n");
scanf_s("%d", &n);//要被转化的数字
printf("请输入转化数制:\n");
scanf_s("%d", &d);//转化的数制
while (n)
{
push(&s, n%d);
n = n / d;
}
printf("转化后的数是:\n");
while (!isStackempty(s) )
{
int e;
Pop(&s, &e);
printf("%d",e);
}
printf("\n");
}
int main()
{
//输入要转换的数字 和要转换的进制
conversion();
return 0;
}