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方法,非常方便。
    */
  • 相关阅读:
    EBS SQL > Form & Report
    oracle sql 优化分析点
    MRP 物料需求计划
    MRPII 制造资源计划
    Barcode128 应用实务
    Oracle SQL语句优化技术分析
    APPSQLAP10710 Online accounting could not be created. AP Invoice 无法创建会计分录
    Oracle数据完整性和锁机制
    ORACLE Responsibility Menu Reference to Other User
    EBS 常用 SQL
  • 原文地址:https://www.cnblogs.com/go-ahead-wsg/p/13198250.html
Copyright © 2011-2022 走看看