C语言顺序栈实现

/*数序栈*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define SElemType char
#define STACK_INIT_SIZE   100
#define STACK_INCREMENT 10
#define OK 1
#define ERROR -1
#define Status int
#define OVER -1
/*栈空 top == base
**栈满 top-base = stacksize
**
*/
typedef  struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
    int length;
}SqStack;
/*数序栈结构*/

/*栈的初始化*/
Status  initSqStack(SqStack *s)
{
    s->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(! s->base) return OVER;
    s->top = s->base;
    s->stacksize = STACK_INIT_SIZE;
    s->length = 0;
    return OK;
}
Status pushSqStack(SqStack *s,const SElemType item)
{
    /* stack full*/
    if(s->top - s->base == STACK_INIT_SIZE)
    {
        s->base = (SElemType*)realloc(s->base,(STACK_INCREMENT+STACK_INIT_SIZE)*sizeof(SElemType));
        if(!s->base) return OVER;
        s->top = s->base+ s->stacksize;
        s->stacksize += STACK_INCREMENT;
    }
    *s->top++ = item;

    return OK;
}

Status popSqStack(SqStack *s,SElemType *item)
{
    if(s->top == s->base) return ERROR;
    *item = *--(s->top);
    return OK;
}
/*获取栈长度*/
int lengthSqStack(SqStack *s)
{
    return s->top-s->base;
}

int main(void)
{
    SElemType data;
    SqStack s;
    int len,i,sum =0;
    printf("Please input a binary digit\n");
    initSqStack(&s);
    scanf("%c",&data);
    while(data !='#')
    {
        pushSqStack(&s,data);
        scanf("%c",&data);
    }
    getchar();
    len = lengthSqStack(&s);
    for(i = 0;i<len;i++)
    {
        popSqStack(&s,&data);
        printf("%c",data);
        sum += (data-48)*pow(2,i);
    }
    printf("Decimal is :%d.\n",sum);
    getchar();

    return 0;
}

 

posted @ 2013-12-24 15:55  平林新袖  阅读(319)  评论(0编辑  收藏  举报