zoukankan      html  css  js  c++  java
  • 栈的链式存储结构

    1 链式存储结构
      栈的链式存储结构,简称链栈。
      由于栈只是栈顶在做插入和删除操作,所以栈顶应该放在单链表的头部。另外,都有了栈顶在头部了,单链表中的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。

      对于链栈来说,基本不存在栈满的情况,除非内存已经没有使用空间了。
      对于空栈来说,链表原来的定义是头指针指向空,那么链栈的空其实就是top=NULL。

     链栈的结构代码如下:

    typedef struct StackNode {
        SElemType data;
        Struct StackNode *next;
    }StackNode;
    typedef
    struct StackNode *LinkStackPtr; typedef struct LinkStack { LinkStackPtr top;
    int count; }LinkStack;


    2 进栈操作

    Status push(LinkStack *S, SElemType e) {
    
        LinkStackPtr node = (LinkStackPtr)malloc(sizeof(StackNode));
        node->data = e;
        node->next = S->top;
    
        S->top = node;
        S->count ++;
    
        return OK;
    }


    3 出栈操作

    Status pop(LinkStack *S, SElemType *e) {
    
        LinkStackPtr p;
    
        if (S->top == NULL) {
            return ERROR;
        }
    
        *e = S->top->data;
        p = S->top;
    
        S->top = S->top->next;
        S->count --;
    
        free(p);            //释放结点p
    
        return OK;
    }


    4 对比顺序栈和链栈

      顺序栈和链栈的时间复杂度都为O(1). 如果栈的使用过程中元素变化不可预期,有时会很大,有时会很小,则选择使用链栈。反之,如果它的变化在可控范围内,选择使用顺序栈比较好。

  • 相关阅读:
    【2020-04-03】多注意一下自己闲下来的思绪
    vue 去哪网项目 学习笔记(一)
    数据分析相关的内容
    vue 自学项目笔记
    vue 所有的指令
    vue 自学笔记(5) 列表渲染
    vue 自学笔记(4): 样式绑定与条件渲染
    vue 自学笔记(三) 计算属性与侦听器
    自学vue笔记 (二) : 实例与生命周期
    杜教BM模板
  • 原文地址:https://www.cnblogs.com/muzijie/p/5647022.html
Copyright © 2011-2022 走看看