|
发表于 2019-1-1 23:24:54
|
显示全部楼层
- #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;
- 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);
- }
- int main()
- {
- ElemType c;
- sqStack s;
- int len, i, sum = 0;
- InitStack(&s);
- printf("请输入二进制数,输入#符号表示结束\n");
-
-
-
-
-
-
-
- //scanf("%c", &c);
- //while(c != '#')
- while((c = getchar()) != '#')
- {
- push(&s, 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);
- }
- return 0;
- }
复制代码 |
|