
這篇對我非常重要,也算是寫鐵人賽的動機之一。所以在介紹之前就先來講個故事好了。
當初想給自己三個月的時間刷題,刷完再一一投履歷,但第一個月都還沒結束,就收到 Atlassian 的電話面試信 ( 做 jira, bitbucket, trello 我自己的夢想公司之一)。雖然自知準備很不足,但還是抱著反正不會上也沒關係,體驗一下美國的面試。結果
時間有一小時,感覺面試官至少準備了三題考我。最慘的除了我第一題就花了一小時還完全沒頭緒外,更慘的是當面試官好心提醒我是用 Stack,我心裡想說 Steak 是牛排嗎...
不過也是因為這次慘不忍睹經驗,讓我決定要好好把概念學好 !!
堆疊是一種 後進先出 的資料結構。甚麼是後進先出? 以日常生活例子就是疊盤子。先疊的會在下面,後疊的會在上面,當你要拿盤子一定是從最上面拿 (後疊的)。
以上圖來說,其實你每次去吃迴轉壽司都在實作堆疊。
把盤子拿下來 (pop)
而增加盤子數疊盤子就是 push (作完圖好想吃壽司)
接下來就進入程式了。我們用 js 的 Array 來實作堆疊。需要方法如下
push(ele):  從最頂端加入
pop(): 從最頂端移除
top():  return 最上面的 ele
isEmpty(): 檢查是否為空
clear(): 清空 stack 裡的東西
size(): return 長度
// push 從最頂端加入
// pop 從最頂端
class Stack {
  constructor(){
    this.list = []
  }
  // 從最頂端加入
  push(ele) {
    this.list.push(ele)
  }
  // 從最頂端移除
  pop(){
    return this.list.pop()
  }
  // 總共堆了幾個元素
  size(){
    return this.list.length;
  }
  // 看最上面是甚麼
  top(){
    return this.list[this.list.length -  1]
  }
  // 通通刪掉
  clear(){
    this.list = []
  }
}
let stack = new Stack()
stack.push('盤子 1')
stack.push('盤子 2')
console.log(stack.size())
下一篇就要來看我被慘電的面試題目了
如有錯誤或需要改進的地方,拜託跟我說。
我會以最快速度修改,感謝您
歡迎追蹤我的部落格,除了技術文也會分享一些在矽谷工作的甘苦。
還有就是你portfolio很豐富,如果我的portfolio有這個份量也不擔心找工作了
推薦參加六角的前端修煉屋可以增加作品集,今年可惜我都在準備鐵人賽沒參加到
台灣工作真的蠻吃作品集的
美國工作第一關不會演算法你就掰掰了,完全進不了第二關(泣)
希望你能心想事成lol