现在的位置: 首页 > 综合 > 正文

特殊的线性表-栈-链栈

2017年10月24日 ⁄ 综合 ⁄ 共 931字 ⁄ 字号 评论关闭

链栈

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

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

抱歉!评论已关闭.