#include<iostream>
#include "stdlib.h"
#include<cmath>
using namespace std;
#define STACK_SIZE 100
#define STACKINCREMENT 10
typedef char ElemType;
struct sqStack
{
ElemType *top;
ElemType *base;
ElemType stackSize;
};
void initStack(sqStack *s)
{
s->base=(ElemType*)malloc(sizeof(ElemType)*STACK_SIZE);
if(!s->base)
exit(0);
s->top=s->base;
s->stackSize=STACK_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;
s->top--;
*e=*(s->top);
}
//清空一个栈,不改变物理内存(即可恢复)
void Clear(sqStack *s)
{
s->top=s->base;
}
//销毁一个栈(改变内存)
void Destroy(sqStack *s)
{
for(int i=0;i<s->stackSize;i++)
{
free(s->base);
s->base++;
}
s->base=s->top=NULL;
s->stackSize=0;
}
//计算栈的当前容量
int Stacklen(sqStack *s)
{
return (s->top-s->base);
}
//利用栈的结构特点。将二进制转化为十进制
void main()
{
int sum=0;
int len;
sqStack s;//如果写sqStack *s,则指针必须初始化,否则不可当实参
initStack(&s);
char c;
printf("请输入二进制数,以'#'结束!");
scanf("%c",&c);
while(c!='#')
{
Push(&s,c);
scanf("%c",&c);
}
len=Stacklen(&s);
for(int i=0;i<len;i++)
{
Pop(&s,&c);
sum+=(c-48)*pow(2,i);
}
cout<<sum<<endl;
}
栈之二进制转化为十进制
最新推荐文章于 2022-05-21 09:37:30 发布