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

#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值