#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<math.h>
/*注意編譯時命令爲 gcc stank.c -lm加上編譯的時候鏈接數學庫*/
typedef char ElemType ;
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
ElemType *base;
ElemType *top;
int stackSize;
}sqStack;
void initStack(sqStack *s);
void Push(sqStack *s,ElemType e);
void Pop(sqStack *s,ElemType *e);
void DestroyStack(sqStack *s);
int StackLen(sqStack *s);
int main()
{
sqStack stack,*S ;//注意要有實體不能用指針直接來
S = &stack;
initStack(S);
int len;
int i;
int sum;
char c;
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;
}
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 = 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));
// printf("%d",*(s->top-1));
// s->top--;
}
//有問題
void DestroyStack(sqStack *s)
{
int i,len;
len = s->stackSize;
// len = 2;
for(i=0;i < len;i++)
{
free(s->base);
s->base++;
}
s->base = s->top = NULL;
s->stackSize = 0;
}
int StackLen(sqStack *s)
{
return (s->top-s->base);
}
BintoDec二進制轉換爲十進制(棧)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.