国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      哈希表添加、查找和刪除方法及裝置的制作方法

      文檔序號(hào):6429571閱讀:573來源:國(guó)知局
      專利名稱:哈希表添加、查找和刪除方法及裝置的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及一種哈希表添加、查找和刪除方法及裝置,屬于數(shù)據(jù)處理技術(shù)領(lǐng)域。
      背景技術(shù)
      哈希表(Hash Table)也稱為散列表,是一種根據(jù)數(shù)據(jù)關(guān)鍵碼值(Key Value)進(jìn)行直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。傳統(tǒng)哈希表通常包含多個(gè)具有一定桶深的哈希桶,每個(gè)哈希桶都包含了哈希后得到的地址指向該桶的元素。為了使哈希表在沖突存在的情況下達(dá)到期望的利用率,通常采用增加哈希桶數(shù)量的方式降低沖突率,并采用增加每個(gè)哈希桶最大桶深的方式來提高對(duì)沖突的容忍度。對(duì)于軟件結(jié)構(gòu)下的哈希表,只要處理器有足夠的處理能力,上述方式均易于實(shí)現(xiàn); 但對(duì)于傳統(tǒng)硬件結(jié)構(gòu)下的哈希表,不論增加哈希桶的數(shù)量,還是增加每個(gè)哈希桶的最大深度,都意味著要占用更多的存儲(chǔ)資源,而存儲(chǔ)資源總是有限的,因此必須在哈希桶的數(shù)量及每個(gè)哈希桶的最大深度之間做出一種平衡,這就使哈希表的利用效率難以有大的提高。

      發(fā)明內(nèi)容
      本發(fā)明提供一種哈希表添加、查找和刪除方法,用以提高哈希表的利用效率及存儲(chǔ)空間的利用率。本發(fā)明一方面提供一種哈希表添加方法,其中包括提取待添加數(shù)據(jù)的關(guān)鍵字;對(duì)所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;根據(jù)所述哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用;當(dāng)所述目標(biāo)存儲(chǔ)位置被占用時(shí),在所述哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷所述目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);若是,則根據(jù)所述哈希指紋,在所述空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到所述占用節(jié)點(diǎn)所在雙向鏈表的鏈尾;若否,則將所述占用節(jié)點(diǎn)移動(dòng)到所述空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。本發(fā)明另一方面提供一種哈希表查找方法,其中包括提取待查找數(shù)據(jù)的關(guān)鍵字;對(duì)所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;根據(jù)所述哈希地址,在采用如上所述的哈希表添加方法而形成的哈希表中,讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容;當(dāng)該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋不匹配時(shí),判斷所述疑似節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);所述疑似節(jié)點(diǎn)為一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),對(duì)所述疑似節(jié)點(diǎn)所在的雙向鏈表進(jìn)行遍歷查找;當(dāng)該雙向鏈表中的一個(gè)節(jié)點(diǎn)的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找。本發(fā)明再一方面提供一種哈希表刪除方法,其中包括采用如上所述的哈希表查找方法在采用如上所述的哈希表添加方法而形成的哈希表中查找到要?jiǎng)h除的目標(biāo)節(jié)點(diǎn);將所述目標(biāo)節(jié)點(diǎn)從相應(yīng)的存儲(chǔ)位置刪除;當(dāng)所述目標(biāo)節(jié)點(diǎn)在雙向鏈表中還鏈接有后續(xù)節(jié)點(diǎn)時(shí),將該后續(xù)節(jié)點(diǎn)在所述雙向鏈表中的位置前移。本發(fā)明又一方面提供一種哈希表添加裝置,其中包括提取模塊,用于提取待添加數(shù)據(jù)的關(guān)鍵字;運(yùn)算模塊,用于對(duì)提取模塊提取出的所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;第一判斷模塊,用于根據(jù)運(yùn)算模塊得到的所述哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用;第二判斷模塊,用于當(dāng)?shù)谝慌袛嗄K判斷出所述目標(biāo)存儲(chǔ)位置被占用時(shí),在所述哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷所述目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);第一添加執(zhí)行模塊,用于當(dāng)?shù)诙袛嗄K的判斷結(jié)果為是時(shí),根據(jù)運(yùn)算模塊得到的所述哈希指紋,在所述空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到所述占用節(jié)點(diǎn)所在雙向鏈表的鏈尾;當(dāng)?shù)诙袛嗄K的判斷結(jié)果為否時(shí),將所述占用節(jié)點(diǎn)移動(dòng)到所述空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)運(yùn)算模塊得到的所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。本發(fā)明又一方面提供一種哈希表查找裝置,其中包括提取模塊,用于提取待查找數(shù)據(jù)的關(guān)鍵字;運(yùn)算模塊,用于對(duì)提取模塊提取的所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;讀取模塊,根據(jù)運(yùn)算模塊得到的所述哈希地址,在采用如上所述的哈希表添加方法而形成的哈希表中,讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容;判斷模塊,用于當(dāng)讀取模塊讀取的該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋不匹配時(shí),判斷所述疑似節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);查找模塊,用于當(dāng)判斷模塊判斷出所述疑似節(jié)點(diǎn)為一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),對(duì)所述疑似節(jié)點(diǎn)所在的雙向鏈表進(jìn)行遍歷查找,當(dāng)該雙向鏈表中的一個(gè)節(jié)點(diǎn)的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找。本發(fā)明又一方面提供一種哈希表刪除裝置,其中包括查找模塊,用于采用如上所述的哈希表查找方法在采用如上所述的哈希表添加方法而形成的哈希表中查找到要?jiǎng)h除的目標(biāo)節(jié)點(diǎn);刪除執(zhí)行模塊,用于將查找模塊查找到的所述目標(biāo)節(jié)點(diǎn)從相應(yīng)的存儲(chǔ)位置刪除;移位模塊,用于當(dāng)查找模塊查找到的所述目標(biāo)節(jié)點(diǎn)在雙向鏈表中還鏈接有后續(xù)節(jié)點(diǎn)時(shí),將該后續(xù)節(jié)點(diǎn)在所述雙向鏈表中的位置前移。本發(fā)明可以提高哈希表的利用效率及存儲(chǔ)空間的利用率。


      為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明各實(shí)施例中所涉及的哈希表的數(shù)據(jù)結(jié)構(gòu)示意圖;圖2為圖1所示哈希表中每個(gè)節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)示意圖;圖3A和圖;3B為圖2所示每個(gè)節(jié)點(diǎn)中各字段大小的說明圖;圖4為本發(fā)明所述哈希表添加方法實(shí)施例的流程圖;圖5A 5C為圖4所示方法中各步驟的舉例示意圖;圖6為本發(fā)明所述哈希表查找方法實(shí)施例的流程圖;圖7為本發(fā)明所述哈希表刪除方法實(shí)施例的流程圖;圖8為本發(fā)明所述哈希表添加裝置實(shí)施例的結(jié)構(gòu)示意圖;圖9為本發(fā)明所述哈希表查找裝置實(shí)施例的結(jié)構(gòu)示意圖;圖10為本發(fā)明所述哈希表刪除裝置實(shí)施例的結(jié)構(gòu)示意圖。
      具體實(shí)施例方式為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。首先介紹本發(fā)明以下各實(shí)施例中所涉及的哈希表的數(shù)據(jù)結(jié)構(gòu)。如圖1所示,該哈希表是硬件結(jié)構(gòu)下的哈希表,圖中的方框中的數(shù)字表示哈希地址,圓圈表示鏈表中的每個(gè)節(jié)點(diǎn),直線箭頭表示節(jié)點(diǎn)與哈希地址之間的對(duì)應(yīng)關(guān)系,弧線箭頭表示相鄰節(jié)點(diǎn)之間的鏈接關(guān)系。如圖2所示,每個(gè)節(jié)點(diǎn)由四個(gè)字段組成,每個(gè)節(jié)點(diǎn)的內(nèi)容可以表示為{0C,PRE_ OFST,P0S_0FST,F(xiàn)M},其中標(biāo)志字段(圖中表示為0C)標(biāo)志當(dāng)前存儲(chǔ)位置是否被占用,“1”表示占用,“0” 表示未占用;指紋字段(圖中表示為FM)存放由哈希算法計(jì)算出的當(dāng)前數(shù)據(jù)的關(guān)鍵字對(duì)應(yīng)的待檢測(cè)哈希指紋;前向指針字段(圖中表示為PRE_0FST)標(biāo)志在具有相同哈希地址的相鄰兩個(gè)節(jié)點(diǎn)中,記錄在后一個(gè)節(jié)點(diǎn)中的、與前一個(gè)節(jié)點(diǎn)的存儲(chǔ)地址距離;后向指針字段(圖中表示為P0S_0FST)標(biāo)志在具有相同哈希地址的相鄰兩個(gè)節(jié)點(diǎn)中,記錄在前一個(gè)節(jié)點(diǎn)中的、與后一個(gè)節(jié)點(diǎn)的存儲(chǔ)地址距離。例如,圖1中,三個(gè)相鄰的節(jié)點(diǎn)Tl、Ml和Hl通過各自的前向指針字段及后向指針字段構(gòu)成雙向鏈表。如圖3A及圖:3B所示,每個(gè)節(jié)點(diǎn)均占用硬件存儲(chǔ)器中特定長(zhǎng)度的存儲(chǔ)空間。在圖 3A中,每個(gè)節(jié)點(diǎn)占用32個(gè)比特位,其中,每個(gè)指針占用4個(gè)比特位,因此屬于同一個(gè)雙向鏈表的相鄰節(jié)點(diǎn)允許最大跨越15個(gè)節(jié)點(diǎn);在圖:3B中,每個(gè)節(jié)點(diǎn)占用64個(gè)比特位,其中,每個(gè)指針占用11個(gè)比特位,因此屬于同一個(gè)雙向鏈表的相鄰節(jié)點(diǎn)允許最大跨越2047個(gè)節(jié)點(diǎn)。圖4為本發(fā)明所述哈希表添加方法實(shí)施例的流程圖,如圖所示,包括如下步驟步驟110,提取待添加數(shù)據(jù)的關(guān)鍵字。步驟120,對(duì)所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋。具體的哈希運(yùn)算過程可參考現(xiàn)有技術(shù),其中,得到哈希地址的哈希運(yùn)算與得到哈希指紋的哈希運(yùn)算有可能是不同的運(yùn)算過程。步驟130,根據(jù)所述哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用,當(dāng)未被占用時(shí),執(zhí)行步驟140,否則執(zhí)行步驟150。具體地,如前所述,可以根據(jù)所述目標(biāo)存儲(chǔ)位置的目標(biāo)節(jié)點(diǎn)的標(biāo)志字段的值確定其存儲(chǔ)位置是否被占用。步驟140,根據(jù)所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。具體地,在所述目標(biāo)節(jié)點(diǎn)的指紋字段保存所述哈希指紋,將標(biāo)示字段的值設(shè)置為 “1”,將前向指針及后向指針的值均設(shè)置為“0”。例如,在進(jìn)行添加操作之前的哈希表如圖 1所示,假設(shè)一個(gè)待添加數(shù)據(jù)X的關(guān)鍵字通過哈希運(yùn)算后得到的哈希地址為9,哈希指紋為 FMX,如圖5A所示,經(jīng)過步驟140的添加操作后,在地址為9的目標(biāo)存儲(chǔ)位置創(chuàng)建了一個(gè)新的雙向鏈表,該雙向鏈表只具有一個(gè)節(jié)點(diǎn),即所述目標(biāo)節(jié)點(diǎn),其內(nèi)容為{1,0,0,F(xiàn)MX}。步驟150,在所述哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷所述目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn),是則執(zhí)行步驟151,否則執(zhí)行步驟152。其中,占用節(jié)點(diǎn)是指占用所述目標(biāo)存儲(chǔ)位置的節(jié)點(diǎn),具體地,當(dāng)該占用節(jié)點(diǎn)的前向指針字段的值為0時(shí),則表明該占用節(jié)點(diǎn)之前并不與其他節(jié)點(diǎn)相鏈接,因此該占用節(jié)點(diǎn)為雙向鏈表的首節(jié)點(diǎn),否則該占用節(jié)點(diǎn)不是雙向鏈表的首節(jié)點(diǎn)。具體地,所述空閑存儲(chǔ)位置可以是位于所述目標(biāo)存儲(chǔ)位置之后,且距離最近的空閑存儲(chǔ)位置。此處需要說明的是,如果所述雙向鏈表為單節(jié)點(diǎn)鏈表,則可以認(rèn)為該單節(jié)點(diǎn)既為首節(jié)點(diǎn),也為尾節(jié)點(diǎn)。步驟151,根據(jù)所述哈希指紋,在所述空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到所述占用節(jié)點(diǎn)所在雙向鏈表的鏈尾。例如,在進(jìn)行添加操作之前的哈希表如圖1所示,假設(shè)一個(gè)待添加數(shù)據(jù)X的關(guān)鍵字通過哈希運(yùn)算后得到的哈希地址為5,哈希指紋為FMX,如圖5B所示,在哈希地址為5的目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)Hl為一個(gè)雙向鏈表的首節(jié)點(diǎn),因此,經(jīng)過步驟151的添加操作后, 在地址為9的空閑存儲(chǔ)位置處添加了目標(biāo)節(jié)點(diǎn)X,并將該目標(biāo)節(jié)點(diǎn)X鏈接在原先的尾節(jié)點(diǎn) Tl之后成為新的尾節(jié)點(diǎn)。步驟152,將所述占用節(jié)點(diǎn)移動(dòng)到所述空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。
      例如,在進(jìn)行添加操作之前的哈希表如圖1所示,假設(shè)一個(gè)待添加數(shù)據(jù)X的關(guān)鍵字通過哈希運(yùn)算后得到的哈希地址為6,哈希指紋為FMX,如圖1所示,在哈希地址為6的目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)Ml不是一個(gè)雙向鏈表的首節(jié)點(diǎn),因此,經(jīng)過步驟152的添加操作后, 如圖5C所示,該占用節(jié)點(diǎn)Tl被移動(dòng)到地址為9的空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)Ml鏈接到該占用節(jié)點(diǎn)Ml所在雙向鏈表的鏈尾成為新的尾節(jié)點(diǎn),這樣做的目的是為了空出地址為6 的目標(biāo)存儲(chǔ)位置;然后,在地址為6的目標(biāo)存儲(chǔ)位置添加了目標(biāo)節(jié)點(diǎn)X,構(gòu)成單節(jié)點(diǎn)的雙向鏈表。圖6為本發(fā)明所述哈希表查找方法實(shí)施例的流程圖,如圖所示,包括如下步驟步驟210,提取待查找數(shù)據(jù)的關(guān)鍵字。步驟220,對(duì)所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋。具體的哈希運(yùn)算過程可參考現(xiàn)有技術(shù),其中,得到哈希地址的哈希運(yùn)算與得到哈希指紋的哈希運(yùn)算有可能是不同的運(yùn)算過程。步驟230,根據(jù)所述哈希地址,在采用圖4所示方法而形成的哈希表中,讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容,當(dāng)該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找;否則繼續(xù)執(zhí)行步驟M0。其中,所述疑似節(jié)點(diǎn)是指有可能是要查找的目標(biāo)節(jié)點(diǎn)的節(jié)點(diǎn),如果指紋匹配成功, 則可以確定該疑似節(jié)點(diǎn)就是目標(biāo)節(jié)點(diǎn),否則還要繼續(xù)尋找。步驟M0,判斷所述疑似節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn),是則繼續(xù)執(zhí)行步驟 250,否則查找失敗,結(jié)束查找。從上述添加過程可以看出,在圖5B中,雖然新添加的節(jié)點(diǎn)X占用的是地址為9的存儲(chǔ)位置,但該節(jié)點(diǎn)X實(shí)際上對(duì)應(yīng)的存儲(chǔ)位置的地址為5,因此,當(dāng)所述疑似節(jié)點(diǎn)不是一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),表明該疑似節(jié)點(diǎn)僅僅是恰巧占用了所述目標(biāo)存儲(chǔ)位置的一個(gè)不相關(guān)的節(jié)點(diǎn),而非要找的目標(biāo)節(jié)點(diǎn)。而該哈希表中已不可能存在要找的目標(biāo)節(jié)點(diǎn),因此查找失敗。此處需要說明的是,如果所述雙向鏈表為單節(jié)點(diǎn)鏈表,則可以認(rèn)為該疑似節(jié)點(diǎn)既為首節(jié)點(diǎn),也為尾節(jié)點(diǎn)。步驟250,對(duì)所述疑似節(jié)點(diǎn)所在的雙向鏈表進(jìn)行遍歷查找,當(dāng)該雙向鏈表中的一個(gè)節(jié)點(diǎn)的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功;否則查找失敗。其中,所述遍歷查找是指從作為鏈?zhǔn)椎乃鲆伤乒?jié)點(diǎn)開始,沿著所述雙向鏈表逐個(gè)節(jié)點(diǎn)地向后查找。例如,如圖5B所示,假設(shè)根據(jù)所述哈希地址為5,則在該目標(biāo)存儲(chǔ)位置首先找到的疑似節(jié)點(diǎn)為節(jié)點(diǎn)H1,然后沿著節(jié)點(diǎn)Hl向后找到節(jié)點(diǎn)M1,指紋匹配結(jié)果為不匹配,因此繼續(xù)向后找到節(jié)點(diǎn)Tl,指紋匹配結(jié)果仍然為不匹配;因此繼續(xù)向后找到節(jié)點(diǎn)X,指紋匹配結(jié)果為匹配,此時(shí)查找成功。圖7為本發(fā)明所述哈希表刪除方法實(shí)施例的流程圖,如圖所示,包括如下步驟步驟310,采用圖6所示方法在采用圖4所示方法而形成的哈希表中查找到要?jiǎng)h除的目標(biāo)節(jié)點(diǎn)。步驟320,將所述目標(biāo)節(jié)點(diǎn)從相應(yīng)的存儲(chǔ)位置刪除。步驟330,當(dāng)所述目標(biāo)節(jié)點(diǎn)在雙向鏈表中還鏈接有后續(xù)節(jié)點(diǎn)時(shí),將該后續(xù)節(jié)點(diǎn)在所述雙向鏈表中的位置前移。
      其中,所述后續(xù)節(jié)點(diǎn)是指鏈接在目標(biāo)節(jié)點(diǎn)之后的節(jié)點(diǎn),進(jìn)行前移的目的是為了在將目標(biāo)節(jié)點(diǎn)刪除后,保持雙向鏈表中余下節(jié)點(diǎn)的連續(xù)性。通過采用本發(fā)明上述各實(shí)施例所述的添加、查找和刪除的方法,可以形成具有雙向鏈表的哈希表,適合硬件實(shí)現(xiàn),并在單個(gè)查找引擎順序查找及不增加存儲(chǔ)器使用量的前提下,有效解決哈希沖突,提高哈希表的利用效率,并最大限度的利用存儲(chǔ)空間,實(shí)現(xiàn)大容量的數(shù)據(jù)存儲(chǔ)。圖8為本發(fā)明所述哈希表添加裝置實(shí)施例的結(jié)構(gòu)示意圖,能夠?qū)崿F(xiàn)上述哈希表添加方法,如圖所示,該哈希表添加裝置10包括提取模塊11、運(yùn)算模塊12、第一判斷模塊 13、第二判斷模塊14、第一添加執(zhí)行模塊15及第二添加執(zhí)行模塊16,其工作原理如下首先由提取模塊11提取待添加數(shù)據(jù)的關(guān)鍵字;然后由運(yùn)算模塊12對(duì)提取模塊11 提取出的所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋。此后,第一判斷模塊13根據(jù)運(yùn)算模塊12得到的所述哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用,當(dāng)?shù)谝慌袛嗄K13判斷出所述目標(biāo)存儲(chǔ)位置未被占用時(shí),由第二添加執(zhí)行模塊16根據(jù)運(yùn)算模塊12得到的所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表,具體的舉例可參見圖5A及其相關(guān)說明。當(dāng)?shù)谝慌袛嗄K13判斷出所述目標(biāo)存儲(chǔ)位置被占用時(shí),由第二判斷模塊14在所述哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷所述目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);當(dāng)?shù)诙袛嗄K14的判斷結(jié)果為是時(shí),由第一添加執(zhí)行模塊15根據(jù)運(yùn)算模塊12得到的所述哈希指紋,在所述空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到所述占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,。當(dāng)?shù)诙袛嗄K14的判斷結(jié)果為否時(shí),由第一添加執(zhí)行模塊15將所述占用節(jié)點(diǎn)移動(dòng)到所述空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)運(yùn)算模塊12得到的所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表,具體的舉例可參見圖5C及其相關(guān)說明。圖9為本發(fā)明所述哈希表查找裝置實(shí)施例的結(jié)構(gòu)示意圖,能夠?qū)崿F(xiàn)上述哈希表查找方法,如圖所示,該哈希表查找裝置20包括提取模塊21、運(yùn)算模塊22、讀取模塊23、判斷模塊M及查找模塊25,其工作原理如下首先由提取模塊21提取待查找數(shù)據(jù)的關(guān)鍵字;然后由運(yùn)算模塊22對(duì)提取模塊21 提取的所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;進(jìn)而由讀取模塊23運(yùn)算模塊 22得到的所述哈希地址,在采用上述哈希表添加方法而形成的哈希表中,讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容。此后,當(dāng)讀取模塊23讀取的該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找;而當(dāng)當(dāng)讀取模塊23讀取的該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋不匹配時(shí),繼續(xù)由判斷模塊M判斷所述疑似節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn)。當(dāng)判斷模塊M判斷出所述疑似節(jié)點(diǎn)為一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),由查找模塊25 對(duì)所述疑似節(jié)點(diǎn)所在的雙向鏈表進(jìn)行遍歷查找,當(dāng)該雙向鏈表中的一個(gè)節(jié)點(diǎn)的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找;否則查找失敗,結(jié)束查找;否則, 如果判斷模塊M判斷出所述疑似節(jié)點(diǎn)為不是一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),則查找失敗,結(jié)束查找。圖10為本發(fā)明所述哈希表刪除裝置實(shí)施例的結(jié)構(gòu)示意圖,能夠?qū)崿F(xiàn)上述哈希表刪除方法,如圖所示,該哈希表刪除裝置30包括查找模塊31、刪除執(zhí)行模塊32及移位模塊33,其工作原理如下首先由查找模塊31采用上述哈希表查找方法在采用上述哈希表添加方面而形成的哈希表中查找到要?jiǎng)h除的目標(biāo)節(jié)點(diǎn);然后由刪除執(zhí)行模塊32將查找模塊31查找到的所述目標(biāo)節(jié)點(diǎn)從相應(yīng)的存儲(chǔ)位置刪除;另外,當(dāng)查找模塊31查找到的所述目標(biāo)節(jié)點(diǎn)在雙向鏈表中還鏈接有后續(xù)節(jié)點(diǎn)時(shí),進(jìn)一步由移位模塊33將該后續(xù)節(jié)點(diǎn)在所述雙向鏈表中的位置前移。通過采用本發(fā)明上述各實(shí)施例所述的添加、查找和刪除的裝置,可以形成具有雙向鏈表的哈希表,適合硬件實(shí)現(xiàn),并在單個(gè)查找引擎順序查找及不增加存儲(chǔ)器使用量的前提下,有效解決哈希沖突,提高哈希表的利用效率,并最大限度的利用存儲(chǔ)空間,實(shí)現(xiàn)大容量的數(shù)據(jù)存儲(chǔ)。本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),執(zhí)行包括上述方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括R0M、RAM、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。最后應(yīng)說明的是以上實(shí)施例僅用以說明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
      權(quán)利要求
      1.一種哈希表添加方法,其特征在于包括 提取待添加數(shù)據(jù)的關(guān)鍵字;對(duì)所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋; 根據(jù)所述哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用;當(dāng)所述目標(biāo)存儲(chǔ)位置被占用時(shí),在所述哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷所述目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);若是,則根據(jù)所述哈希指紋,在所述空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到所述占用節(jié)點(diǎn)所在雙向鏈表的鏈尾;若否,則將所述占用節(jié)點(diǎn)移動(dòng)到所述空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。
      2.根據(jù)權(quán)利要求1所述的方法,其特征在于還包括當(dāng)所述目標(biāo)存儲(chǔ)位置未被占用時(shí), 根據(jù)所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。
      3.一種哈希表查找方法,其特征在于包括 提取待查找數(shù)據(jù)的關(guān)鍵字;對(duì)所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;根據(jù)所述哈希地址,在采用權(quán)利要求1或2所述方法而形成的哈希表中,讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容;當(dāng)該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋不匹配時(shí),判斷所述疑似節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);所述疑似節(jié)點(diǎn)為一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),對(duì)所述疑似節(jié)點(diǎn)所在的雙向鏈表進(jìn)行遍歷查找;當(dāng)該雙向鏈表中的一個(gè)節(jié)點(diǎn)的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找。
      4.根據(jù)權(quán)利要求3所述的方法,其特征在于所述讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容之后還包括當(dāng)該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找。
      5.根據(jù)權(quán)利要求3所述的方法,其特征在于還包括所述疑似節(jié)點(diǎn)不是一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),則查找失敗,結(jié)束查找。
      6.一種哈希表刪除方法,其特征在于包括采用權(quán)利要求3 5中任一項(xiàng)所述方法在采用權(quán)利要求1或2所述方法而形成的哈希表中查找到要?jiǎng)h除的目標(biāo)節(jié)點(diǎn);將所述目標(biāo)節(jié)點(diǎn)從相應(yīng)的存儲(chǔ)位置刪除;當(dāng)所述目標(biāo)節(jié)點(diǎn)在雙向鏈表中還鏈接有后續(xù)節(jié)點(diǎn)時(shí),將該后續(xù)節(jié)點(diǎn)在所述雙向鏈表中的位置前移。
      7.一種哈希表添加裝置,其特征在于包括 提取模塊,用于提取待添加數(shù)據(jù)的關(guān)鍵字;運(yùn)算模塊,用于對(duì)提取模塊提取出的所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;第一判斷模塊,用于根據(jù)運(yùn)算模塊得到的所述哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用;第二判斷模塊,用于當(dāng)?shù)谝慌袛嗄K判斷出所述目標(biāo)存儲(chǔ)位置被占用時(shí),在所述哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷所述目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);第一添加執(zhí)行模塊,用于當(dāng)?shù)诙袛嗄K的判斷結(jié)果為是時(shí),根據(jù)運(yùn)算模塊得到的所述哈希指紋,在所述空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到所述占用節(jié)點(diǎn)所在雙向鏈表的鏈尾;當(dāng)?shù)诙袛嗄K的判斷結(jié)果為否時(shí),將所述占用節(jié)點(diǎn)移動(dòng)到所述空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)運(yùn)算模塊得到的所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。
      8.根據(jù)權(quán)利要求7所述的裝置,其特征在于還包括第二添加執(zhí)行模塊,用于當(dāng)?shù)谝慌袛嗄K判斷出所述目標(biāo)存儲(chǔ)位置未被占用時(shí),根據(jù)運(yùn)算模塊得到的所述哈希指紋,在所述目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。
      9.一種哈希表查找裝置,其特征在于包括提取模塊,用于提取待查找數(shù)據(jù)的關(guān)鍵字;運(yùn)算模塊,用于對(duì)提取模塊提取的所述關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;讀取模塊,根據(jù)運(yùn)算模塊得到的所述哈希地址,在采用權(quán)利要求1或2所述方法而形成的哈希表中,讀取相應(yīng)目標(biāo)存儲(chǔ)位置處的疑似節(jié)點(diǎn)的內(nèi)容;判斷模塊,用于當(dāng)讀取模塊讀取的該疑似節(jié)點(diǎn)中的哈希指紋與所述關(guān)鍵字的哈希指紋不匹配時(shí),判斷所述疑似節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);查找模塊,用于當(dāng)判斷模塊判斷出所述疑似節(jié)點(diǎn)為一個(gè)雙向鏈表的首節(jié)點(diǎn)時(shí),對(duì)所述疑似節(jié)點(diǎn)所在的雙向鏈表進(jìn)行遍歷查找,當(dāng)該雙向鏈表中的一個(gè)節(jié)點(diǎn)的哈希指紋與所述關(guān)鍵字的哈希指紋相匹配時(shí),則查找成功,結(jié)束查找。
      10.一種哈希表刪除裝置,其特征在于包括查找模塊,用于采用權(quán)利要求3 5中任一項(xiàng)所述方法在采用權(quán)利要求1或2所述方法而形成的哈希表中查找到要?jiǎng)h除的目標(biāo)節(jié)點(diǎn);刪除執(zhí)行模塊,用于將查找模塊查找到的所述目標(biāo)節(jié)點(diǎn)從相應(yīng)的存儲(chǔ)位置刪除;移位模塊,用于當(dāng)查找模塊查找到的所述目標(biāo)節(jié)點(diǎn)在雙向鏈表中還鏈接有后續(xù)節(jié)點(diǎn)時(shí),將該后續(xù)節(jié)點(diǎn)在所述雙向鏈表中的位置前移。
      全文摘要
      一種哈希表添加、查找和刪除方法及裝置。其中哈希表添加方法包括提取待添加數(shù)據(jù)的關(guān)鍵字;對(duì)關(guān)鍵字進(jìn)行哈希運(yùn)算得到哈希地址及哈希指紋;根據(jù)哈希地址判斷相應(yīng)的目標(biāo)存儲(chǔ)位置是否被占用;當(dāng)目標(biāo)存儲(chǔ)位置被占用時(shí),在哈希表中查找未被占用空閑存儲(chǔ)位置,并判斷目標(biāo)存儲(chǔ)位置處的占用節(jié)點(diǎn)是否為一個(gè)雙向鏈表的首節(jié)點(diǎn);若是,則根據(jù)哈希指紋,在空閑存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),并將該目標(biāo)節(jié)點(diǎn)鏈接到占用節(jié)點(diǎn)所在雙向鏈表的鏈尾;若否,則將占用節(jié)點(diǎn)移動(dòng)到空閑存儲(chǔ)位置,并將該占用節(jié)點(diǎn)鏈接到該占用節(jié)點(diǎn)所在雙向鏈表的鏈尾,根據(jù)哈希指紋,在目標(biāo)存儲(chǔ)位置添加目標(biāo)節(jié)點(diǎn),構(gòu)成單節(jié)點(diǎn)的雙向鏈表。本發(fā)明可以提高哈希表的利用效率及存儲(chǔ)空間的利用率。
      文檔編號(hào)G06F17/30GK102314485SQ201110212730
      公開日2012年1月11日 申請(qǐng)日期2011年7月27日 優(yōu)先權(quán)日2011年7月27日
      發(fā)明者孫云剛, 孫才, 陳曦 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)信息中心
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1