swift enum创建链表(一)

主要用到的知识是enum的关联值。举个例子。

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:()
}

链表的数据结构

用c语言表示如下。包含当前节点值,和指向下一个节点的指针。

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

用enum表示。

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

indirect表示用于声明递归的enum,因为next是enum List类型。

1.对List进行扩展,实现基本的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指向当前节点。

2.实现简单的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.Empty.insert(2).insert(3).insert(4)
l.description()

l.pop()
l.push(2)

这样就完成了List的基本功能。下一篇将会对List增加更加丰富的功能。

你可能感兴趣的:(swift enum创建链表(一))