二叉樹 跳表 輕鬆掌握跳表結構

2021-10-16 08:08:28 字數 1531 閱讀 4898

跳表是乙個隨機化的資料結構,實質就是一種可以進行二分查詢的有序鍊錶。跳表在原有的有序鍊錶上面增加了多級索引,通過索引來實現快速查詢。查詢數時間複雜度為o(logn)。平衡二叉搜尋樹也是可以滿足o(logn)的,但是跳表實現原理更簡單。像redis就使用了跳表和實現有序集合。

跳表既然是可以進行二分查詢的有序鍊錶,那我們先看看一般的鍊錶結構:

上圖中這樣乙個鍊錶,我們要查詢元素的時間複雜度是多少了o(n),怎麼樣能達到o(logn)了,我們增加多級索引。

上圖中,我們隔乙個節點作為上級索引,是不是和平衡二叉樹類似了。

所以說跳表示乙個有序鍊錶,並且每個元素可能會存在多層,每層上都是有序的鍊錶。這樣我們查詢的時候就從最高層開始查詢,以上面的例子為例,假如要找9,從3開始找,向右,12大於9,然後3移動到下一層,再向右,6小於9,繼續向右,12大於9,移動到6下一層,向右就找到9了。

為什麼說跳表是乙個隨機化的資料結構,因為每個元素的層次不是固定的,而是隨機生成的。

1、首先建立跳表節點,有兩個變數,乙個value是該節點的值,乙個該節點對應層上下乙個節點

2、初始化跳表,跳表head節點值都為null,maxlevel記錄最大層數

3、跳表中新增元素的方法。

3.1、 生成元素的層數,這裡是隨機生成的,生成新節點

3.2、如果層數比最大層都要大,則把head節點的層數擴充到最大,因為head節點是包含所有層

3.3、從head節點的最高層開始查詢,查詢下個節點

3.4、把下個節點作新節點的下個節點,並把當前節點的下個節點設定為新節點

3.5、每次迴圈完一層就需要向下一層繼續迴圈

怎麼查詢下個節點了:

一直向右查詢,查詢到比新節點值大的節點,或者下個值為null

上面就是整個跳表的結構,是乙個隨機化的資料結構,實質就是一種可以進行二分查詢的有序鍊錶。通過增加多級索引實現查詢、插入、刪除的平均複雜性均為o(logn)。

資料結構 樹結構 二叉樹 完全二叉樹 滿二叉樹

樹結構是一種描述非線性層次關係的資料結構。除根結點外,其餘每個結點有且僅有乙個直接前驅。每個結點可以有任意多個直接後繼。英文名詞表示 tree,root,node,leaf,edge,child,subtree 要麼二叉樹沒有根結點,是一棵空樹。要麼二叉樹由根結點,左子樹,右子樹組成,且左子樹和右子...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...