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

全部博文(41)

文章存档

2010年(1)

2007年(23)

2006年(17)

我的朋友

分类: C/C++

2006-12-26 20:48:52

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

#include
#include

typedef struct SNode
{
    int data;
    struct SNode *next;
}SNode,*SPtr;
typedef struct SLink
{
    SNode *base,*top;
}SLink;

void InitLStack(SLink *S)
{
    S->base = S->top = (SPtr)malloc(sizeof(SNode));
    if(!S->base)
    {
        printf("memory error!\n");
        exit(0);    
    }
    S->base->next = NULL;
}

void ClearLStack(SLink *S)
{
    S->top = S->base;
    SPtr p;
    while(!S->base->next)
    {
        p = S->base->next;
        S->base->next = p->next;
        free(p);
    }
    S->top->next = NULL;
}

void DestroyLStack(SLink *S)
{
    SPtr p = S->base;
    while(p)
    {
        S->top = p;
        p = p->next;
        free(S->top);
    }    
}
void Push(SLink *S, int i)
{
    SPtr p;
    p = (SPtr)malloc(sizeof(SNode));
    if(!p)
    {
        printf("memory error!\n");
        exit(0);    
    }
    p->data = i;
    p->next = NULL;
    S->top->next = p;
    S->top = p;    
}

void Pop(SLink *S, int *i)
{
    if(S->base == S->top)
    {
        printf("empty stack!\n");
        exit(0);
    }
    *i = S->top->data;
    SPtr p = S->base;
    while(p->next != S->top)
        p = p->next;
    S->top = p;
    free (p->next);
    p->next = NULL;
}

int main()
{
    int i, t;
    SLink S;
    InitLStack(&S);
    for(i=0; i<10; i++)
        Push(&S, i+1);
    for(i=0; i<11; i++)
    {
        Pop(&S, &t);
        printf("%d ",t);
    }
    ClearLStack(&S);
    DestroyLStack(&S);
}
阅读(974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~