《資料結構與演算法》之鍊錶
《資料結構與演算法》之佇列
《資料結構與演算法》之排序
《資料結構與演算法》之二分查詢
《資料結構與演算法》之二叉樹
關於「棧」,我有乙個非常貼切的例子,就是一摞疊在一起的盤子。我們平時放盤子的時候,都是從下往上乙個乙個放;取的時候,我們也是從上往下乙個乙個地依次取,不能從中間任意抽出。後進者先出,先進者後出,這就是典型的「棧」結構。
從棧的操作特性上來看,棧是一種「操作受限」的線性表,只允許在一端插入和刪除資料。
棧的實現有兩種方式,基於陣列來實現的棧我們稱為順序棧,基於鍊錶來實現的棧我們稱為鏈式棧。在此先附上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 遇到運算子時,比較其...