BintoDec二進制轉換爲十進制(棧)

#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);
}

發佈了41 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章