您的位置:首页 > 其它

链栈的实现

2012-10-16 10:13 239 查看
#include
#include

typedef struct
{
int a;

}ElemType;

typedef enum { ERROR, OK } Status;

typedef struct SNode
{
ElemType data;
struct SNode
*prior; //prior将指向其前一次入栈的元素
}SNode, *SLink;

Status InitStack( SLink &top ) //构造一个空栈S, top 为栈顶,它唯一地确定一个栈。空栈时为NULL。

{
top = NULL;
return OK;
}//InitStack

int StackEmpty( SLink *top )//判断链栈是否为空
{
return ( top? ERROR : OK
);
}

Status Push(SLink &top, ElemType e) //插入元素e为新的栈顶元素
{
SLink
p;
p=( SLink ) malloc(sizeof (SNode)); //申请栈元素的结点空间
if(!p) exit (
ERROR );
p->data=e;
//为新结点赋值
p->prior=top;
//将其插入到原栈顶结点后
top=p; //栈顶指针指向该结点
return
OK;
}//Push

Status Pop (SLink &top, ElemType
&e)//若栈不空,则用e返回S的栈顶元素值后删除该结点,并返回OK,否则返回ERROR
{
if ( top ==
NULL)
return ERROR;
SLink p;
p = top;
e = p->data;
//返回栈顶元素值
top = top->prior;
free(p); //栈顶指针指向新的栈顶结点,释放被删除结点空间

return OK;
}//Pop

Status GetTop(SLink top, ElemType
&e)//若栈不空,则用e返回S的栈顶元素并返回OK,否则返回ERROR
{
if (top == NULL)
return
ERROR;
e = top->data; //返回栈顶元素值

return OK;
}//GetTop

Status StackTraverse(SLink top, Status
(*visit)(ElemType))//若栈不空,则使用visit函数遍历栈的元素并返回OK,否则返回ERROR
{
if ( top ==
NULL ) return ERROR;
SLink p;
p=top;
//p指向栈顶结点
while(p)
{
//通过循环对栈的元素遍历
visit(p->data);
p=p->prior;
}
return
OK;
}//StackTraverse

Status ClearStack( SLink &top
)//若栈不空,则通过循环清空栈的元素并返回OK,否则返回ERROR
{
if( top == NULL )
return
ERROR;
SLink p;
while( top )
{
//通过循环逐一释放栈元素结点的空间
p = top;
top = top->prior;
free( p
);
}
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: