您的位置:首页 > 理论基础 > 数据结构算法

数据结构.栈(C语言实现)

2013-10-01 14:58 447 查看
#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#include<math.h>

#define Status int

#define OK    1

#define ERROR    0

#define    SElemtype    int

#define STACK_INIT_SIZE    100

#define STACKINCREMENT    10

#define PRINT 1

typedef    struct {

    SElemtype    *base;

    SElemtype    *top;

    int stacksize;

}SqStack;

//initialize stack

Status InitStack(SqStack *S)

{

    S->base = (SElemtype *)malloc(STACK_INIT_SIZE * sizeof(SElemtype));

    if ( !S->base)

        return ERROR;

    S->top = S->base;

    S->stacksize = STACK_INIT_SIZE;

    

    return OK;

}

//stacklen

int StackLen(SqStack S)

{

    int i=0;

    while (S.top != S.base)

        {

            i++;

            S.top -=1;

        }

    return i;

    

    //return (S.top - S.base);

}

//get top

Status GetTop(SqStack *S, SElemtype *e)

{

    if (S->base == S->top)

    return ERROR;

    *e = *(S->top - 1);

    

    return OK;

}

//Push

Status Push(SqStack *S, SElemtype e)

{

    if (S->top - S->base >= S->stacksize)

        {

        S->base = (SElemtype *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(SElemtype));

        if (!S->base)

            return ERROR;

            

        S->top = S->base + STACK_INIT_SIZE;

        S->stacksize += STACKINCREMENT;

        }

        *S->top++ = e;

    

    #if defined(PRINT)

        printf("\n###### push %d into stack #######",e);

    #endif

    

        return OK;

}

//pop

Status Pop(SqStack *S,SElemtype *e)

{

    if (S->top == S->base)

        return ERROR;

    *e =*--S->top;

    #if defined(PRINT)

        printf("\n###### pop %d from stack #######",*e);

    #endif

    return OK;

}

int main(void)

{

    SElemtype c,m;

    SqStack    s;

    int len, i, sum = 0;

    printf("Please input a digit : ");

    

    InitStack(&s);

    scanf("%d",&c);

    

    while ( c > 0)

    {

        Push(&s, c);

        --c;

        sleep(1);

    }

        

    len = StackLen(s);

    #if defined(PRINT)

        printf("\n###### stack length : %d #######",len);

    #endif

    for (i = 0; i < len; ++i)

    {

        Pop(&s, &m);

        sum += m;

    }

    printf("\nDecimal is %d\n",sum);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: