特殊的线性表-栈-链栈

链栈

  栈的链式存储结构称为链栈。

1、链栈的类型定义

  链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。


       链栈的类型说明如下:

       typedef struct stacknode{
            DataType data
            struct stacknode *next
       }StackNode;
     
       typedef struct{
             StackNode *top;  //栈顶指针
       }LinkStack;
注意:
  ①LinkStack结构类型的定义是为了方便在函数体中修改top指针本身
 ②若要记录栈中元素个数,可将元素个数属性放在LinkStack类型中定义。

2、链栈的基本运算
(1) 置栈空

      Void InitStack(LinkStack *S)
      {
             S->top=NULL;
      }
(2) 判栈空
      int StackEmpty(LinkStack *S)
      {
            return S->top==NULL;
      }

(3) 进栈
      void Push(LinkStack *S,DataType x)
      {//将元素x插入链栈头部
            StackNode *p=(StackNode *)malloc(sizeof(StackNode));
            p->data=x;
            p->next=S->top;//将新结点*p插入链栈头部
            S->top=p;
       }

(4) 退栈
      DataType Pop(LinkStack *S)
      {
            DataType x;
            StackNode *p=S->top;//保存栈顶指针
            if(StackEmpty(S))
                  Error("Stack underflow.");  //下溢
            x=p->data;  //保存栈顶结点数据
            S->top=p->next;  //将栈顶结点从链上摘下
            free(p);
            return x;
       }

(5) 取栈顶元素
      DataType StackTop(LinkStack *S)
       {
            if(StackEmpty(S))
                 Error("Stack is empty.")
             return S->top->data;
        }

注意:
  链栈中的结点是动态分配的,所以可以不考虑上溢,无须定义StackFull运算。

转载自: http://student.zjzk.cn/course_ware/data_structure/web/zhanhuoduilie/zhanhuoduilie3.1.3.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值