满意答案
sew236ne6j
推荐于 2018.03.28
采纳率:54% 等级:12
已帮助:8909人
//这是我数据结构课上老师留的课堂作业,但是此代码并非本人原创。但已通过验证。
//这个代码可以把十进制的转换成任意进制的。
#include
#include
#define STACK_INIT_SIZE 50
#define STACK_INCREMENT 10
//①------------栈定义--------
typedef struct{
int *base;
int *top;
int stacksize;
}Stack;
//②-----------构造栈---------
Stack InitStack()
{
Stack s;
s.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s.base) exit(0);
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return s;
}
//③------------判空----------
int StackEmpty(Stack s)
{
if(s.base==s.top) //若为空,返回1
return 1;
else
return 0;
}
//④---------- 清空栈----------
void ClearStack(Stack s)
{
s.top=s.base;
}
//⑤------------压栈-------------
void Push(Stack *s,int elem) //必须用指针,否则top地址出了函数后不变
{
if((s->top-s->base+1)>=s->stacksize)
{
s->base=(int *)realloc(s->base,(STACK_INCREMENT+s->stacksize)*sizeof(int));
if(!s->base) exit(0);
s->top=s->base+s->stacksize;
s->stacksize+=STACK_INCREMENT;
}
*(s->top++)=elem;
}
//⑥------------出栈---------------
int Pop(Stack *s) //必须用指针,否则top地址出了函数后不变
{
if(s->base==s->top)
{
printf("栈为空!");
exit(0);
}
//printf("%d ",*(--s.top));
return *(--s->top);
}
//⑦------------求栈长-----------
int GetLength(Stack s)
{
return s.top-s.base;
}
//⑧-------------求栈顶----------
int GetTop(Stack s)
{
if(s.top==s.base)
{
printf("栈为空!\n");
exit(0);
}
return *(s.top-1);
}
//------------主函数-----------
int main()
{
int d1,d2,d3;
Stack s,*s1;
s=InitStack();
s1=&s;
/*
printf("stacksize=%d\n",s.stacksize);
Push(s1,5);
length=GetLength(s);
printf("栈长为:%d\n",length);
Push(s1,8);
length=GetLength(s);
printf("栈长为:%d\n",length);
printf("top=%d\n",GetTop(s));
printf("%d ",Pop(s1));
length=GetLength(s);
printf("栈长为:%d\n",length);
printf("%d ",Pop(s1));
length=GetLength(s);
printf("栈长为:%d\n",length);
*/
printf("输入要转换的十进制数及要转换为几进制:(d1 d2)\n");
scanf("%d%d",&d1,&d2);
d3=d1;
while(d1>=d2)
{
Push(s1,(d1%d2));
d1=d1/d2;
}
Push(s1,d1);
printf("%d转化为%d进制后为:\n",d3,d2);
while(!StackEmpty(s))
{
printf("%d",Pop(s1));
}
printf("\n");
}
00分享举报