| 
 | 
 
 
发表于 2014-12-22 16:59:10
|
显示全部楼层
 
 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
#define STACK_INIT_SIZE 20 
#define STACKINCREAMENT 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 - 1) 
        { 
                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; 
        int sum = 0; 
        InitStack(&s); 
        printf("请输入二进制数,输入#表示输入结束! \n"); 
        fflush(stdin); 
        scanf("%c",&c); 
        while (1) 
        { 
            if(c == '\n') 
                break; 
                Push(&s, c); 
                scanf("%c",&c); 
        } 
        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; 
} |   
 
 
 
 |