作者: yuzhiyi_宇 | 来源:发表于2019-01-13 13:21 被阅读0次

栈是限定仅在表尾进行插入和删除操作的线性表。

允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素称为空栈。栈是后进先出的线性表,称为 LIFO 结构。
栈的插入操作,叫作进栈(压栈或入栈),栈的删除操作,叫作出栈(弹栈)。

栈的顺序存储结构

js 代码

class SqStack {
    constructor() {
        this.data = [];
        this.top = 0;
    }
}

function push(sqStack, e) {
    sqStack.top += 1
    sqStack.data.push(e);
}

function pop(sqStack, e) {
    if (sqStack.top === 0) {
        throw new Error('已经到栈底')
    }
    sqStack.top-=1;
    return sqStack.data.pop();
}

push 和 pop 的时间复杂度都是 O(1)。

栈的链式存储结构

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

js 代码

class StackNode {

    constructor(data, next) {
        this.data = data;
        this.next = next;
    }
}

class LinkStack {
    constructor(top) {
        this.top;
        this.count = 0;
    }
}

function createLinkStack() {
    let linkStack = new LinkStack(null);
    return linkStack;
}

function push(linkStack, e) {
    let newNode = new StackNode(e);
    newNode.next = linkStack.top;
    linkStack.top = newNode;
    linkStack.count += 1;
}

function pop(linkStack) {
    if (linkStack.count === 0) {
        throw new Error('已经到栈底');
    }
    let data = linkStack.top.data;
    linkStack.top = linkStack.top.next;
    linkStack.count-=1;
    return data;
}

let linkStack = createLinkStack();
push(linkStack, 10);
push(linkStack, 5);

console.log(pop(linkStack));
console.log(pop(linkStack));

链栈的 push 和 pop 的事件复杂度都是 O(1)。

如果栈的使用过程中元素变化不可预测,有时很小,有时非常大,那么最好是用链栈,反之,如果它的变化在可控范围内,建议是用顺序栈。

栈的应用--递归

一个直接调动自己或通过一系列的调用语句间接地调用自己的函数,称为递归函数。
每个递归定义必须有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。

相关文章

  • Java实现栈

    数组栈:压栈、出栈、返回栈顶元素 链式栈:压栈、出栈、返回栈顶元素

  • 数据结构之 栈

    栈结构 链式栈 一.栈结构体 1构建空栈 2栈置空 3判断栈空 4获取栈顶 5入栈 6出栈 7便利栈 二.链式栈 ...

  • 栈和队列

    1、栈 栈是一种先进先出的数据结构。栈顶进栈,栈顶出栈。 数据结构 栈的初始化 进栈 出栈 栈的最小值 2、队列 ...

  • 递归累加数组

    入栈 5入栈 4入栈 3入栈 2入栈 1出栈 [1 0]出栈 [2 1 0]出栈 [3 2 1 0]出栈 [4 3...

  • 栈的逻辑结构和存储结构

    main()进栈s(1)进栈s(0)进栈 s(0)出栈s(1)出栈main()出栈 顺序栈 一个数组 + 指向栈顶...

  • 单调栈 2020-06-12(未经允许,禁止转载)

    1.单调栈 指栈内元素保持单调性的栈结构,分为单调增栈(栈底到栈顶元素递增)和单调减栈(栈底到栈顶元素递减) 2....

  • 链栈的操作

    链栈的定义 链栈的操作 初始化 判断栈空 入栈 出栈

  • 函数调用栈平衡

    栈平衡 栈平衡:函数调用前后的栈顶指针指向的位置不变 内平栈 外平栈 内平栈: 指的是在函数调用返回之前使栈保持...

  • 栈的简单Java实现

    栈栈的特点是先进后出,出栈、入栈都是在栈顶操作。

  • 汇编学习-入栈和出栈

    栈有两个基本的操作:入栈和出栈。入栈就是将一个新的元素放到栈顶,出栈就是从栈顶取出一个元素。栈顶的元素总是最后入栈...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/ezysrqtx.html