Swift

开发基础随笔之栈Stack-用Swift实现栈

2020-07-10  本文已影响0人  SAW_
栈是一种特殊的线性表,只能在一端进行操作

栈的接口设计

Swift定义一个协议Stackable,声明几个栈的常规操作,如果要实现一个栈,遵循Stackable协议,内部自己去实现,一般满足以下几个接口既可以。
关于关联类型associatedtype的使用,可以看这里关联类型 Associated Type
动态数组、链表都能用来实现栈

protocol Stackable {
    associatedtype Element //关联类型(可以理解泛型)
    mutating func push(_ element: Element) //入栈
    mutating func pop() -> Element //出栈
    func size() -> Int //元素的数量
    func top() -> Element //获取栈顶元素
    func isEmpty() -> Bool //是否为空
}

实现一个Stack类,遵循Stackable协议
这里因为编译器会自动处理,其实可以不用写明typealias Element = Int,只要实现协议方法的时候写明是Int就行,编译器会自动关联到需要的类型

class Stack: Stackable {
    //给关联类型设置真实类型
    typealias Element = Int
    
    var elements = [Int]()
    
    func size() -> Int { elements.count }
    
    func push(_ element: Int) { elements.append(element) }
    
    func pop() -> Int { elements.removeLast() }
    
    func top() -> Int { elements.last! }
    
    func isEmpty() -> Bool { elements.isEmpty }
}
var stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)

let size = stack.size()
print(size) // 4

let top = stack.top()
print(top) // 4

while !stack.isEmpty() {
    print(stack.pop())
}
// 4 3 2 1

上一篇下一篇

猜你喜欢

热点阅读