zoukankan      html  css  js  c++  java
  • 7.栈的链式存储结构及实现

    /*4.6 栈的链式存储结构及实现*/
    /*改造的方式和之前链表的顺序和链式存储一样;
     栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢,由于单链表有头指针,而栈顶指针也是必须的,那干嘛不让它俩合二为一呢,所以比较好的方法
      是把栈顶放在单链表的头部*/
    
    //对于链栈来说,基本不存在栈满的情况,除非内存已经没有可以使用的空间
    //对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实就是top=NULL的时候
    
    typedef struct StackNode    //单个链栈节点
    {
        SElemType data;
        struct StackNode *next;
    } StackNode, *LinkStackPtr;
    typedef struct LinkStack
    {
        LinkStackPtr top;
        int count;
    } LinkStack;
    //链栈的操作绝大部分都和单链表类似,只是在插入和删除上,特殊一些。
    
    //进栈操作 插入元素e为新的栈顶元素
    Status Push(LinkStack *S, SElemType e)
    {
        LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
        s->data = e;
        //把当前的栈顶元素赋值给新结点的直接后继
        s->next = S->top;
        //将新的结点s赋值给栈顶指针
        S->top= s;
        S->count++;
        return OK;
    }
    //出栈操作;若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    Status Pop(LinkStack *S, SElemType *e)
    {
        LinkStackPtr p;
        if(StackEmpty(*S))
            return ERROR;
        *e = S->top->data;
        //将栈顶结点赋值给p
        p = S->top;
        //使得栈顶指针下移一位,指向后一结点
        S->top = S->top->next;
        //释放结点p
        free(p);
        S->count--;
        return OK;
    }
    /*
        链栈的进栈push和出栈pop操作都很简单,没有任何循环操作,时间复杂度均为O(1)。
        对比一下顺序栈和链栈,它们在时间复杂度上是一样的,均为O(1).
    */
    
    /*4.7 栈的作用:
    有的同学可能会觉得,用数组或链表直接实现功能不就行了吗?干嘛要引入栈这样的数据结构呢?这个问题问的好。
    其实这和我们明明有两只脚可以走路,干嘛还要乘汽车、火车、飞机一样。理论上,陆地上的任何地方,你都可以靠双脚走到的,可那需要多少时间和精力呢?
    我们更关注的是到达而不是如何去的过程。
    栈的引入简化了程序设计的问题,划分了不同关注层次,使得思考范围缩小,更加聚焦于我们要解决的问题核心。反之,像数组等,因为要分散精力去考虑数组的下标
    增减等细节问题,反而掩盖了问题的本质。
    所以现在的许多高级语言,比如java、c#等都有对栈结构的封装,你可以不用关注它的实现细节,就可以直接使用Stack的push和pop方法,非常方便。
    */
  • 相关阅读:
    android+Path+Paint+PathEffect
    阿里云 云磁盘挂载
    android+Bitmap + options
    Java反射篇学习笔记
    Java中的异常处理
    jdbc连接sql server2017进行简单的增、删、改、查操作
    浅谈java中接口与抽象类之间的异同
    关于java中的“error: bad operand types for binary operator ”
    解析Java中final关键字的各种用法
    关于java中“使用了未经检查或不安全的操作、有关详细信息,请使用 ——Xlint:unchecked重新编译”
  • 原文地址:https://www.cnblogs.com/go-ahead-wsg/p/13198250.html
Copyright © 2011-2022 走看看