美文网首页
数据结构之「栈」

数据结构之「栈」

作者: 清尘闲聊 | 来源:发表于2019-03-17 17:16 被阅读0次

什么是栈?

栈 是一种抽象的数据结构,只允许在有序线性数据集合的一段进行入栈和出栈操作,因此是按照后进先出(LIFO, Last In First Out)的原理操作元素。允许进行入栈和出栈的一端称为栈顶(TOP),另一端称为栈底(BOTTOM)。栈顶会随出栈入栈浮动的,当栈中元素个数为零时称为空栈。
栈常用一维数组或链表来实现。
栈的特点:
先进后出,后入先出。
除头尾节点外,每个元素有一个前驱节点,一个后继节点。

栈有什么作用?

由于栈结构是后进先出原则,常用于程序里的递归,函数调用,局部变量临时存储,浏览器里的前进后。在大话数据结构和算法一书中举例特形象,手枪的弹夹就是栈的典型使用,装弹其实就是入栈操作,开枪其实就是出栈操作。

栈该怎么使用?

我用一维数组来简单实现入栈出栈。
栈的存储结构

public class Stack {
    //存储元素
    Object[] elementData;
    //元素个数
    int elementCount;
}

入栈

public E push(E item) {
    //需要的最小容量是当前元素总数 + 1
    int minCapacity = elementCount + 1;
    //假如最小需要元素总数大于数组长度,这扩容一倍
    if (minCapacity - elementData.length > 0) {
        int newCapacity = minCapacity * 2;
        elementData = Arrays.copyOf(elementData, newCapacity);
    }
    //给元素总数加一并把元素赋值给数组
    elementData[elementCount++] = item;
}

出栈

public E pop() {
    //获取元素总数
    int len = elementCount;
    //获取栈顶元素
    E obj = (E) elementData[len - 1];
    //元素减一
    elementCount--;
    //置空
    elementData[elementCount] = null;
}

总结

栈 在计算机的世界里是一个非常常用的数据结构,函数调用的存储和函数里分配的局部变量都用栈结构来存储的。浏览器里的前进和后退也就是一个入栈和出栈的操作。这里是用数组的方式来作为栈的存储结构,有兴趣的朋友可以用链表的方式来实现栈结构。

相关文章

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

  • 数据结构之栈 原理 栈是一种比较常见的数据结构,它的操作可以看做是数组的子集,因为栈只能从栈顶取元素和添加元素,并...

  • 数据结构之---栈

    数据结构之---栈 顺序栈 内部采用数组实现 结构图; 定义结构体: 函数声明 进栈以及出栈 图示: 其余操作 链...

  • Activity启动模式精讲

    讲解本技术点之前需要准备的技术点回顾 栈数据结构 数据结构图文解析之:栈的简介及C++模板实现 - melonst...

  • 数据结构之栈的链式存储结构

    之前写了栈的顺序存储结构,对栈的定义和操作进行了说明 数据结构之栈的顺序存储结构 现在接着写栈的链式存储结构 栈的...

  • 栈和队列

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

  • Java 基础 35 数据结构和ArrayList集合的相关案例

    1.1 数据结构 什么是数据结构?数据的组织方式.维基百科 1.1.1 常见数据结构之栈和队列 1.1.2常见数据...

  • 实战PHP数据结构基础之栈

    栈和队列 栈和队列和之前讲到的实战PHP数据结构基础之双链表 一样都是线性结构。 栈有什么特点 栈遵循后进先出的原...

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • java高级知识点

    1.数据结构 程序=数据结构+算法 栈:后进先出,线性结构 入栈:push 出栈:pop假如已知入栈顺序是ab...

网友评论

      本文标题:数据结构之「栈」

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