利用栈二进制转化为十进制

来源:互联网 发布:天互数据 赵 编辑:程序博客网 时间:2024/06/05 17:47

利用数据中的栈来进行数制转换,可以深刻领悟栈的含义,也可对栈的定义,入栈,出栈来进行领悟。

程序代码如下:

#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(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=(ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT)*sizeof(ElemType));    //动态定义数据空间 if(!s->base)exit(0);}*(s->top)=e;//把新添加的e的地址赋给s->top,进行入栈 s->top++;//栈顶上移 }void Pop(sqStack *s,ElemType *e)//出栈 {if(s->top==s->base)//当栈为空时,出栈结束 return;*e=*--(s->top);//把栈顶的元素的值赋给e,然后栈顶下移一位  }   int StackLen(sqStack s)//栈当前长度检测  { return (s.top - s.base);//直接栈顶减去栈尾,系统自定义计算元素个数  }  int main() { ElemType c; sqStack s; int len,i,sum=0;  InitStack(&s);  printf("请输入二进制数,输入'B'表示结束!\n"); scanf("%c",&c); while(c!='B')//控制循环条件, 因为B是二进制的标志,所以选用B  { 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); }