swift enum創(chuàng)建鏈表(一)

主要用到的知識是enum的關聯(lián)值。舉個例子。

enum Result {
    case Success
    case Failure(code: Int, errorMsg: String)
}

let result = Result.Failure(code: 1, errorMsg: "network error!")
switch result {
case .Failure(let code, let msg):
    print("code:\(code), msg:\(msg)")
default:()
}

鏈表的數(shù)據(jù)結(jié)構

用c語言表示如下。包含當前節(jié)點值,和指向下一個節(jié)點的指針。

struct List {
    int value;
    List *next;
};

用enum表示。

enum List<Element> {
    case Empty
    indirect case Item(value: Element, next: List)
}

indirect表示用于聲明遞歸的enum,因為next是enum List類型。

1.對List進行擴展,實現(xiàn)基本的insert方法。

extension List {
    // insert front
    func insert(x: Element) -> List {
        return List.Item(value: x, next: self)
    }

    func description() {
        var t = self;
        while case let List.Item(value, next) = t {
            print(value)
            t = next
        }
    }
}

注意:insert是將node插到最前面的。next指向當前節(jié)點。

2.實現(xiàn)簡單的push,pop方法。

extension List {
    mutating func push(x: Element) {
        self = self.insert(x)
    }

    mutating func pop() -> Element? {
        switch self {
        case .Empty:
            return nil
        case let .Item(x, next):
            self = next
            return x
        }
    }
}

因為修改了List,所以要用mutating。

測試代碼

var l = List<Int>.Empty.insert(2).insert(3).insert(4)
l.description()

l.pop()
l.push(2)

這樣就完成了List的基本功能。下一篇將會對List增加更加豐富的功能。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容