Chinaunix首页 | 论坛 | 博客
  • 博客访问: 391656
  • 博文数量: 199
  • 博客积分: 154
  • 博客等级: 入伍新兵
  • 技术积分: 1530
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-14 08:43
文章分类

全部博文(199)

文章存档

2015年(101)

2014年(97)

2011年(1)

分类: C/C++

2015-05-18 14:24:47

#include "stdio.h"
#include "math.h"
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10


typedef  char ElemType;
typedef struct{
    ElemType *base;
    ElemType *top;
    int stacksize;
}sqStack;


initStack(sqStack *s)
{
    /*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
    s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if(!s->base) exit(0);     /*分配空间失败*/
    s->top = s->base;       /*最开始,栈顶就是栈底*/
    s->stacksize = STACK_INIT_SIZE;   /*最大容量为STACK_INIT_SIZE */
}
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++;
}


Pop(sqStack *s , ElemType *e){
    if(s->top == s->base) return;
    *e = *--(s->top);     
}


int StackLen(sqStack s){
    return (s.top - s.base) ; 
}
main()
{
    ElemType c;
    sqStack s;
    int len , i , sum = 0;
    printf("Please input a Binary digit\n");


    initStack(&s);  /*创建一个栈,用来存放二进制字符串*/
    /*输入0/1字符表示的二进制数,以#结束*/
    scanf("%c",&c);
    while(c!='#')
    {
        Push(&s,c);
        scanf("%c",&c);
    }
    getchar();
    len = StackLen(s);  /*得到栈中的元素个数,即二进制数的长度*/


    for(i=0;i         Pop(&s,&c);
        sum = sum + (c-48) * pow(2,i);  /*转换为十进制*/
    }
    printf("Decimal is %d\n",sum);
}

阅读(1245) | 评论(0) | 转发(0) |
0

上一篇:链表

下一篇:队列

给主人留下些什么吧!~~