数据结构 video 25 二进制转换为十进制
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define STACK_INIT_SIZE 20 //栈原始大小,20
#define STACKINCREAMENT 10 //每次增加10
typedef char ElemType; // ?定义一种类型
typedef struct // ?为什么结构体也要加一个typedef
{
ElemType *base; //新建一个栈
ElemType *top;
int stackSize; //定义一个容量
}sqStack; //栈序列 stcak sequence
void InitStack(sqStack *s) //初始化栈,定义一个*指针指向栈
{
s->base = (ElemType *)malloc(STACK_INIT_SIZE *sizeof(ElemType)); //内存大小需要*4
if(!s->base) //检查分配成功否
{
exit(0);
}
s->top = s->base;
s->stackSize =STACK_INIT_SIZE; //大小等于=初始化容量
}
void Push(sqStack *s,ElemType e) //入栈,需要检查。1判定栈是否满了;2检查内存是否分配成功 参数(栈名,元素)
{
if(s->top - s->base >=s->stackSize)
{
s->base = (ElemType *) realloc (s->base,(s->stackSize + STACKINCREAMENT)*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 StackLen(sqStack s)// 传递整个结构体
{
return (s.top - s.base); //指针相减 (结构,用点运算符;指针用->)
}
int main()
{
ElemType c; //不知道这是在干什么
sqStack s; //序列名称
int len, i, sum = 0;
InitStack(&s); //初始化m,见定义
printf("请输入一个二进制数,输入#表示结束\n");
scanf("%c",&c); //输入的字符串给了c
while(c!='#') //存入栈中,判定条件#
{
Push(&s,c); //插入
scanf("%c",&c);
}
getchar();
len = StackLen(s); //计算栈的长度,见定义
printf("栈的当前容量是:%d\n",len);
for(i=0;i<=len;i++)
{
Pop (&s,&c);
sum =sum+ (c-48) * pow(2,i);
}
printf("转化为十进制数是:%d\n",sum);
return 0;
}