本文的源碼在這裏,能夠參考一下git
棧也是一種使用很是普遍的線性數據結構,它具備後進先出last in first out
的特色。通俗的例子就像咱們平時一本一本的往上放書,等到咱們又想用書時,咱們首先接觸到的老是咱們最後一本放上去的書。
棧的添加和刪除操做老是在棧的一端完成,這一端被稱爲棧頂
,對於棧的實現,我會採用上一篇中實現的數組做爲底層的數據結構,全部棧的操做都會在這個底層的數組中完成。棧的主要操做有兩個,一個是入棧,一個是出棧
首先咱們會定義一個TypeScript接口,這個接口會包含基礎的棧類的實現github
interface Stack<E> { getSize(): number; // 獲取棧中元素的個數 isEmpty(): boolean; // 判斷棧是否爲空 push(e: E): void; // 入棧一個元素 pop(): E; // 出棧一個元素 peek(): E; // 查看棧頂元素 }
再來看看咱們類的實例屬性和構造函數,其中MyArray就是上一篇中實現的數組數組
class ArrayStack<E> implements Stack<E> { private array: MyArray<E>; constructor(capacity: number = 10) { this.array = new MyArray<E>(capacity); } }
在有以前數組的基礎上,入棧也是一個很是簡單的過程,時間複雜度是O(1)
數據結構
public push(e: E): void { this.array.addLast(e); }
出棧也是一個時間複雜度爲O(1)
的操做函數
public pop(): E { return this.array.removeLast(); }
更多相關數據結構,能夠前往個人github。持續更新中,喜歡的話給個star~this