棧(stack)在計(jì)算機(jī)科學(xué)中是限定僅在表尾進(jìn)行插入或刪除操作的線性表岂昭。棧是一種數(shù)據(jù)結(jié)構(gòu)顺囊,它按照后進(jìn)先出的原則存儲(chǔ)數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底裕照,最后的數(shù)據(jù)在棧頂纪吮,需要讀數(shù)據(jù)的時(shí)候從棧頂開(kāi)始彈出數(shù)據(jù)呼伸。棧是只能在某一端插入和刪除的特殊線性表腔丧。用桶堆積物品警没,先堆進(jìn)來(lái)的壓在底下,隨后一件一件往上堆缔刹。取走時(shí)鳖枕,只能從上面一件一件取。讀和取都在頂部進(jìn)行桨螺,底部一般是不動(dòng)的。棧就是一種類(lèi)似桶堆積物品的數(shù)據(jù)結(jié)構(gòu)酿秸,進(jìn)行刪除和插入的一端稱棧頂灭翔,另一端稱棧底。插入一般稱為進(jìn)棧辣苏,刪除則稱為退棧肝箱。 棧也稱為后進(jìn)先出表。
以下是Swift語(yǔ)法實(shí)現(xiàn)一個(gè)Stack類(lèi)稀蟋。
struct Stack<T> {
//存儲(chǔ)元素
private var elements = [T]()
/// 元素?cái)?shù)量
var count:Int {
return elements.count
}
/// 推入元素
///
/// - Parameter element: 元素
mutating func push(_ element:T) {
elements.append(element)
}
/// 彈出元素
///
/// - Returns: 被彈出的元素
mutating func pop() -> T {
return elements.removeLast()
}
}
以下是Stack的用法
//新建元素
var stack = Stack<Int>()
//推入元素
stack.push(1)
stack.push(2)
stack.push(3)
//計(jì)算stack大小
stack.count
//彈出元素
stack.pop()