I come, I see, I conquer

                    —Gaius Julius Caesar

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

/*******************************************************************************
/* <PRE>
/* 版权所有    : -
/* 模块名      : 栈和队列
/* 文件名      : lstack.cpp
/* 功能描述    : 链栈的表示与实现 
/* 作者        : <xxx>
/* 版本        : 1.0
/* -----------------------------------------------------------------------------
/* 备注        : -
/* -----------------------------------------------------------------------------
/* 修改记录    :
/* 日 期        版本     修改人        修改内容
/* 2011/01/01   1.0      <xxx>         创建
/* </PRE>
******************************************************************************
*/
#include 
"stdio.h" 
#include 
"stdlib.h"

/******************************************************************************
/* 数据类型和常量定义
/*****************************************************************************
*/
typedef 
int    Status;
typedef 
int    SElemType;

#define TRUE         1
#define FALSE        0
#define OK           1
#define ERROR        0
#define OVERFLOW    -2

/******************************************************************************
/* 数据结构声明
/*****************************************************************************
*/
typedef 
struct SNode {
    SElemType data;
    
struct SNode *next;
}SNode;

typedef 
struct LinkStack {
    SNode 
*base;
    SNode 
*top;
}LinkStack;


/*******************************************************************************
/* <FUNC>
/* 函数名   : InitStack
/* 功能     : 构造空栈
/* 参数     : -
/* 返回值   : -
/* 备注     : -
/* 作者     : <xxx>
/* </FUNC>
******************************************************************************
*/
Status InitStack(LinkStack 
&S) {
    S.top 
= S.base = NULL;
    
return OK;
}

/*******************************************************************************
/* <FUNC>
/* 函数名   : Push
/* 功能     : 入栈
/* 参数     : -
/* 返回值   : -
/* 备注     : 插入元素e为新的栈顶元素
/* 作者     : <xxx>
/* </FUNC>
******************************************************************************
*/
Status Push(LinkStack 
&S, SElemType e) {
    SNode 
*= (SNode *)malloc(sizeof(SNode));
    
if (!p) exit(OVERFLOW);
    p
->data = e;
    p
->next = S.top;
    S.top 
= p;
    
return OK;
}

/*******************************************************************************
/* <FUNC>
/* 函数名   : Push
/* 功能     : 出栈
/* 参数     : -
/* 返回值   : -
/* 备注     : 若栈不空, 则删除S的栈顶元素, 用e返回其值, 并返回OK; 否则返回ERROR
/* 作者     : <xxx>
/* </FUNC>
******************************************************************************
*/
Status Pop(LinkStack 
&S, SElemType &e) {
    
if (S.top == S.base)
        
return ERROR;
    SNode 
*= S.top;
    S.top 
= S.top->next;
    e 
= p->data;
    free(p);
    
return OK;
}

/*******************************************************************************
/* <FUNC>
/* 函数名   : StackEmpty
/* 功能     : 判断栈是否为空
/* 参数     : -
/* 返回值   : -
/* 备注     : 若栈空则返回TRUE; 否则返回FALSE
/* 作者     : <xxx>
/* </FUNC>
******************************************************************************
*/
Status StackEmpty(LinkStack S)
{
    
if (S.base == S.top) return TRUE;
    
else return FALSE;
}


/*******************************************************************************
/* <FUNC>
/* 函数名   : main
/* 功能     : 测试函数
/* 参数     : -
/* 返回值   : -
/* 备注     : -
/* 作者     : <xxx>
/* </FUNC>
******************************************************************************
*/
void main()
{
    LinkStack S;  SElemType e;
    InitStack(S);
    Push(S, 
10);
    Push(S, 
20);
    
if(OK == Pop(S, e)) printf("%d\n", e);
    
if(OK == Pop(S, e)) printf("%d\n", e);
    
if(OK == Pop(S, e)) printf("%d\n", e);
}
posted on 2008-09-24 21:02  jcsu  阅读(655)  评论(0编辑  收藏  举报