【Day6】[资料结构]-堆叠Stack-实作

堆叠(Stack)建立的方法

  • push: 新增元素
  • pop: 从顶端移除元素
  • peek: 查看顶端(top)元素
  • size: 查看此堆叠的元素量

堆叠的介绍可以参考此篇


JavaScript(使用阵列)

//Stack

class Stack {
  constructor(){
    this.list = []
  }
  // 新增元素
  push(data) {
    this.list.push(data)
  }
  // 从顶端移除元素
  pop(){
    return this.list.pop()
  }
  // 此堆叠元素量
  size(){
    return this.list.length;
  }
  // 查看最顶端元素
  peek(){
    return this.list[this.list.length -  1]
  }
}

let stack = new Stack()
stack.push(20)
stack.push(60)
console.log(stack.size())//2
console.log(stack.peek())//60
stack.pop()
console.log(stack.peek())//20

阵列的介绍可以参考此篇


JavaScript(使用链结串列)

//Stack

class StackNode {
  constructor(data) {
    this.data = data
    this.next = null
  }
}

class LinkedStack {
  constructor() {
    this.top = null
    this.length = 0
  }
  
  // 新增元素
  push(data) {
    let node = new StackNode(data)
    if(!this.top){
      this.top = node
      this.length = 1
    }else{
        let current = new StackNode(data)
      current.next = this.top
      this.top = current
      this.length+=1
    }
    
  }
  
  // 删除顶端元素
  pop() {
    if(!this.top){
      return null
    }else{
      this.top = this.top.next
      this.length -= 1
    }
  }
  
  // 查看最顶端元素
  peek() {
    if(!this.top){
      return null
    }else{
      return this.top.data
    }
  }

  // 此堆叠元素量
  size() {
    return this.length
  }


}
let stack = new LinkedStack()
stack.push('20')
stack.push('30')
stack.push('40')
console.log(stack.size())//3
console.log(stack.peek())//"40"
stack.pop()
console.log(stack.peek())//"30"
console.log(stack.size())//2
stack.pop()
console.log(stack.size())//1
console.log(stack.peek())//"20"

Python(使用链结串列)

#Stack
class StackNode():
    def __init__(self, data=None, next=None):
        self.data = data
        self.next = None


class LinkedStack():
    def __init__(self, top=None):
        self.top = top
    
    def push(self, data):
        if self.top is None:
            self.top = StackNode(data)
        else:
            current = StackNode(data)
            current.next = self.top
            self.top = current
    
    def pop(self):
        if self.top is None:
            return None
        else:
            self.top = self.top.next
            return

    def peek(self):
        if self.top is None:
            return None
        return self.top.data

    def size(self):
        count = 0
        current = self.top
        while current:
            count += 1
            current = current.next
        return count

stack = LinkedStack()
stack.push('20')
stack.push('30')
stack.push('40')
print(stack.size())#3
print(stack.peek())#"40"
stack.pop()
print(stack.peek())#"30"
print(stack.size())#2
stack.pop()
print(stack.size())#1
print(stack.peek())#"20"

链结串列的介绍可以参考此篇


<<:  Day2 - 建立 LINE 官方帐号并完成基本设定

>>:  [Tableau Public] day 17:试着分析appstore资料集-2

离职倒数1天:铁人赛心得

今天是最後一篇 我居然写完了 中间还去了屋久岛 三天两夜完全没网路 一天打越洋电话回台湾叫朋友帮忙发...

站在巨人的肩膀上

笔者某次因为商务需求,到外贸协会申请调阅资料,想看历年来东南亚某国与台湾各项产业的贸易数据,惊讶的发...

Day 14 (Ai)

1.文字工具 (档案12,影片Ps1) 左框 (1)文字工具 (1)文字: a.段落文字:拉框,拉大...

D4- 如何透过 Google Apps Script 来整合 Google Form / Google Sheet 并自动寄出客制的 Email?

来到了第四天,我们可以进入比较复杂一点点的操作。但一样先讲结论,如果你很急着用,可以直接使用这份 A...

[Day13] Esp32s用STA mode + LED

1.前言 今天比较晚po文,开学了超多事情要忙,课也超多(三条线)。好了抱怨时间结束!!这篇如前两篇...