栈的存储结构和应用

来源:互联网 发布:阿里云购买云服务器 编辑:程序博客网 时间:2024/05/21 04:20
//通过栈将二进制转10进进制#include <stdio.h>#include <stdlib.h>#include <math.h>#define STACK_INIT_SIZE 20#define STACKINCREAMENT 10typedef 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 + STACKINCREAMENT)*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("Intput a binary number,end of the '#':");    scanf("%c",&c);    while(c != '#'){        Push(&s,c);        scanf("%c",&c);    }    getchar();//filter '\n'    len = stackLen(s);    printf("The capacity of Stack is %d\n",len);    for(i = 0; i < len; i++){        Pop(&s,&c);        sum = sum +(c - '0') * pow(2, i);    }    printf("Binary to Dec. is %d", sum);    return 0;}

结果:

这里写图片描述