利用栈实现二进制转十进制

mac2026-04-25  10

#include"pch.h" #include <stdio.h> #include <stdlib.h> #include<math.h> #define STACK_INIT_SIZE 20 //定义栈的最初容量 #define STACK_INCREASEMENT 10 //定义每次增加的容量 //声明结点 typedef char ElemType; typedef struct { ElemType *top, *base; 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 c) { //判断栈是否已满 if (s->top - s->base >= s->stacksize) { //给栈增加容量 s->base = (ElemType *)realloc(s->base, (s->stacksize + STACK_INCREASEMENT) * sizeof(ElemType)); if (!s->base) //分配失败 exit(0); } *(s->top) = c; 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("请输入一个二进制数,以#结尾:"); scanf_s("%c", &c); while (c != '#') { Push(&s, c); scanf_s("%c", &c); } getchar(); len = StackLen(s); for (i = 0; i < len; i++) Pop(&s, &c); sum += (c - 48)*pow(2, i); //0的ascll码为48 printf("栈的当前容量为%d\n", len); printf("转化为十进制数为%d\n", sum); }
最新回复(0)