Day05:资料结构 - 堆叠(Stack)

聊聊堆叠(Stack)

堆叠是一种後进先出(Last In First Out)(LIFO)的资料结构,换句话说,堆叠就是将数据排成一列,由下往上堆放文件,只能从最新添加的数据开始存取。好处是,随时都能存取最新数据。堆叠与伫列常放在一起讨论,不过在此处,我们着重於堆叠的了解,明天再来看伫列的特性。

堆叠的操作

根据堆叠後进先出的特性,进行两种的操作:

  1. push:将资料放入堆叠顶端
  2. pop:将堆叠顶端资料移除

这边有个小提醒,堆叠是线性结构,在操作上的时间复杂度为O(1)

这边以餐盘做比喻,在一碟餐盘中,若要使用一个餐盘,会先拿取最上面,再依序往下拿取,以这种方式会更容易理解堆叠。

堆叠可以用阵列与连结串列的方式操作

我们先以Python程序码简单的理解堆叠的概念,使用append(添加)以及pop(移除)进行操作,每一次添加及删除都以最後一组开始(後进先出)。

Python

x是空列表
x = []

#append:添加
x.append("red")
print(x) #输出结果:['red']
x.append("green")
print(x) #输出结果:['red', 'green']
x.append("blue")
print(x) #输出结果:['red', 'green', 'blue']

#pop:移除
x.pop()
print(x) #输出结果:['red', 'green']
x.pop()
print(x) #输出结果:['red']
x.pop()
print(x) #输出结果:[]

JacaScript

var stack = []

stack.push(1);
console.log(stack); // [1]

stack.push(2);
console.log(stack); // [1,2]

stack.push(3);
console.log(stack); // [1,2,3]


console.log(stack.pop()); //  3
console.log(stack); // [1,2];

console.log(stack.pop()); //  2
console.log(stack); // [1];

console.log(stack.pop()); //  1
console.log(stack); // []; -> empty

<<:  Day 5-单元测试 3A 原则 (Arrange, Act 和 Assert) (基础-4)

>>:  day5 : rancher管理与简易的安装相关套件

30-4 之软件架构设计原则 3 - LSP 里氏替换原则

软件架构设计原则一切都是为了下面这两点,别忘了。 低耦合 高内聚 LSP 这个原则比较倾向是在物件导...

Day13:[解题技巧]Two pointers -  双指针

双指针算是一个解题蛮常用的小技巧,双指针指的是用两个指针对整个资料做遍历,而双指针又依照移动的方向...

Day4 跟着官方文件学习Laravel-CSRF保护

举例: 想像你的产品有个/user/email route允许post request去修改已经认证...

关於 物件(Object)与类别(class)

正在复习C#~(书 和影片 文章 看到头晕) 发现有些观念真的简单又不简单 一定要用自己的方式搞懂~...

Day 0x11 - 建立信用卡付款的订单

0x1 前言 之前都是建立付款方式为 ATM 的订单,另一个信用卡的流程都没跑过,今天就是要来跑一下...