1:第一步创建一个栈
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxsize 20
typedef char Elemtype;
typedef struct
{
Elemtype *top;
Elemtype *base;
int stacksize;
}sqstack;
int initstack(sqstack &s)
{
s.base = (Elemtype *)malloc(sizeof(Elemtype) * maxsize);
if(!s.base)
exit(0);
s.top = s.base;
s.stacksize = maxsize;
}
void push(sqstack &s,Elemtype e)
{
if(s.top - s.base >= s.stacksize)
s.base = (Elemtype *)realloc(s.base,(s.stacksize + maxsize) * 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);
}
2:第二步编写核心代码
算法思想:
栈的特点是“先进后出”,例如键入二进制‘10101100#’ 入栈顺序从左依次往右入栈,输入“#”时表示输入结束”。出栈则是最右边的0先出栈,后面的元素依次出栈参与运算。当栈里面的元素全部出栈完毕循环结束。
int main()
{
Elemtype c;
sqstack s;
initstack(s);
int len,i,sum = 0;
printf("请输入二进制数,输入#号表示结束!\n");
scanf("%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",sum);
return 0;
}
运行结果:
验证:
验证结果正确!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)