栈的链式存储结构及其基本运算的实现

 

采用链式存储的栈,规定栈的所有操作都在单链表的表头进行。

节点*p进栈的操作是在头结点*s之后插入节点*p,出栈的操作是取出头结点*s之后的节点的data值,并将该节点删除。

(1)初始化栈

void InitStack(LiStack *&s)
{
  s=(LiStack *)malloc(sizeof(LiStack));
  s-next=null;     
}
(2)销毁栈 DestroyStack(s)
void DestroyStack(LiStack *&s)
{
  LiStack *p=s,*q=s->next;
  while(q!=null)
  {
    free(p);
    p=q;
    q=p->next;              
  }
  free(p);     
}
(3)判断栈是否为空StackEmpty(s)
bool StackEmpty(LiStack *s)
{
  return (s->next==null);     
}
(4)进栈Push(s,e)
void Push(LiStack *&s,ElemType e)
{
  LiStack *p;
  p=(LiStack *)malloc(sizeof(Listack));
  p->data=e;
  p->next=s->next;
  s->next=p;     
} 
(5)出栈Pop(s,e)
bool Pop(LiStack *&s,ElemType &e)
{
  LiStack *p;
  if(s->next==null)
    return false;
  p=s->next;
  e=p->data;
  s->next=p->next;
  free(p); 
  return true;  
}