本篇文章主要內容:node
線性表定義: 零個或多個數據元素的有限序列。數組
特色:bash
**順序存儲結構:**指的是用一組地址連續的存儲單元依次存儲線性表的數據元素。app
根據線性表的特色及順序存儲結構的特色,因此順序存儲能夠用一維數組來實現。ui
數據元素的基本結構:spa
class ListNode {
var value: Int
public init(_ value: Int) {
self.value = value
}
}
複製代碼
線性表的基本結構:指針
class ArrayList {
// 存儲數據元素的數組
var values: [ListNode]?
// 表的長度
var length: Int {
get {
if let count = values?.count {
return count
}
return 0
}
}
// MARK: - 建立
init() {}
}
複製代碼
利用 Swift 中的數組實現,Swift 數組已經內置了插入、刪除等基本操做。這裏爲了探究插入及刪除時發生了什麼,本身實現這兩個過程。code
func insert(_ value: Int, _ index: Int) {
let newNode = ListNode(value)
guard let nodes = values else {
values = []
values?.append(newNode)
return
}
// index 越界
if index < 0 || index >= nodes.count {
return
}
var temp: [ListNode] = []
for i in 0..<nodes.count {
if i == index {
temp.append(newNode)
}
temp.append(nodes[i])
}
values = temp
}
複製代碼
func remove(at index: Int) {
guard let nodes = values else {
return
}
// 超出數組長度
if index < 0 && index >= nodes.count { return }
var temp: [ListNode] = []
for i in 0..<nodes.count {
if i != index {
temp.append(nodes[i])
}
}
values = temp
}
複製代碼
func node(at index: Int) -> ListNode? {
guard let nodes = values else {
return nil
}
if index > 0 && index < nodes.count {
return nodes[index]
}
return nil
}
複製代碼
優勢:rem
缺點get
**鏈式存儲結構:**用一組任意的存儲單元存儲數據元素,這組存儲單元能夠是連續的,也能夠是不連續的。數據元素間的邏輯順序是經過結點中的指針域來實現。
關於鏈式存儲會在下一篇文章介紹。