Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121932
  • 博文数量: 41
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-21 22:50
文章分类

全部博文(41)

文章存档

2010年(1)

2007年(23)

2006年(17)

我的朋友

分类: C/C++

2006-12-20 22:16:00

//Author: Guo R.H
//Date:06.12.23
//USTC

#include
#include
#define STACK_INI_SIZE  25
#define STACKINC          10
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}Stack;

void InitStack (Stack *s);
void DestroyStack (Stack *s);
void ClearStack (Stack *s);
int StackEmpty (Stack *s);
int StackLength (Stack *s);
void GetTop (Stack *s, int *e);
void Push(Stack *s, int e);
void Pop(Stack *s, int *e);

int main()
{
    Stack *ps, st;
    int i, temp;
    ps = &st;
    InitStack(ps);
    for(i=0; i<50; i++)
        Push(ps, i);
    for(i=0; i<50; i++)
    {
        Pop(ps, &temp);
        printf("%d ", temp);
    }
    return 0;
}

void InitStack (Stack *s)
{
    s->base = (int *)malloc(STACK_INI_SIZE*sizeof(int));
    if (!s->base)
        exit(0);
    s->top = s->base;
    s->stacksize = STACK_INI_SIZE;
}

void DestroyStack (Stack *s)
{
    free (s->base);
}

void ClearStack (Stack *s)
{
    s->top = s->base;
}

int StackEmpty (Stack *s)
{
    if (s->top==s->base)
        return 0;
    else
        return 1;
}

int StackLength (Stack *s)
{
    return s->stacksize;
}

void GetTop (Stack *s, int *e)
{
    if(s->top==s->base)
    return;
    *e = *(s->top-1);
}

void Push(Stack *s, int e)
{
    if(s->top - s->base >=s->stacksize)
    {
        s->base = (int *)realloc(s->base,(s->stacksize+STACKINC)*sizeof(int));
        if(!s->base)
            exit(0);
        s->top = s->base +     s->stacksize;
        s->stacksize += STACKINC;
    }
    *s->top++ = e;
}

void Pop(Stack *s, int *e)
{
    if(s->top == s->base)
        return;
    *e = * --s->top;
}

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

上一篇:单链表创建

下一篇:双向链表的创建

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