马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我昨天晚上看了小甲鱼的用栈实现二进制转十进制,然后留给我们的作业是二进制转八进制和十六进制,昨天编了我好久,都没编成功,昨天睡觉前整理了一下思路,今天早上编成功的,这次是自己编的啊,就是栈的部分是参考小甲鱼视频里的,由于那堂课的源代码要30鱼币,好贵的,只好自己苦命的编了。求大神指导。#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define STACK_INIT_SIZE 20
#define STACKICREAMENT 10
typedef char ElemType;
typedef struct
{
ElemType *top;
ElemType *base;
int stacksize;
}sqStack;
void Initstack(sqStack *s)
{
s->base=(ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType) );
if(!s->base)
{
exit(0);
}
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
}
void Push(sqStack *s, ElemType e)
{
if(s->top - s->base >= s->stacksize)
{
s->base=realloc(s->base, (s->stacksize + STACKICREAMENT ) * sizeof(ElemType) );
if(!s->base)
{
exit(0);
}
}
*(s->top)=e;
s->top++;
}
void Pop(sqStack *s, ElemType *e)
{
if(s->top==s->base)
{
return;
}
*e= *--(s->top);
}
int Stacksize(sqStack s)
{
return (s.top - s.base);
}
int main()
{
int i,j,k,a,len,len1,len2,sum1=0,sum2=0;
ElemType e,sum;
sqStack s1,s2;
Initstack(&s1);
Initstack(&s2);
printf("请输入二进制数,以#结束\n");
scanf("%c",&e);
while(e!='#')
{
Push(&s1,e);
scanf("%c",&e);
}
getchar();
len1=Stacksize(s1);
printf("该栈的容量为%d\n",len1);
len=len1;
while(len % 3 != 0)
{
len++;
}
for(i=0; i< len /3; i++)
{
a=3;
if(i == len /3 - 1 && len != len1)
{
a= len1 % 3;
}
for(j=0; j<a; j++)
{
Pop(&s1,&e);
sum1=sum1+(e-48)*pow(2,j);
}
sum=sum1+48;
sum1=0;
Push(&s2,sum);
}
len2=Stacksize(s2);
printf("转换为八进制为:");
for(k=0; k<len2 ;k++)
{
Pop(&s2,&sum);
printf("%c",sum);
}
return 0;
}
|