亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種多層鏈接分離的skiplist構(gòu)造方法及系統(tǒng)與流程

文檔序號(hào):11155538閱讀:642來(lái)源:國(guó)知局
一種多層鏈接分離的skiplist構(gòu)造方法及系統(tǒng)與制造工藝

本發(fā)明屬于計(jì)算機(jī)存儲(chǔ)技術(shù)領(lǐng)域,更具體地,涉及一種多層鏈接分離的skiplist構(gòu)造方法及系統(tǒng)。



背景技術(shù):

跳躍表skiplist是一種隨機(jī)化的數(shù)據(jù)結(jié)構(gòu),基于并聯(lián)的有序鏈表,其搜索的時(shí)間復(fù)雜度為O(logn),n為skiplist中的元素個(gè)數(shù)。skiplist以其實(shí)現(xiàn)簡(jiǎn)單、快速高效而被廣泛應(yīng)用于鍵值存儲(chǔ)系統(tǒng)或內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng),如redis、leveldb等。

相比有序單鏈表,skiplist查找效率隨skiplist容量呈對(duì)數(shù)增長(zhǎng),性能遠(yuǎn)超過(guò)有序單鏈表的線性擴(kuò)展性能,雖然典型的樹結(jié)構(gòu),如二叉有序樹(Binary Search Tree,BST)亦可達(dá)到skiplist的查找、插入效率,但是維持樹的平衡需要進(jìn)行復(fù)雜的操作,如平衡二叉樹(Balanced Binary Tree,AVL)、紅黑樹(Red Black Tree,RBT)的插入操作需要定位元素位置、插入元素、以及旋轉(zhuǎn),其中后續(xù)的旋轉(zhuǎn)操作用于保證樹的平衡,不至于樹的結(jié)構(gòu)退化成有序單鏈表,由于該操作視插入元素的位置來(lái)決定如何調(diào)整鏈接關(guān)系導(dǎo)致樹的結(jié)構(gòu)的分析以及維持變得非常復(fù)雜。

skiplist構(gòu)造的典型實(shí)現(xiàn)包括初始化和插入兩個(gè)階段,其中,在skiplist初始化階段定義skiplist的高度閾值,確定節(jié)點(diǎn)高度增長(zhǎng)的概率因子p以及構(gòu)造頭節(jié)點(diǎn);在插入階段,按照特定的方案將元素封裝成節(jié)點(diǎn)按元素非遞減的順序插入到skiplist,同時(shí)保證從底層到頂層各層鏈表的節(jié)點(diǎn)數(shù)目按照概率因子p等比遞減。

現(xiàn)有的skiplist構(gòu)造方案主要包括兩種,其一,隨機(jī)構(gòu)造方案,即每次隨機(jī)生成節(jié)點(diǎn)高度,然后將節(jié)點(diǎn)插入鏈表,由于待插節(jié)點(diǎn)的高度及大小在插入之前是隨機(jī)的,故這種情況會(huì)導(dǎo)致構(gòu)造的skiplist相鄰層的節(jié)點(diǎn)分布不能嚴(yán)格符合概率比,存在位于高層鏈表的節(jié)點(diǎn)極其稀少,與低層的概率比嚴(yán)重偏離概率因子p的最壞情形,同時(shí)無(wú)法保證各層鏈表中節(jié)點(diǎn)的跨度均勻;其二,確定性構(gòu)造方案,每次插入都根據(jù)固定算法對(duì)整個(gè)結(jié)構(gòu)進(jìn)行重構(gòu),從而保證skiplist結(jié)構(gòu)均勻,以及高度和跨度最優(yōu)化,但是重構(gòu)需要較長(zhǎng)時(shí)間而且過(guò)程中整個(gè)數(shù)據(jù)結(jié)構(gòu)被鎖住,導(dǎo)致并行性能差。



技術(shù)實(shí)現(xiàn)要素:

針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種多層鏈接分離的skiplist構(gòu)造方法及系統(tǒng),將插入操作過(guò)程中的多層有序鏈表鏈接開銷分?jǐn)偟讲檎也僮鬟^(guò)程的各個(gè)有序單鏈表插入鏈接過(guò)程中,相比skiplist的隨機(jī)構(gòu)造方案,僅在各層查找中對(duì)滿足跨度要求的節(jié)點(diǎn)增加高度,即將節(jié)點(diǎn)鏈接到比當(dāng)前節(jié)點(diǎn)高度更高一層的鏈表中,單個(gè)元素的鏈接操作時(shí)間開銷為O(1),而插入操作只需將元素插入到底層有序單鏈表中,降低了多層鏈表間的耦合關(guān)系,從而提高skiplist的并發(fā)插入性能;此外,相比skiplist的確定性構(gòu)造方案,插入元素后無(wú)需為了完善skiplist而重構(gòu)整個(gè)數(shù)據(jù)結(jié)構(gòu),從而避免重構(gòu)skiplist導(dǎo)致的skiplist不可用的情形發(fā)生。由此解決現(xiàn)有skiplist構(gòu)造方案中,隨機(jī)構(gòu)造方案構(gòu)造的skiplist相鄰層的節(jié)點(diǎn)分布不能嚴(yán)格符合概率比、無(wú)法保證各層鏈表中節(jié)點(diǎn)的跨度均勻以及確定性構(gòu)造方案需要對(duì)整個(gè)結(jié)構(gòu)進(jìn)行重構(gòu)的技術(shù)問(wèn)題。

為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種多層鏈接分離的skiplist構(gòu)造方法,包括:

(1)單個(gè)元素的查詢,其子步驟為:

(1-1)設(shè)置當(dāng)前掃描的層次為skiplist當(dāng)前的最大高度,初始化計(jì)步器值為0,將當(dāng)前所處的位置記為掃描點(diǎn),將當(dāng)前掃描的層次記為掃描層,將當(dāng)前掃描的單鏈表記為掃描鏈;

(1-2)從當(dāng)前掃描的單鏈表開始按前進(jìn)指針的方向掃描,判斷待插入的目標(biāo)元素與掃描點(diǎn)處的元素的大小關(guān)系,若掃描點(diǎn)處的元素與目標(biāo)元素相等,則返回,結(jié)束本次單個(gè)元素的插入操作,繼續(xù)下一個(gè)元素的插入操作,若掃描點(diǎn)處的元素小于目標(biāo)元素,則執(zhí)行步驟(1-3),若掃描點(diǎn)處的元素大于目標(biāo)元素,則執(zhí)行步驟(1-4);

(1-3)計(jì)步器增加1,并判斷計(jì)步器中的計(jì)數(shù)值是否達(dá)到預(yù)設(shè)值,其中,預(yù)設(shè)值為概率因子p的倒數(shù),若計(jì)步器的計(jì)數(shù)值達(dá)到預(yù)設(shè)值,則將掃描點(diǎn)處的節(jié)點(diǎn)高度增加1,即將該掃描點(diǎn)處的節(jié)點(diǎn)鏈接到掃描層的上面一層的鏈表中,同時(shí)計(jì)步器置0,掃描點(diǎn)向前移動(dòng),若計(jì)步器的計(jì)數(shù)值沒(méi)有達(dá)到預(yù)設(shè)值,則執(zhí)行步驟(1-2);

(1-4)判斷當(dāng)前掃描的層次是否為最底層,若是最底層,則返回掃描點(diǎn)的后退一個(gè)位置,并記為插入點(diǎn),若不是最底層,則將掃描點(diǎn)后退一步,掃描層下移一層,從后退之后的掃描點(diǎn)處的節(jié)點(diǎn)開始,轉(zhuǎn)至執(zhí)行步驟(1-2);

(2)單個(gè)元素插入:若skiplist中不存在目標(biāo)元素,則在最底層的有序單鏈表中將該目標(biāo)元素插入到步驟(1)返回的插入點(diǎn)之后,且將節(jié)點(diǎn)高度設(shè)為1。

優(yōu)選地,在步驟(1)之前,所述方法還包括:設(shè)置概率因子p和skiplist節(jié)點(diǎn)所能達(dá)到的高度閥值;分配skiplist對(duì)象,skiplist具有當(dāng)前高度和頭結(jié)點(diǎn)兩個(gè)屬性,并初始化頭結(jié)點(diǎn),以高度閥值作為頭節(jié)點(diǎn)的高度,分配前進(jìn)鏈接指針數(shù)組,指針數(shù)組的每個(gè)元素指向空指針。

按照本發(fā)明的另一方面,提供了一種多層鏈接分離的skiplist構(gòu)造系統(tǒng),包括:

查詢模塊,用于單個(gè)元素的查詢,其包括的子模塊為:

設(shè)置模塊,用于設(shè)置當(dāng)前掃描的層次為skiplist當(dāng)前的最大高度,初始化計(jì)步器值為0,將當(dāng)前所處的位置記為掃描點(diǎn),將當(dāng)前掃描的層次記為掃描層,將當(dāng)前掃描的單鏈表記為掃描鏈;

第一掃描模塊,用于從當(dāng)前掃描的單鏈表開始按前進(jìn)指針的方向掃描,判斷待插入的目標(biāo)元素與掃描點(diǎn)處的元素的大小關(guān)系,若掃描點(diǎn)處的元素與目標(biāo)元素相等,則返回,結(jié)束本次單個(gè)元素的插入操作,繼續(xù)下一個(gè)元素的插入操作,若掃描點(diǎn)處的元素小于目標(biāo)元素,則進(jìn)入所述第二掃描模塊,若掃描點(diǎn)處的元素大于目標(biāo)元素,則進(jìn)入所述第三掃描模塊;

第二掃描模塊,用于在掃描點(diǎn)處的元素小于目標(biāo)元素時(shí),將計(jì)步器增加1,并判斷計(jì)步器中的計(jì)數(shù)值是否達(dá)到預(yù)設(shè)值,其中,預(yù)設(shè)值為概率因子p的倒數(shù),若計(jì)步器的計(jì)數(shù)值達(dá)到預(yù)設(shè)值,則將掃描點(diǎn)處的節(jié)點(diǎn)高度增加1,即將該掃描點(diǎn)處的節(jié)點(diǎn)鏈接到掃描層的上面一層的鏈表中,同時(shí)計(jì)步器置0,掃描點(diǎn)向前移動(dòng),若計(jì)步器的計(jì)數(shù)值沒(méi)有達(dá)到預(yù)設(shè)值,則返回所述第一掃描模塊;

第三掃描模塊,用于在掃描點(diǎn)處的元素大于目標(biāo)元素時(shí),判斷當(dāng)前掃描的層次是否為最底層,若是最底層,則返回掃描點(diǎn)的后退一個(gè)位置,并記為插入點(diǎn),若不是最底層,則將掃描點(diǎn)后退一步,掃描層下移一層,從后退之后的掃描點(diǎn)處的節(jié)點(diǎn)開始,轉(zhuǎn)至所述第一掃描模塊;

元素插入模塊,用于在skiplist中不存在目標(biāo)元素時(shí),在最底層的有序單鏈表中將該目標(biāo)元素插入到所述查詢模塊返回的插入點(diǎn)之后,且將節(jié)點(diǎn)高度設(shè)為1。

優(yōu)選地,所述系統(tǒng)還包括:

初始化模塊,用于設(shè)置概率因子p和skiplist節(jié)點(diǎn)所能達(dá)到的高度閥值;分配skiplist對(duì)象,skiplist具有當(dāng)前高度和頭結(jié)點(diǎn)兩個(gè)屬性,并初始化頭結(jié)點(diǎn),以高度閥值作為頭節(jié)點(diǎn)的高度,分配前進(jìn)鏈接指針數(shù)組,指針數(shù)組的每個(gè)元素指向空指針。

總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,主要有以下的技術(shù)優(yōu)點(diǎn):

(1)本發(fā)明提供的這種基于多層鏈接分離的新的跳表構(gòu)造方法,通過(guò)在查找過(guò)程中判斷計(jì)步器達(dá)到步長(zhǎng)1/p來(lái)長(zhǎng)高滿足條件的節(jié)點(diǎn),實(shí)現(xiàn)skiplist的相鄰兩層節(jié)點(diǎn)數(shù)目比例為p,保證skiplist的隨機(jī)性數(shù)據(jù)結(jié)構(gòu)的完整性;

(2)本發(fā)明所描述的跳表,其創(chuàng)建索引節(jié)點(diǎn)的操作被放在搜索過(guò)程中。需要注意的是,不限于插入操作所涉及的搜索。任何搜索過(guò)程都可以應(yīng)用所提出的“檢查并創(chuàng)建索引節(jié)點(diǎn)”方法。

(3)相比隨機(jī)構(gòu)造方案的查找過(guò)程,本發(fā)明提供的方案中,盡管新的skiplist的元素查找過(guò)程會(huì)在每層的掃描過(guò)程中增加單鏈表的鏈接操作,但是一次節(jié)點(diǎn)長(zhǎng)高操作只涉及兩次指針的賦值操作,時(shí)間開銷為O(1),幾乎能忽略不計(jì);然而,隨機(jī)構(gòu)造方案的查找過(guò)程需要為插入節(jié)點(diǎn)保存查找路徑,即插入元素節(jié)點(diǎn)的前驅(qū)指針數(shù)組,而本發(fā)明提供的skiplist的查找過(guò)程卻無(wú)此特殊要求,只需返回底層單鏈表的插入點(diǎn)即可;

(4)相比隨機(jī)構(gòu)造方案的插入開銷為skiplist的平均高度,即O(logn),n為skiplist中元素的個(gè)數(shù),本發(fā)明提供的skiplist的插入過(guò)程僅涉及單鏈表特定插入點(diǎn)的插入操作,時(shí)間開銷為O(1);

(5)相比確定性構(gòu)造方法,本發(fā)明提供的skiplist的構(gòu)造方案在插入節(jié)點(diǎn)后,無(wú)需調(diào)整整個(gè)skiplist結(jié)構(gòu),從而節(jié)省重構(gòu)skiplist操作的時(shí)間開銷。

附圖說(shuō)明

圖1為skiplist數(shù)據(jù)結(jié)構(gòu)示意圖;

圖2為本發(fā)明實(shí)施例公開的一種多層鏈接分離的skiplist構(gòu)造方法的流程圖;

圖3為本發(fā)明實(shí)施例公開的一種單個(gè)元素查找過(guò)程的流程圖;

圖4(a)為本發(fā)明實(shí)施例公開的一種插入新元素之前的skiplist數(shù)據(jù)結(jié)構(gòu)示意圖;

圖4(b)為本發(fā)明實(shí)施例公開的一種向skiplist中插入新元素的流程圖;

圖5為本發(fā)明實(shí)施例公開的一種多層鏈接分離的skiplist構(gòu)造系統(tǒng)的結(jié)構(gòu)示意圖。

具體實(shí)施方式

為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。

以下首先就本發(fā)明所涉及的技術(shù)術(shù)語(yǔ)進(jìn)行解釋和說(shuō)明:

如圖1所示,skiplist表示一種隨機(jī)化的數(shù)據(jù)結(jié)構(gòu),基于并聯(lián)的鏈表,其搜索的時(shí)間復(fù)雜度為O(log n),n為skiplist中元素的個(gè)數(shù);跳表是對(duì)有序的鏈表以隨機(jī)高度的方式增加附加的前進(jìn)鏈接,所以在列表中的查找可以快速的跳過(guò)部分列表。

如圖2所示為本發(fā)明實(shí)施例公開的一種多層鏈接分離的skiplist構(gòu)造方法的流程圖,在圖2所示的方法中,包括以下步驟:

(1)單個(gè)元素的查詢,其子步驟為:

(1-1)設(shè)置當(dāng)前掃描的層次為skiplist當(dāng)前的最大高度,初始化計(jì)步器值為0,將當(dāng)前所處的位置記為掃描點(diǎn),將當(dāng)前掃描的層次記為掃描層,將當(dāng)前掃描的單鏈表記為掃描鏈;

(1-2)從當(dāng)前掃描的單鏈表開始按前進(jìn)指針的方向掃描,判斷待插入的目標(biāo)元素與掃描點(diǎn)處的元素的大小關(guān)系,若掃描點(diǎn)處的元素與目標(biāo)元素相等,則返回,結(jié)束本次單個(gè)元素的插入操作,繼續(xù)下一個(gè)元素的插入操作,若掃描點(diǎn)處的元素小于目標(biāo)元素,則執(zhí)行步驟(1-3),若掃描點(diǎn)處的元素大于目標(biāo)元素,則執(zhí)行步驟(1-4);

(1-3)計(jì)步器增加1,并判斷計(jì)步器中的計(jì)數(shù)值是否達(dá)到預(yù)設(shè)值,其中,預(yù)設(shè)值為概率因子p的倒數(shù),若計(jì)步器的計(jì)數(shù)值達(dá)到預(yù)設(shè)值,則將掃描點(diǎn)處的節(jié)點(diǎn)高度增加1,即將該掃描點(diǎn)處的節(jié)點(diǎn)鏈接到掃描層的上面一層的鏈表中,同時(shí)計(jì)步器置0,掃描點(diǎn)向前移動(dòng),若計(jì)步器的計(jì)數(shù)值沒(méi)有達(dá)到預(yù)設(shè)值,則執(zhí)行步驟(1-2);

(1-4)判斷當(dāng)前掃描的層次是否為最底層,若是最底層,則返回掃描點(diǎn)的后退一個(gè)位置,并記為插入點(diǎn),若不是最底層,則將掃描點(diǎn)后退一步,掃描層下移一層,從后退之后的掃描點(diǎn)處的節(jié)點(diǎn)開始,轉(zhuǎn)至執(zhí)行步驟(1-2)。

參考圖3所示,為本發(fā)明實(shí)施例公開的一種單個(gè)元素查找過(guò)程的流程圖。通過(guò)圖3所示的查詢操作,單個(gè)元素的查詢操作過(guò)程將滿足預(yù)設(shè)值的節(jié)點(diǎn)長(zhǎng)高,來(lái)滿足跳表節(jié)點(diǎn)概率因子為p的隨機(jī)性高度要求,完善跳表各層節(jié)點(diǎn)的概率比,提高后續(xù)元素的查找性能。

(2)單個(gè)元素插入:若skiplist中不存在目標(biāo)元素,則在最底層的有序單鏈表中將該目標(biāo)元素插入到步驟(1)返回的插入點(diǎn)之后,且將節(jié)點(diǎn)高度設(shè)為1。

通過(guò)上述單個(gè)元素的插入操作,單個(gè)元素的插入相比典型的skiplist插入操作,減少節(jié)點(diǎn)高度的隨機(jī)生成過(guò)程和該節(jié)點(diǎn)在多層有序單鏈表的鏈接過(guò)程,從而大大提高元素的插入性能。

優(yōu)選地,在步驟(1)之前,還包括初始化操作:

設(shè)置概率因子p和skiplist節(jié)點(diǎn)所能達(dá)到的高度閥值;分配skiplist對(duì)象,skiplist具有當(dāng)前高度和頭結(jié)點(diǎn)兩個(gè)屬性,并初始化頭結(jié)點(diǎn),以高度閥值作為頭節(jié)點(diǎn)的高度,分配前進(jìn)鏈接指針數(shù)組,指針數(shù)組的每個(gè)元素指向空指針。

為了便于對(duì)本發(fā)明提出的一種多層鏈接分離的skiplist構(gòu)造方法的理解,以下結(jié)合實(shí)施例進(jìn)一步闡述本發(fā)明提供的skiplist構(gòu)造方法,在本實(shí)施例中,設(shè)置概率因子P為0.5,高度閾值為5,skiplist中含有元素1、4、5、7、11、13、17,依次向skiplist中插入14的流程如圖4所示,具體包括如下步驟:

(1)插入元素14的查找過(guò)程,包括如下子步驟:

(1.1)設(shè)置掃描層為skiplist當(dāng)前的最大高度3,初始化計(jì)步器的值為0,從頭結(jié)點(diǎn)head開始順著前進(jìn)方向進(jìn)行掃描;

(1.2)首先,掃描點(diǎn)位于元素為4的節(jié)點(diǎn)處,14比4大,計(jì)步器增加1變?yōu)?,判斷計(jì)數(shù)器的值未達(dá)到1/p;

(1.3)掃描點(diǎn)順著前進(jìn)方向移向下一個(gè)位置,即空指針NIL,后退一個(gè)位置,即回到元素為4的節(jié)點(diǎn)位置;

(1.4)判斷掃描層高度為3,未達(dá)到底層,故掃描層下移一層,位于第2層;

(1.5)掃描點(diǎn)順著前進(jìn)方向移向下一個(gè)位置,即到達(dá)元素為7的位置,判斷14比7大,計(jì)步器增加1變?yōu)?,判斷計(jì)數(shù)器的值達(dá)到預(yù)設(shè)值1/p;

(1.6)長(zhǎng)高元素為7的節(jié)點(diǎn),同時(shí)將計(jì)步器置為0;

(1.7)掃描點(diǎn)順著前進(jìn)方向移向下一個(gè)位置,即空指針NIL,后退一個(gè)位置,即回到元素為7的節(jié)點(diǎn)位置;

(1.8)判斷掃描層高度為2,未達(dá)到底層,故掃描層下移一層,位于第1層,即底層;

(1.9)同理,掃描點(diǎn)依次經(jīng)過(guò)元素為11、13的節(jié)點(diǎn),在元素為13的節(jié)點(diǎn)處,判斷計(jì)步器達(dá)到1/p,故長(zhǎng)高元素為13的節(jié)點(diǎn),計(jì)步器置為0;

(1.10)掃描點(diǎn)順著前進(jìn)方向移向下一個(gè)位置,到達(dá)元素為17的位置,判斷17比14大,判斷掃描層已經(jīng)到達(dá)底層,掃描點(diǎn)后退一步到達(dá)元素為13的節(jié)點(diǎn)處,返回掃描點(diǎn)的位置;

(2)插入元素14的過(guò)程包括如下子步驟:

在底層有序單鏈表中,將元素為14的節(jié)點(diǎn)插入到步驟(1)返回的位置后面;插入元素14過(guò)程結(jié)束。

圖5為本發(fā)明實(shí)施例公開的一種多層鏈接分離的skiplist構(gòu)造系統(tǒng)的結(jié)構(gòu)示意圖,在圖5所示的系統(tǒng)中包括:查詢模塊以及元素插入模塊;

上述查詢模塊包括:設(shè)置模塊、第一掃描模塊、第二掃描模塊以及第三掃描模塊:

上述設(shè)置模塊,用于設(shè)置當(dāng)前掃描的層次為skiplist當(dāng)前的最大高度,初始化計(jì)步器值為0,將當(dāng)前所處的位置記為掃描點(diǎn),將當(dāng)前掃描的層次記為掃描層,將當(dāng)前掃描的單鏈表記為掃描鏈;

上述第一掃描模塊,用于從當(dāng)前掃描的單鏈表開始按前進(jìn)指針的方向掃描,判斷待插入的目標(biāo)元素與掃描點(diǎn)處的元素的大小關(guān)系,若掃描點(diǎn)處的元素與目標(biāo)元素相等,則返回,結(jié)束本次單個(gè)元素的插入操作,繼續(xù)下一個(gè)元素的插入操作,若掃描點(diǎn)處的元素小于目標(biāo)元素,則進(jìn)入所述第二掃描模塊,若掃描點(diǎn)處的元素大于目標(biāo)元素,則進(jìn)入所述第三掃描模塊;

上述第二掃描模塊,用于在掃描點(diǎn)處的元素小于目標(biāo)元素時(shí),將計(jì)步器增加1,并判斷計(jì)步器中的計(jì)數(shù)值是否達(dá)到預(yù)設(shè)值,其中,預(yù)設(shè)值為概率因子p的倒數(shù),若計(jì)步器的計(jì)數(shù)值達(dá)到預(yù)設(shè)值,則將掃描點(diǎn)處的節(jié)點(diǎn)高度增加1,即將該掃描點(diǎn)處的節(jié)點(diǎn)鏈接到掃描層的上面一層的鏈表中,同時(shí)計(jì)步器置0,掃描點(diǎn)向前移動(dòng),若計(jì)步器的計(jì)數(shù)值沒(méi)有達(dá)到預(yù)設(shè)值,則返回所述第一掃描模塊;

上述第三掃描模塊,用于在掃描點(diǎn)處的元素大于目標(biāo)元素時(shí),判斷當(dāng)前掃描的層次是否為最底層,若是最底層,則返回掃描點(diǎn)的后退一個(gè)位置,并記為插入點(diǎn),若不是最底層,則將掃描點(diǎn)后退一步,掃描層下移一層,從后退之后的掃描點(diǎn)處的節(jié)點(diǎn)開始,轉(zhuǎn)至所述第一掃描模塊;

上述元素插入模塊,用于在skiplist中不存在目標(biāo)元素時(shí),在最底層的有序單鏈表中將該目標(biāo)元素插入到所述查詢模塊返回的插入點(diǎn)之后,且將節(jié)點(diǎn)高度設(shè)為1。

優(yōu)選地,在圖5所示的系統(tǒng)中還包括:

初始化模塊,用于設(shè)置概率因子p和skiplist節(jié)點(diǎn)所能達(dá)到的高度閥值;分配skiplist對(duì)象,skiplist具有當(dāng)前高度和頭結(jié)點(diǎn)兩個(gè)屬性,并初始化頭結(jié)點(diǎn),以高度閥值作為頭節(jié)點(diǎn)的高度,分配前進(jìn)鏈接指針數(shù)組,指針數(shù)組的每個(gè)元素指向空指針。

本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1