zoukankan      html  css  js  c++  java
  • 线性数据结构——链栈

    链栈

      个人认为,简单形容栈就是只有一个头能进出。first in last out相信不是很难理解的问题,在这里主要讲一讲链栈。

      首先链栈同样是栈,当然也是filo的。

      链栈是指采用链接存储的结构实现的栈。事实上链栈和链表的样子很像。

                                                                                

      其中data为数据,next为下一个数据的指针

    class LinkStack
    {
        datatype data;
        LinkStack *next;
    }

      LinkStack就是就是这样的数据类型。LinkStack t,*S=&t;。然后使用S->data描述该点元素的值,S->next来描述该节点逻辑后继值的存储地址。

      由于链栈不存在栈满的情况,所以不需要像正常的顺序栈一样判断是否栈满。对链栈的操作同样有以下几类:置空栈,判空栈,判满栈,取栈顶元素,入栈,出栈。

    链栈置空算法

    LinkStack * SetStack()
    {
        LinkStack *LS;
        LS=NULL;
        return LS;
    }

    链栈判断空算法

    int StackEmpty(LinkStack *LS)//空时返回1,不空返回0
    {
        if(LS==NULL)
        return 1;
        else
        return 0;
    }

    链栈取顶算法

    datatype GetTop(LinkStack *LS)
    {
        if(LS!=NULL)
            return LS->data;
        else
            cout<<"栈空";
    }


    链栈入栈算法

    在栈顶插入值为x的元素存放在一个新创建的LinkStack的data中。原本的LS与新创建的LinkStack的next相等。然后LS与原来的首元素断开,与x连接。如图:

    LinkStack *Push(LinkStack *LS,datatype x)
    {
        LinkStack *p;
        p=(LinkStack *)malloc(sizeof(LinkStack))
        p->data=x;
        p->next=LS;
        LS=p;
        return LS;
    }


    链栈出栈算法

    首先将创建一个新的LinkStack  *pop,不需要分配内存空间。直接将pop指向出栈data,LS指向pop的next空间。然后断开LS原本指向pop中data。

    LinkStack *POP(LinkStack *LS)
    {
        LinkStack *poptem;
        poptem=LS;
        LS=poptem->next;
        free(poptem);
        return LS;
    }

     具体链栈和链表的区别,后面会讲到。

  • 相关阅读:
    Web服务技术协议:REST与SOAP
    几种常见的Web服务器
    在浏览器中输入网址后是怎么跳转到指定的服务器的
    forward(请求转发)和redirect(重定向)的区别
    Hook钩子编程
    闭包
    JSP
    临界区与锁
    进程
    LeetCode Search for a Range
  • 原文地址:https://www.cnblogs.com/zimudao/p/7498229.html
Copyright © 2011-2022 走看看