TypeScript算法與數據結構-棧篇

本文的源碼在這裏,能夠參考一下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);
    }
}

1.入棧

在有以前數組的基礎上,入棧也是一個很是簡單的過程,時間複雜度是O(1)數據結構

public push(e: E): void {
    this.array.addLast(e);
}

棧-入棧

2.出棧

出棧也是一個時間複雜度爲O(1)的操做函數

public pop(): E {
    return this.array.removeLast();
}

棧-入棧

更多相關數據結構,能夠前往個人github。持續更新中,喜歡的話給個star~this

相關文章
相關標籤/搜索