我們將處理一般的型為:a1、a2、a3....an的表,這個表的大小為n,不包含有任何乙個元素大小為0的我們稱為空表。 我們稱為an+1為an的後繼、 an-1為an的前驅。表的實現為簡單的陣列和鍊錶兩種。
一、簡單陣列
簡單的陣列我們需要給定的最大大小並且各個元素相間記憶體空間是連續的。陣列在操作中:查詢需要消耗o(1),但是在插入和刪除的時候非常麻煩會將指定位置之前的資料移動操作最壞的情況為o(n)。
二、鍊錶
為了避免刪除和插入開啟銷。我們允許表可以不連續的儲存。否則將會整個表或者部分整體移動。這就是我們所說的鍊錶。鍊錶是當前節點存在內容以及指向下乙個節點的指標。結束節點的指向下乙個節點的指標為nil,表明此節點是最後乙個節點。我們約定表頭在0位置我們稱為header 節點。我們會根據此header節點進行鍊錶的操作。
下面是鍊錶操作實現**
package linkimport (
"fmt"
)type node struct
next *node
}// 初始化鍊錶
func makeempty(header *node) *node
// 判斷節點是否為空
func isempty(header *node) bool
// 查詢節點
func find(element inte***ce{}, header *node) *node
p = p.next
} return nil
} else
}// 刪除節點
func delete(element inte***ce{}, header *node)
prenode := findprevious(element, header)
if prenode != nil
} } else
}// 查詢前乙個節點
func findprevious(element inte***ce{}, header *node) *node
p := header.next
s := header
fmt.println(s)
for p != nil
s = p
p = p.next
} return nil
}// 插入乙個節點
func insert(element inte***ce{}, header *node, n *node)
// 獲取大小
func size(header *node) int else
return size }}
// 列印
func print(header *node)
p := header.next
for p != nil
}
package mainimport (
"fmt"
"web/link"
)func main()
資料結構與演算法 鍊錶
題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...
資料結構與演算法 鍊錶
在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧 我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構 即某一資料項的前繼節點和後繼節點有且只有乙個 要麼是非線性結構 即某一資料節點的前驅或者後繼節點不止乙個 在確定了實際資料項的資料結構之後,我們要採用某種儲...
資料結構與演算法 雜湊表
對映在數學上相當於乙個函式f x a b。雜湊表的核心是乙個雜湊函式 hash function 這個函式規定了集合a中的元素如何對應到集合b中的元素。根據設定的雜湊函式 h key 和處理衝突的方法 將一組關鍵字映像到乙個有限的連續的位址集 區間 上,並以關鍵字在位址集中的 像 作為相應記錄在表中...