《資料結構與演算法》之棧

2021-10-06 15:52:32 字數 1617 閱讀 7722

《資料結構與演算法》之鍊錶

《資料結構與演算法》之佇列

《資料結構與演算法》之排序

《資料結構與演算法》之二分查詢

《資料結構與演算法》之二叉樹

關於「棧」,我有乙個非常貼切的例子,就是一摞疊在一起的盤子。我們平時放盤子的時候,都是從下往上乙個乙個放;取的時候,我們也是從上往下乙個乙個地依次取,不能從中間任意抽出。後進者先出,先進者後出,這就是典型的「棧」結構。

從棧的操作特性上來看,棧是一種「操作受限」的線性表,只允許在一端插入和刪除資料。

棧的實現有兩種方式,基於陣列來實現的棧我們稱為順序棧,基於鍊錶來實現的棧我們稱為鏈式棧。在此先附上demo

1.1 實現

//mark: - 順序棧

class arraystack: nsobject

}

1.2 進棧

/// 進棧

/// - parameter data: 進棧資料

/// - returns: 進棧結果

func push

(data: any)

-> bool

if stack!

.count > count!

else

count!+=

1return true

}

1.3出棧

/// 出棧

/// - returns: 出棧資料

func pop()

-> any?

let data = stack!

[count!-1

] count!-=

1return data

}

1.1實現

class liststack: nsobject 

var liststack: list?

//棧的當前節點

var curlist: list?

//棧的大小

var size: int?

//棧中元素個數

var count: int?

init

(size: int)

}

1.2進棧

/// 進棧

/// - parameter data: 進棧資料

/// - returns: 進棧結果

func push

(data: any)

-> bool

else

}

1.3出棧

/// 出棧

/// - returns: 出棧資料

func pop()

-> any?

else

curlist = templist

//刪除最後乙個節點

curlist?

.next = nil

count!-=

1return data

}}

資料結構與演算法之棧

中綴表示式實現多位數的計算 實現 public class calculatordemo else 否則直接入符號棧 else 如果是數字直接入數棧 else else index if index expresion.length 表示式掃瞄完後就順序的從數棧和符號棧中pop出相應的數字和符號並執...

資料結構與演算法之棧

字首表示式 求值 從右至左掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算 棧頂元素 和 次頂元素 並將結果入棧 重複上述過程直到表示式最左端,最後運算得出的值即為表示式的結果 例如 3 4 5 6 對應的字首表示式就是 3 4 5 6 針對字首表示...

資料結構與演算法之棧

需求 大家看到,字尾表示式適合計算式進行運算,但是人卻不太容易寫出來,尤其是表示式很長的情況下,因此在開發中,我們需要將 中綴表示式轉成字尾表示式。演算法思路分析 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從左至右掃瞄中綴表示式 3 遇到運算元時,將其壓s2 4 遇到運算子時,比較其...