您的位置:首页 > 运维架构

只用一个栈顶指针top(没有bottom)实现的链式栈

2015-12-27 16:57 393 查看
#define TRUE        1
#define FALSE       0
#define OK          1
#define ERROR       0
#define OVERFLOW    -1
#define UNDERFLOW   -2

struct LNode// 链式栈s中的结点结构
{
char data;//数据
struct LNode *next;//指针
};
struct LStack{
struct LNode *top;//栈顶指针,这个栈结构没有bottom指针,感觉更简洁!
}
Status InitStack(LStack &s)
//构造一个空栈
{
struct LNode *p;
p=(LNode *)malloc(sizeof(LNode));
if(!p)
{
printf("存储分配失败!");
exit(OVERFLOW);
}
s.top=p;
p->next=NULL;
return OK;
}
Status DestoryStack(LStack &s)
//初始条件:栈s已存在
//操作结果:销毁栈
{
struct LNode *p;
p=s.top;
while(p)
{
s.top=p->next;
free(p);
p=s.top;
}
return OK;
}
Status StackEmpty(LStack s)
////初始条件:栈s已存在
//操作结果:若栈为空栈,返回true,否则返回false
{
if(s.top->next==NULL)
return TRUE;
return FALSE;
}
Status  StackLength(LStack s)
//初始条件:栈s已存在
//操作结果:返回s的元素个数,即栈的长度
{
int length=0;
struct LNode *p;
p=s.top;
while(p){
length++;
p=p->next;
}
return length;
}

Status Push(LStack &s,ElemType e)
//初始条件:栈s已存在
//操作结果:插入元素e成为新的栈顶元素
{
struct LNode *p;
p=(LNode *)malloc(sizeof(LNode));
if(!p)
exit(OVERFLOW);
p->data=e;
p->next=s.top;
s.top=p;
return OK;
}

Status  Pop(LStack &s,ElemType &e)
//初始条件:栈s已存在且非空
//操作结果:删除s的栈顶元素,并且用e返回其值
{
struct LNode *p;
if(!(s.top->next))
exit(ERROR);
p=s.top;
s.top=p->next;
e=p->data;
free(p);
return OK;
}

Status  GetTop(LStack s,ElemType &e)
//初始条件:栈s已存在且非空
//操作结果:用e返回s的栈顶元素
{
if(!(s.top->next))
exit(ERROR);
e = s.top->data;
s.top=s.top->next;
e=s.top->data;
return OK;
}

Status  StackTraverse(LStack s)
//从栈顶开始依次输出
{
struct LNode *p;
if(!(s.top->next))
exit(ERROR);
p=s.top;
while(p)
{
cout<<p->data<<endl;
p=p->next;
}
return OK;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息