/*
将一个2进制数,从2进制转化为十进制(栈的基本操作)
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}sqStack;
/*
初始化栈空间
*/
void initStack(sqStack *s)
{
s->base = (ElemType *)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
if (!s->base)
{
exit(0);
}
else
{
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}
}
/************************************************************************/
/* 压栈操作 */
/************************************************************************/
void Push(sqStack *s,ElemType e)
{
//首先判定栈是否是满的,如果是满的执行以下操作
if (s->top-s->base>=s->stacksize)
{
s->base = (ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if (!s->base)
{
exit(0);
}
s->top = s->base+s->stacksize;
s->stacksize = s->stacksize+STACKINCREMENT;
}
*(s->top) = e;
s->top++;
}
void Pop(sqStack *s,ElemType *e)
{
if (s->top==s->base)
{
return;
}
*e = *--(s->top);
}
int StackLength(sqStack s)
{
return ((s.top-s.base));
}
void main()
{
//要输入的元素
ElemType c;
//栈结构体变量
sqStack s;
//栈元素长
int len;
//最后的10进制数
int sum = 0;
initStack(&s);
scanf("%c",&c);
while(c!='#')
{
Push(&s,c);
scanf("%c",&c);
}
getchar();
len = StackLength(s);
for (int i = 0;i<len;i++)
{
Pop(&s,&c);
sum = sum+(c-48)*pow(2,i);
}
printf("Decimal is %d\n",sum);
}
本文介绍了一个使用栈结构实现二进制数到十进制数转换的C语言程序。通过逐步压栈和弹栈操作,实现了二进制位权的累加计算。
542

被折叠的 条评论
为什么被折叠?



