一種數(shù)據(jù)處理方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)處理方法和裝置,涉及網(wǎng)絡(luò)通信的數(shù)據(jù)處理領(lǐng)域。包括:預(yù)先建立哈希表和鏈表;當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),對(duì)于待存儲(chǔ)數(shù)據(jù),確定HASH地址對(duì)應(yīng)的HASH節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn);并且建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述HASH節(jié)點(diǎn)的HASH地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系;在該哈希節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的鏈表地址的鏈表指針;在該鏈表節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的哈希地址的哈希指針;更新所述HASH表和所述鏈表。本發(fā)明結(jié)合HASH的快速查找和鏈表的有序與遍歷能力,實(shí)現(xiàn)高效插入,刪除和遍歷的功能,并對(duì)數(shù)據(jù)進(jìn)行高效處理。
【專利說明】一種數(shù)據(jù)處理方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理【技術(shù)領(lǐng)域】,特別地涉及一種適用于網(wǎng)絡(luò)通信的數(shù)據(jù)處理技術(shù)。
【背景技術(shù)】
[0002]在網(wǎng)絡(luò)通信領(lǐng)域,通常各通信設(shè)備會(huì)進(jìn)行例如數(shù)據(jù)轉(zhuǎn)發(fā)等的各種信息交互,而各種交互都基于通信設(shè)備中存儲(chǔ)的各項(xiàng)基本數(shù)據(jù)信息,例如IP地址、接口、MAC地址、老化時(shí)間、VLAN等等。在現(xiàn)有技術(shù)中,各種數(shù)據(jù)信息多以表項(xiàng)的形式來存儲(chǔ),并且涉及數(shù)據(jù)插入、查找或者刪除等處理過程。
[0003]目前數(shù)據(jù)存儲(chǔ)可以使用哈希表(HASH)或者鏈表,其中:
[0004]哈希表(HASH)也稱散列表,采用一個(gè)映射函數(shù)f: key—〉address將關(guān)鍵字映射到該記錄在表中的存儲(chǔ)位置,從而在想要查找該記錄時(shí),可以直接根據(jù)關(guān)鍵字和映射關(guān)系計(jì)算出該記錄在表中的存儲(chǔ)位置,而不是與一般的表中存在的記錄的關(guān)鍵字進(jìn)行比較來進(jìn)行查找,能夠快速定位到想要查找的記錄,從而達(dá)到快速查找的目的。通常情況下,這種映射關(guān)系稱作為HASH函數(shù),而通過HASH函數(shù)和關(guān)鍵字計(jì)算出來的存儲(chǔ)位置(說明一點(diǎn),此處的存儲(chǔ)位置只是HASH表中的存儲(chǔ)位置,并不是實(shí)際的物理地址)稱作為HASH地址。由于上述特點(diǎn),HASH表常在數(shù)據(jù)存儲(chǔ)過程中被用來實(shí)現(xiàn)創(chuàng)建、插入、刪除、更新等操作,但是HASH表無法做到將數(shù)據(jù)有序存放,也有可能存在空洞。
[0005]鏈表是一種物理存儲(chǔ)單元上非連續(xù)、非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針鏈接次序?qū)崿F(xiàn)的。任何一個(gè)節(jié)點(diǎn)的操作都需要從頭部開始檢索,插入和刪除操作都需要從鏈頭開始比較進(jìn)行,鏈表由一系列節(jié)點(diǎn)組成,節(jié)點(diǎn)可以在運(yùn)行時(shí)動(dòng)態(tài)生成。鏈表能夠按照要求將數(shù)據(jù)有序存放,但是無法做到數(shù)據(jù)的快速查找,任何一個(gè)操作,都要從鏈表頭部開始查找,需要對(duì)鏈表中的每一節(jié)點(diǎn)進(jìn)行比較后,確定需要操作的數(shù)據(jù),因此隨著數(shù)據(jù)的增多,操作的平均時(shí)間就越長(zhǎng)。
[0006]由此,需要設(shè)計(jì)一種新的數(shù)據(jù)處理方法,不僅能夠?qū)崿F(xiàn)快速查找,還能夠?qū)崿F(xiàn)數(shù)據(jù)的有序和有效遍歷,而且能夠?qū)崿F(xiàn)高效插入、刪除,便于實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一化管理。
【發(fā)明內(nèi)容】
[0007]本發(fā)明所要解決的技術(shù)問題是為了快速、高效的進(jìn)行數(shù)據(jù)處理,提出一種數(shù)據(jù)處理方法和裝置。
[0008]為了解決上述技術(shù)問題,本發(fā)明提供的技術(shù)方案如下:
[0009]本發(fā)明將HASH表與鏈表的功能組合在一起,結(jié)合HASH的快速查找和鏈表的有序與遍歷能力,實(shí)現(xiàn)高效插入,刪除和遍歷的功能,實(shí)現(xiàn)高效的數(shù)據(jù)處理。
[0010]一種數(shù)據(jù)處理方法,包括:
[0011 ] 預(yù)先建立哈希表和鏈表;
[0012]當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),對(duì)于待存儲(chǔ)數(shù)據(jù),確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn);
[0013]并且建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述哈希節(jié)點(diǎn)的哈希地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系;
[0014]在該哈希節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的鏈表地址的鏈表指針;在該鏈表節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的哈希地址的哈希指針;
[0015]更新所述哈希表和所述鏈表。
[0016]進(jìn)一步地,所述數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址為兩個(gè),每一個(gè)分別與所述哈希節(jié)點(diǎn)的哈希地址及鏈表節(jié)點(diǎn)的鏈表地址相對(duì)應(yīng)。
[0017]進(jìn)一步地,所述數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址為一個(gè),與所述哈希節(jié)點(diǎn)的哈希地址及鏈表節(jié)點(diǎn)的鏈表地址分別對(duì)應(yīng)。
[0018]進(jìn)一步地,確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),包括:
[0019]按照開放地址法確定哈希地址或者按照鏈地址法確定哈希地址,并將哈希節(jié)點(diǎn)掛在所確定的哈希地址。
[0020]進(jìn)一步地,當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,且插入點(diǎn)為非中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),包括:
[0021]以鏈表頭指向的鏈表頭節(jié)點(diǎn)為比較原點(diǎn),按順序掃描鏈表各節(jié)點(diǎn),如果鏈表首節(jié)點(diǎn)為空閑節(jié)點(diǎn),則所述首節(jié)點(diǎn)作為用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的鏈表節(jié)點(diǎn);
[0022]當(dāng)有序插入為鏈表尾部插入時(shí),按順序掃描鏈表各節(jié)點(diǎn),在掃描出的非空纖維鏈表的鏈表節(jié)點(diǎn)的鏈表后向指針無指向時(shí),在其后添加用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的新的鏈表節(jié)點(diǎn)。
[0023]進(jìn)一步地,當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,并且插入點(diǎn)為中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),包括:
[0024]利用哈希表方式查找到所述待插入數(shù)據(jù)被存儲(chǔ)之后其之前一個(gè)已存儲(chǔ)數(shù)據(jù)的哈希地址;
[0025]根據(jù)該哈希地址的哈希節(jié)點(diǎn)中設(shè)置的鏈表指針確定該數(shù)據(jù)在所述鏈表中的鏈表地址;
[0026]基于所確定的待存儲(chǔ)數(shù)據(jù)的前一鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的指針信息以插入鏈表中間節(jié)點(diǎn)的方式確定待存儲(chǔ)數(shù)據(jù)所對(duì)應(yīng)的鏈表地址,及該鏈表地址所對(duì)應(yīng)的鏈表節(jié)點(diǎn)。
[0027]進(jìn)一步地,所述數(shù)據(jù)處理方法還包括:
[0028]當(dāng)需要對(duì)已存儲(chǔ)數(shù)據(jù)進(jìn)行查找時(shí),采用哈希表查找方式確定待查找數(shù)據(jù)對(duì)應(yīng)的哈希地址;
[0029]基于所確定的哈希地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0030]在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0031]進(jìn)一步地,所述數(shù)據(jù)處理方法還包括:
[0032]當(dāng)對(duì)已查找到數(shù)據(jù)查找下一個(gè)時(shí),根據(jù)已查找到的數(shù)據(jù)的哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)中的鏈表指針確定該已查找到數(shù)據(jù)對(duì)應(yīng)鏈表的鏈表地址;
[0033]利用該鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的后向指針確定所述鏈表的下一個(gè)節(jié)點(diǎn)的鏈表地址;
[0034]基于所確定的下一個(gè)節(jié)點(diǎn)的鏈表地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0035]在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0036]進(jìn)一步地,當(dāng)對(duì)已查找到的數(shù)據(jù)進(jìn)行刪除時(shí),包括:
[0037]根據(jù)已查找到數(shù)據(jù)對(duì)應(yīng)的哈希地址,確定該哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),以及該哈希地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0038]利用所述哈希節(jié)點(diǎn)中設(shè)置的指向?qū)?yīng)的鏈表節(jié)點(diǎn)的鏈表指針確定所述鏈表節(jié)點(diǎn),以及該鏈表地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0039]刪除此哈希節(jié)點(diǎn)、鏈表節(jié)點(diǎn),以及所確定的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的存儲(chǔ)數(shù)據(jù);
[0040]更新哈希表和鏈表。
[0041]一種數(shù)據(jù)處理裝置,存儲(chǔ)單元和處理單元,
[0042]所述存儲(chǔ)單元用于存儲(chǔ)哈希表和鏈表;
[0043]所述處理單元用于預(yù)先建立哈希表和鏈表;還用于當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),對(duì)于待存儲(chǔ)數(shù)據(jù),確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn);并且用于建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述哈希節(jié)點(diǎn)的哈希地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系;還用于在該哈希節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的鏈表地址的鏈表指針;在該鏈表節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的哈希地址的哈希指針;還用于更新所述哈希表和所述鏈表。
[0044]進(jìn)一步地,所述處理單元確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)是指:
[0045]按照開放地址法確定哈希地址或者按照鏈地址法確定哈希地址,并將哈希節(jié)點(diǎn)掛在所確定的哈希地址。
[0046]進(jìn)一步地,所述處理單元,用于當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,且插入點(diǎn)為非中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),是指:
[0047]以鏈表頭指向的鏈表頭節(jié)點(diǎn)為比較原點(diǎn),按順序掃描鏈表各節(jié)點(diǎn),如果鏈表首節(jié)點(diǎn)為空閑節(jié)點(diǎn),則所述首節(jié)點(diǎn)作為用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的鏈表節(jié)點(diǎn);
[0048]當(dāng)有序插入為鏈表尾部插入時(shí),按順序掃描鏈表各節(jié)點(diǎn),在掃描出的非空纖維鏈表的鏈表節(jié)點(diǎn)的鏈表后向指針無指向時(shí),在其后添加用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的新的鏈表節(jié)點(diǎn)。
[0049]進(jìn)一步地,所述處理單元,用于當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,并且插入點(diǎn)為中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),是指:
[0050]利用哈希表方式查找到所述待插入數(shù)據(jù)被存儲(chǔ)之后其之前一個(gè)已存儲(chǔ)數(shù)據(jù)的哈希地址;
[0051]根據(jù)該哈希地址的哈希節(jié)點(diǎn)中設(shè)置的鏈表指針確定該數(shù)據(jù)在所述鏈表中的鏈表地址;
[0052]基于所確定的待存儲(chǔ)數(shù)據(jù)的前一鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的指針信息以插入鏈表中間節(jié)點(diǎn)的方式確定待存儲(chǔ)數(shù)據(jù)所對(duì)應(yīng)的鏈表地址,及該鏈表地址所對(duì)應(yīng)的鏈表節(jié)點(diǎn)。
[0053]進(jìn)一步地,所述處理單元還用于:
[0054]當(dāng)需要對(duì)已存儲(chǔ)數(shù)據(jù)進(jìn)行查找時(shí),采用哈希表查找方式確定待查找數(shù)據(jù)對(duì)應(yīng)的哈希地址;
[0055]基于所確定的哈希地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0056]在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0057]進(jìn)一步地,所述處理單元還用于:
[0058]當(dāng)對(duì)已查找到數(shù)據(jù)查找下一個(gè)時(shí),根據(jù)已查找到的數(shù)據(jù)的哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)中的鏈表指針確定該已查找到數(shù)據(jù)對(duì)應(yīng)鏈表的鏈表地址;
[0059]利用該鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的后向指針確定所述鏈表的下一個(gè)節(jié)點(diǎn)的鏈表地址;
[0060]基于所確定的下一個(gè)節(jié)點(diǎn)的鏈表地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0061]在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0062]進(jìn)一步地,所述處理單元用于當(dāng)對(duì)已查找到的數(shù)據(jù)進(jìn)行刪除時(shí),是指:
[0063]根據(jù)已查找到數(shù)據(jù)對(duì)應(yīng)的哈希地址,確定該哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),以及該哈希地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0064]利用所述哈希節(jié)點(diǎn)中設(shè)置的指向?qū)?yīng)的鏈表節(jié)點(diǎn)的鏈表指針確定所述鏈表節(jié)點(diǎn),以及該鏈表地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0065]刪除此哈希節(jié)點(diǎn)、鏈表節(jié)點(diǎn),以及所確定的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的存儲(chǔ)數(shù)據(jù);
[0066]更新哈希表和鏈表。
[0067]本發(fā)明提供的數(shù)據(jù)處理方法將HASH表和鏈表結(jié)合在一起使用,HASH節(jié)點(diǎn)和鏈表節(jié)點(diǎn)都存在指向?qū)Ψ降闹羔槪约芭c數(shù)據(jù)的實(shí)際存儲(chǔ)位置都建立有對(duì)應(yīng)關(guān)系,因此,數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址、對(duì)應(yīng)的HASH節(jié)點(diǎn)的HASH地址、對(duì)應(yīng)的鏈表節(jié)點(diǎn)的鏈表地址之間建立了一個(gè)相互之間可以互相尋址的引用關(guān)系,此時(shí),只要知道HASH地址和鏈表地址中任何一個(gè)地址都能確定另外一個(gè)的地址信息,從而便于HASH表和鏈表功能的接合使用,能夠根據(jù)需要選擇是利用HASH表還是鏈表作為后續(xù)數(shù)據(jù)處理基礎(chǔ),對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行相關(guān)處理。并且在本發(fā)明提供的數(shù)據(jù)處理方法之上,可以添加任何類型的數(shù)據(jù),對(duì)各種類型的數(shù)據(jù)進(jìn)行管理。
【專利附圖】
【附圖說明】
[0068]圖1為本發(fā)明實(shí)施例的數(shù)據(jù)處理方法中數(shù)據(jù)存儲(chǔ)的流程圖;
[0069]圖2為本發(fā)明實(shí)施例的數(shù)據(jù)處理方法中數(shù)據(jù)查找的流程圖;
[0070]圖3為本發(fā)明實(shí)施例的數(shù)據(jù)處理裝置的示意圖。
【具體實(shí)施方式】
[0071]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,下文中將結(jié)合附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明。需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互任意組合。
[0072]本發(fā)明的實(shí)施方式,提供一種數(shù)據(jù)處理方法,利用該方法至少可以實(shí)現(xiàn)對(duì)于數(shù)據(jù)的存儲(chǔ),包括:
[0073]預(yù)先建立HASH表以及建立鏈表,HASH表和鏈表的建立方式可以采用預(yù)先建立空白HASH表和空白鏈表的方式,也可以采用在首次接收到待存儲(chǔ)數(shù)據(jù)時(shí)候自動(dòng)建立HASH表和鏈表的方式,本發(fā)明實(shí)施例對(duì)于HASH表和鏈表的具體預(yù)先建立方式不做限定。
[0074]當(dāng)接收到待存儲(chǔ)數(shù)據(jù)時(shí),如圖1所示,對(duì)該數(shù)據(jù)進(jìn)行存儲(chǔ),可以包括以下步驟:
[0075]步驟101:對(duì)于待存儲(chǔ)數(shù)據(jù),確定HASH地址對(duì)應(yīng)的HASH節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn);并且在所述HASH節(jié)點(diǎn)和所述鏈表節(jié)點(diǎn)內(nèi)分別建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述HASH節(jié)點(diǎn)的HASH地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系。
[0076]具體地,在本發(fā)明所述實(shí)施例中,確定HASH地址對(duì)應(yīng)的HASH節(jié)點(diǎn),可以采取現(xiàn)有技術(shù)中任何通過HASH計(jì)算獲知HASH地址的方式,典型地包括按照開放地址法確定HASH地址或者按照鏈地址法確定HASH地址,并將HASH節(jié)點(diǎn)掛在所確定的HASH地址。
[0077]其中,按照開放地址法確定HASH地址的步驟包括:
[0078]Al、從待存儲(chǔ)數(shù)據(jù)中獲取鍵值,并計(jì)算所述待存儲(chǔ)數(shù)據(jù)在HASH表的HASH地址。
[0079]具體地,根據(jù)獲取的鍵值進(jìn)行HASH計(jì)算,得到該待存儲(chǔ)數(shù)據(jù)的鍵值在HASH表中對(duì)應(yīng)的存儲(chǔ)地址,即HASH地址,從而得到該要存儲(chǔ)數(shù)據(jù)在HASH表中的索引。
[0080]本步驟中,獲取鍵值的方式可以采用現(xiàn)有技術(shù)中獲取鍵值的方式進(jìn)行鍵值的獲取。具體的HASH計(jì)算過程也不做具體限定。
[0081]B1、產(chǎn)生HASH節(jié)點(diǎn)Hn,將所述待存儲(chǔ)數(shù)據(jù)的鍵值存儲(chǔ)至所述HASH節(jié)點(diǎn)Hn上。
[0082]根據(jù)該鍵值在HASH表中對(duì)應(yīng)的存儲(chǔ)地址,即HASH地址,判斷該HASH地址是否已被占用,若所述HASH地址未被占用,為空,執(zhí)行步驟Cl,否則,執(zhí)行步驟Dl。
[0083]Cl,將所述HASH節(jié)點(diǎn)Hn添加至對(duì)應(yīng)的HASH地址上。
[0084]Dl,依次查找下一個(gè)HASH地址,直到找到空HASH地址,將所述HASH節(jié)點(diǎn)Hn添加至對(duì)應(yīng)的空HASH地址上。
[0085]而如果按照鏈地址法確定HASH地址的步驟包括:
[0086]A2、從待存儲(chǔ)數(shù)據(jù)中獲取鍵值,并計(jì)算所述待存儲(chǔ)數(shù)據(jù)在HASH表的HASH地址。
[0087]具體地,根據(jù)獲取的鍵值進(jìn)行HASH計(jì)算,得到該待存儲(chǔ)數(shù)據(jù)的鍵值在HASH表中對(duì)應(yīng)的存儲(chǔ)地址,即HASH地址,從而得到該要存儲(chǔ)數(shù)據(jù)在HASH表中的索引。
[0088]本步驟中,獲取鍵值的方式可以采用現(xiàn)有技術(shù)中獲取鍵值的方式進(jìn)行鍵值的獲取。具體的HASH計(jì)算過程也不做具體限定。
[0089]B2、產(chǎn)生HASH節(jié)點(diǎn)Hn,將所述待存儲(chǔ)數(shù)據(jù)的鍵值存儲(chǔ)至所述HASH節(jié)點(diǎn)Hn上。
[0090]根據(jù)該鍵值在HASH表中對(duì)應(yīng)的存儲(chǔ)地址,即HASH地址,判斷該HASH地址是否已被占用,若所述HASH地址未被占用,為空,執(zhí)行步驟C2,否則,執(zhí)行步驟D2。
[0091]C2、將所述HASH節(jié)點(diǎn)Hn添加至對(duì)應(yīng)的HASH地址上,作為該HASH地址的首節(jié)點(diǎn)。
[0092]D2、查找該HASH地址首節(jié)點(diǎn)下的非空閑HASH節(jié)點(diǎn),在非空閑HASH節(jié)點(diǎn)后添加所述HASH節(jié)點(diǎn)Hn。
[0093]本發(fā)明實(shí)施例不論是按照開放地址法確定HASH地址還是按照鏈地址法確定HASH地址或者本領(lǐng)域普通技術(shù)人員所公知的其它方法確定HASH地址后,HASH地址和數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址之間建立對(duì)應(yīng)關(guān)系,只要確定HASH地址就可以確定對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址。
[0094]確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),一般地可以利用通常鏈表計(jì)算的方式,包括:
[0095]從待存儲(chǔ)數(shù)據(jù)中獲取鍵值,產(chǎn)生鏈表節(jié)點(diǎn)Ln,將所述鍵值存儲(chǔ)至該鏈表節(jié)點(diǎn)Ln中,并將該鏈表節(jié)點(diǎn)Ln添加至鏈表中。
[0096]本步驟中,獲取鍵值的方式可以采用現(xiàn)有技術(shù)中獲取鍵值的方式進(jìn)行鍵值的獲取。具體的鏈表計(jì)算過程也不做具體限定。
[0097]對(duì)于此步驟101,需要說明的一點(diǎn)是,數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址可以分別對(duì)于HASH地址和鏈表地址獨(dú)立存在,即,在整個(gè)存儲(chǔ)過程中同一份待存儲(chǔ)數(shù)據(jù)可以被同時(shí)在兩個(gè)不同的物理地址處存儲(chǔ)兩次;另一種可能是,數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址只存在一個(gè),該實(shí)際物理存儲(chǔ)地址分別與HASH地址和鏈表地址建立對(duì)應(yīng)關(guān)系。
[0098]另外,數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址也沒有實(shí)際物理位置的限制,只要滿足可以建立上述對(duì)應(yīng)關(guān)系的任何物理地址都可以選用,例如,可以位于HASH節(jié)點(diǎn)中、鏈表節(jié)點(diǎn)中或者不屬于上述兩者的任何位置。
[0099]步驟102:在所述HASH節(jié)點(diǎn)中設(shè)置一鏈表指針,該鏈表指針指示:同一份待存儲(chǔ)數(shù)據(jù)在利用鏈表存儲(chǔ)時(shí)所對(duì)應(yīng)的鏈表地址;并且,在所述述鏈表中設(shè)置一 HASH指針,該HASH指針指示:同一份待存儲(chǔ)數(shù)據(jù)在利用HASH表存儲(chǔ)時(shí)所對(duì)應(yīng)的HASH地址,從而對(duì)于同一份待存儲(chǔ)數(shù)據(jù)形成HASH節(jié)點(diǎn)的HASH地址和鏈表節(jié)點(diǎn)的鏈表地址的互引。
[0100]當(dāng)然,本發(fā)明的實(shí)施例中,在HASH節(jié)點(diǎn)和鏈表節(jié)點(diǎn)中還可以設(shè)置現(xiàn)有技術(shù)中已經(jīng)存在的各種信息和指針,其名稱和作用與現(xiàn)有技術(shù)中類似,此處均不再贅述。
[0101]步驟103:更新HASH表和鏈表。
[0102]具體可以包括更新HASH表的HASH地址和鏈表的鏈表地址及相關(guān)指針信息,此處對(duì)于HASH表和鏈表的更新也與現(xiàn)有技術(shù)中的更新項(xiàng)類似,此處不再贅述。
[0103]通過上述步驟可知,本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)過程中,數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址、對(duì)應(yīng)的HASH節(jié)點(diǎn)的HASH地址、對(duì)應(yīng)的鏈表節(jié)點(diǎn)的鏈表地址之間建立了一個(gè)相互之間可以互相尋址的引用關(guān)系,此時(shí),只要知道HASH地址和鏈表地址中任何一個(gè)地址都能確定另外一個(gè)的地址信息,從而便于HASH表和鏈表功能的接合使用,能夠根據(jù)需要選擇是利用HASH表還是鏈表作為后續(xù)數(shù)據(jù)處理基礎(chǔ),對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行相關(guān)處理。此外,在上述步驟中,待存儲(chǔ)數(shù)據(jù)是存儲(chǔ)一次還是兩次,可以根據(jù)實(shí)際情況進(jìn)行選擇使用,較佳的,使用一份存儲(chǔ)數(shù)據(jù),而使所述數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與HASH節(jié)點(diǎn)的HASH地址及鏈表節(jié)點(diǎn)的鏈表地址分別對(duì)應(yīng),此時(shí),將占有較小的存儲(chǔ)空間。
[0104]在本發(fā)明進(jìn)一步的實(shí)施例中,對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)的過程可以分為無序插入存儲(chǔ)以及有序插入存儲(chǔ),對(duì)于無序插入存儲(chǔ)實(shí)際上可以理解為只需要將待存儲(chǔ)數(shù)據(jù)進(jìn)行存儲(chǔ)即可,而并不關(guān)心數(shù)據(jù)存儲(chǔ)的位置順序,只要是結(jié)合上述實(shí)施例中的步驟101-103,同時(shí)利用HASH節(jié)點(diǎn)方式和鏈表節(jié)點(diǎn)方式進(jìn)行存儲(chǔ)并進(jìn)行兩個(gè)表項(xiàng)的更新都可,而有序插入存儲(chǔ)可以借助于HASH表方式和鏈表方式兩者的優(yōu)勢(shì)結(jié)合,具體說明如下:
[0105]當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行有序插入,并且插入點(diǎn)為非中間節(jié)點(diǎn)插入時(shí),上述實(shí)施例的步驟101中,確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)具體包括:
[0106]以鏈表頭指向的鏈表頭節(jié)點(diǎn)為比較原點(diǎn),按順序掃描鏈表各節(jié)點(diǎn),如果鏈表首節(jié)點(diǎn)為空閑節(jié)點(diǎn),(示例性地,判斷該鏈表節(jié)點(diǎn)的前向指針無指向前一鏈表節(jié)點(diǎn)的鏈表地址),則其作為首個(gè)空閑鏈表節(jié)點(diǎn)被確定為用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的鏈表節(jié)點(diǎn),該鏈表節(jié)點(diǎn)的鏈表地址由系統(tǒng)分配;否則,當(dāng)有序插入為鏈表尾部插入時(shí),在掃描出的非空閑位置鏈表節(jié)點(diǎn)的鏈表后向指針無指向時(shí),在其后添加用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的新的鏈表節(jié)點(diǎn)。
[0107]可見,上述在對(duì)于數(shù)據(jù)進(jìn)行有序插入且插入點(diǎn)為非中間節(jié)點(diǎn)時(shí),可以利用鏈表方式來滿足有序的要求。
[0108]當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行有序插入,并且插入點(diǎn)為中間節(jié)點(diǎn)插入時(shí),上述實(shí)施例的步驟101中,確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)具體包括:
[0109]利用HASH表方式查找到待插入數(shù)據(jù)被存儲(chǔ)之后其之前一個(gè)已存儲(chǔ)數(shù)據(jù)的HASH地址;該HASH地址可以通過已知的已存儲(chǔ)數(shù)據(jù)的鍵值和HASH函數(shù)來確定;
[0110]根據(jù)該HASH地址的HASH節(jié)點(diǎn)中設(shè)置的鏈表指針確定該數(shù)據(jù)在所述鏈表中的鏈表地址;
[0111]基于所確定的待存儲(chǔ)數(shù)據(jù)的前一鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的指針信息以插入鏈表中間節(jié)點(diǎn)的方式確定待存儲(chǔ)數(shù)據(jù)所對(duì)應(yīng)的鏈表地址,從而確定該鏈表節(jié)點(diǎn)。
[0112]可見,在上述確定插入點(diǎn)的過程中,利用HASH地址的方式快速地確定出待存儲(chǔ)數(shù)據(jù)的前一鏈表節(jié)點(diǎn)地址,進(jìn)而結(jié)合鏈表插入的方式對(duì)待存儲(chǔ)數(shù)據(jù)進(jìn)行有序存儲(chǔ),明顯比直接通過鏈表的方式從頭結(jié)點(diǎn)開始逐一查找要更快速的確定有序插入點(diǎn)。
[0113]在本發(fā)明的另一實(shí)施例中,如圖2所示,提供的數(shù)據(jù)處理方法可以對(duì)已存儲(chǔ)數(shù)據(jù)進(jìn)行查找,當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行查找時(shí),采用HASH表方式進(jìn)行處理,這是由于HASH表的方式查找數(shù)據(jù)是直接根據(jù)關(guān)鍵字和HASH函數(shù)就能直接計(jì)算出該數(shù)據(jù)在HASH表中的HASH地址,從而根據(jù)HASH地址確定出該數(shù)據(jù)的實(shí)際物理存儲(chǔ)位置,能夠?qū)崿F(xiàn)快速定位。
[0114]具體步驟包括:
[0115]A3、從所述待查找數(shù)據(jù)中獲取鍵值,并計(jì)算所述待查找數(shù)據(jù)在HASH表的HASH地址。
[0116]當(dāng)接收到進(jìn)行查找數(shù)據(jù)的指令時(shí),根據(jù)所要查找數(shù)據(jù)的鍵值進(jìn)行HASH計(jì)算,得到對(duì)應(yīng)該鍵值的數(shù)據(jù)在HASH表中的存儲(chǔ)地址,即HASH地址。
[0117]B3、根據(jù)HASH地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址之間的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址,在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0118]本發(fā)明實(shí)施例在基于上述的查找步驟之后還包括可以實(shí)現(xiàn)查找下一個(gè)的步驟,包括:
[0119]C3、在從上述A3步驟中確定HASH地址的HASH節(jié)點(diǎn)中,根據(jù)其中設(shè)置的鏈表指針確定對(duì)應(yīng)的該數(shù)據(jù)在所述鏈表的鏈表地址。
[0120]D3、根據(jù)步驟C3中確定的鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中后向指針確定下一個(gè)鏈表節(jié)點(diǎn)的鏈表地址;
[0121]E3、基于所確定的下一個(gè)節(jié)點(diǎn)鏈表地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0122]F3、在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0123]可選的,還可以執(zhí)行步驟,G3、根據(jù)下一個(gè)鏈表節(jié)點(diǎn)中設(shè)置的哈希指針,也可以找到對(duì)應(yīng)的哈希節(jié)點(diǎn)。
[0124]可見,本發(fā)明實(shí)施例通過將HASH表和鏈表功能相結(jié)合,能夠?qū)崿F(xiàn)從任何一個(gè)數(shù)據(jù)開始的有序遍歷。
[0125]進(jìn)一步地,利用本發(fā)明實(shí)施例提供的數(shù)據(jù)處理方法,還可以根據(jù)需要對(duì)已查找到的數(shù)據(jù)進(jìn)行刪除,包括:
[0126]根據(jù)已查找到數(shù)據(jù)對(duì)應(yīng)的HASH地址,確定該HASH地址對(duì)應(yīng)的HASH節(jié)點(diǎn),以及該HASH地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0127]利用所述HASH節(jié)點(diǎn)中設(shè)置的指向?qū)?yīng)的鏈表地址的鏈表指針確定所述鏈表節(jié)點(diǎn),以及該鏈表地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0128]刪除此HASH節(jié)點(diǎn)、鏈表節(jié)點(diǎn)、以及所確定的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址中的存儲(chǔ)數(shù)據(jù);
[0129]更新HASH表和鏈表。
[0130]數(shù)據(jù)刪除時(shí),首先從HASH表中找到節(jié)點(diǎn),再?gòu)腍ASH節(jié)點(diǎn)中找到鏈表節(jié)點(diǎn)的指針,之所以速度快,明顯充分的利用了 HASH表方式查找速度快的優(yōu)點(diǎn),又借助了 HASH節(jié)點(diǎn)的HASH地址和鏈表節(jié)點(diǎn)的鏈表地址互引的特點(diǎn),快速地刪除了鏈表中的相關(guān)節(jié)點(diǎn)信息,比單純的采用鏈表進(jìn)行查找刪除定位速度更快。
[0131]本發(fā)明提供的數(shù)據(jù)處理方法將HASH表和鏈表結(jié)合在一起使用,HASH節(jié)點(diǎn)和鏈表節(jié)點(diǎn)都存在指向?qū)Ψ降闹羔?,以及與數(shù)據(jù)的實(shí)際存儲(chǔ)位置都建立有對(duì)應(yīng)關(guān)系,因此,數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址、對(duì)應(yīng)的HASH節(jié)點(diǎn)的HASH地址、對(duì)應(yīng)的鏈表節(jié)點(diǎn)的鏈表地址之間建立了一個(gè)相互之間可以互相尋址的引用關(guān)系,此時(shí),只要知道HASH地址和鏈表地址中任何一個(gè)地址都能確定另外一個(gè)的地址信息,從而便于HASH表和鏈表功能的接合使用,能夠根據(jù)需要選擇是利用HASH表還是鏈表作為后續(xù)數(shù)據(jù)處理基礎(chǔ),對(duì)存儲(chǔ)數(shù)據(jù)進(jìn)行相關(guān)處理。并且在本發(fā)明提供的數(shù)據(jù)處理方法之上,可以添加任何類型的數(shù)據(jù),對(duì)各種類型的數(shù)據(jù)進(jìn)行管理。
[0132]參考圖3所示,本發(fā)明實(shí)施例還公開了一種數(shù)據(jù)處理裝置,存儲(chǔ)單元和處理單元,
[0133]所述存儲(chǔ)單元用于存儲(chǔ)哈希表和鏈表;
[0134]所述處理單元用于預(yù)先建立哈希表和鏈表;還用于當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),對(duì)于待存儲(chǔ)數(shù)據(jù),確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn);并且用于建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述哈希節(jié)點(diǎn)的哈希地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系;還用于在該哈希節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的鏈表地址的鏈表指針;在該鏈表節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的哈希地址的哈希指針;還用于更新所述哈希表和所述鏈表。
[0135]其中,所述處理單元確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)是指:
[0136]按照開放地址法確定哈希地址或者按照鏈地址法確定哈希地址,并將哈希節(jié)點(diǎn)掛在所確定的哈希地址。
[0137]其中,所述處理單元,用于當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,且插入點(diǎn)為非中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),是指:
[0138]以鏈表頭指向的鏈表頭節(jié)點(diǎn)為比較原點(diǎn),按順序掃描鏈表各節(jié)點(diǎn),如果鏈表首節(jié)點(diǎn)為空閑節(jié)點(diǎn),則所述首節(jié)點(diǎn)作為用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的鏈表節(jié)點(diǎn);
[0139]當(dāng)有序插入為鏈表尾部插入時(shí),按順序掃描鏈表各節(jié)點(diǎn),在掃描出的非空纖維鏈表的鏈表節(jié)點(diǎn)的鏈表后向指針無指向時(shí),在其后添加用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的新的鏈表節(jié)點(diǎn)。
[0140]其中,所述處理單元,用于當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,并且插入點(diǎn)為中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),是指:
[0141]利用哈希表方式查找到所述待插入數(shù)據(jù)被存儲(chǔ)之后其之前一個(gè)已存儲(chǔ)數(shù)據(jù)的哈希地址;
[0142]根據(jù)該哈希地址的哈希節(jié)點(diǎn)中設(shè)置的鏈表指針確定該數(shù)據(jù)在所述鏈表中的鏈表地址;
[0143]基于所確定的待存儲(chǔ)數(shù)據(jù)的前一鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的指針信息以插入鏈表中間節(jié)點(diǎn)的方式確定待存儲(chǔ)數(shù)據(jù)所對(duì)應(yīng)的鏈表地址,及該鏈表地址所對(duì)應(yīng)的鏈表節(jié)點(diǎn)。
[0144]其中,所述處理單元還用于:
[0145]當(dāng)需要對(duì)已存儲(chǔ)數(shù)據(jù)進(jìn)行查找時(shí),采用哈希表查找方式確定待查找數(shù)據(jù)對(duì)應(yīng)的哈希地址;
[0146]基于所確定的哈希地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0147]在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0148]其中,所述處理單元還用于:
[0149]當(dāng)對(duì)已查找到數(shù)據(jù)查找下一個(gè)時(shí),根據(jù)已查找到的數(shù)據(jù)的哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)中的鏈表指針確定該已查找到數(shù)據(jù)對(duì)應(yīng)鏈表的鏈表地址;
[0150]利用該鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的后向指針確定所述鏈表的下一個(gè)節(jié)點(diǎn)的鏈表地址;
[0151]基于所確定的下一個(gè)節(jié)點(diǎn)的鏈表地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址;
[0152]在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
[0153]其中,所述處理單元用于當(dāng)對(duì)已查找到的數(shù)據(jù)進(jìn)行刪除時(shí),是指:
[0154]根據(jù)已查找到數(shù)據(jù)對(duì)應(yīng)的哈希地址,確定該哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),以及該哈希地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0155]利用所述哈希節(jié)點(diǎn)中設(shè)置的指向?qū)?yīng)的鏈表節(jié)點(diǎn)的鏈表指針確定所述鏈表節(jié)點(diǎn),以及該鏈表地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址;
[0156]刪除此哈希節(jié)點(diǎn)、鏈表節(jié)點(diǎn),以及所確定的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的存儲(chǔ)數(shù)據(jù);
[0157]更新哈希表和鏈表。
[0158]雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬【技術(shù)領(lǐng)域】?jī)?nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式上及細(xì)節(jié)上作任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
【權(quán)利要求】
1.一種數(shù)據(jù)處理方法,其特征在于,包括: 預(yù)先建立哈希表和鏈表; 當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),對(duì)于待存儲(chǔ)數(shù)據(jù),確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn); 并且建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述哈希節(jié)點(diǎn)的哈希地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系; 在該哈希節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的鏈表地址的鏈表指針;在該鏈表節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的哈希地址的哈希指針; 更新所述哈希表和所述鏈表。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,所述數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址為兩個(gè),每一個(gè)分別與所述哈希節(jié)點(diǎn)的哈希地址及鏈表節(jié)點(diǎn)的鏈表地址相對(duì)應(yīng)。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,所述數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址為一個(gè),與所述哈希節(jié)點(diǎn)的哈希地址及鏈表節(jié)點(diǎn)的鏈表地址分別對(duì)應(yīng)。
4.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),包括: 按照開放地址法確定哈希地址或者按照鏈地址法確定哈希地址,并將哈希節(jié)點(diǎn)掛在所確定的哈希地址。
5.根據(jù)權(quán)利要求1至4中任一所述的數(shù)據(jù)處理方法,其特征在于,當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,且插入點(diǎn)為非中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),包括: 以鏈表頭指向的鏈表頭節(jié)點(diǎn)為比較原點(diǎn),按順序掃描鏈表各節(jié)點(diǎn),如果鏈表首節(jié)點(diǎn)為空閑節(jié)點(diǎn),則所述首節(jié)點(diǎn)作為用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的鏈表節(jié)點(diǎn); 當(dāng)有序插入為鏈表尾部插入時(shí),按順序掃描鏈表各節(jié)點(diǎn),在掃描出的非空纖維鏈表的鏈表節(jié)點(diǎn)的鏈表后向指針無指向時(shí),在其后添加用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的新的鏈表節(jié)點(diǎn)。
6.根據(jù)權(quán)利要求1至4中任一所述的數(shù)據(jù)處理方法,其特征在于,當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,并且插入點(diǎn)為中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),包括: 利用哈希表方式查找到所述待插入數(shù)據(jù)被存儲(chǔ)之后其之前一個(gè)已存儲(chǔ)數(shù)據(jù)的哈希地址; 根據(jù)該哈希地址的哈希節(jié)點(diǎn)中設(shè)置的鏈表指針確定該數(shù)據(jù)在所述鏈表中的鏈表地址; 基于所確定的待存儲(chǔ)數(shù)據(jù)的前一鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的指針信息以插入鏈表中間節(jié)點(diǎn)的方式確定待存儲(chǔ)數(shù)據(jù)所對(duì)應(yīng)的鏈表地址,及該鏈表地址所對(duì)應(yīng)的鏈表節(jié)點(diǎn)。
7.根據(jù)權(quán)利要求1至3中任一所述的數(shù)據(jù)處理方法,其特征在于,還包括: 當(dāng)需要對(duì)已存儲(chǔ)數(shù)據(jù)進(jìn)行查找時(shí),采用哈希表查找方式確定待查找數(shù)據(jù)對(duì)應(yīng)的哈希地址; 基于所確定的哈希地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址; 在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)處理方法,其特征在于,還包括: 當(dāng)對(duì)已查找到數(shù)據(jù)查找下一個(gè)時(shí),根據(jù)已查找到的數(shù)據(jù)的哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)中的鏈表指針確定該已查找到數(shù)據(jù)對(duì)應(yīng)鏈表的鏈表地址; 利用該鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的后向指針確定所述鏈表的下一個(gè)節(jié)點(diǎn)的鏈表地址; 基于所確定的下一個(gè)節(jié)點(diǎn)的鏈表地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址; 在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
9.根據(jù)權(quán)利要求7所述的數(shù)據(jù)處理方法,其特征在于,當(dāng)對(duì)已查找到的數(shù)據(jù)進(jìn)行刪除時(shí),包括: 根據(jù)已查找到數(shù)據(jù)對(duì)應(yīng)的哈希地址,確定該哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),以及該哈希地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址; 利用所述哈希節(jié)點(diǎn)中設(shè)置的指向?qū)?yīng)的鏈表節(jié)點(diǎn)的鏈表指針確定所述鏈表節(jié)點(diǎn),以及該鏈表地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址; 刪除此哈希節(jié)點(diǎn)、鏈表節(jié)點(diǎn),以及所確定的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的存儲(chǔ)數(shù)據(jù); 更新哈希表和鏈表。
10.一種數(shù)據(jù)處理裝置,其特征在于,包括:存儲(chǔ)單元和處理單元, 所述存儲(chǔ)單元用于存儲(chǔ)哈希表和鏈表; 所述處理單元用于預(yù)先建立哈希表和鏈表;還用于當(dāng)需要對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí),對(duì)于待存儲(chǔ)數(shù)據(jù),確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),同時(shí)確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn);并且用于建立該數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址與所述哈希節(jié)點(diǎn)的哈希地址和所述鏈表節(jié)點(diǎn)的鏈表地址的對(duì)應(yīng)關(guān)系;還用于在該哈希節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的鏈表地址的鏈表指針;在該鏈表節(jié)點(diǎn)中設(shè)置指向?qū)?yīng)的哈希地址的哈希指針;還用于更新所述哈希表和所述鏈表。
11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)處理裝置,其特征在于,所述處理單元確定哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)是指: 按照開放地址法確定哈希地址或者按照鏈地址法確定哈希地址,并將哈希節(jié)點(diǎn)掛在所確定的哈希地址。
12.根據(jù)權(quán)利要求10或11所述的數(shù)據(jù)處理裝置,其特征在于,所述處理單元,用于當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,且插入點(diǎn)為非中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),是指: 以鏈表頭指向的鏈表頭節(jié)點(diǎn)為比較原點(diǎn),按順序掃描鏈表各節(jié)點(diǎn),如果鏈表首節(jié)點(diǎn)為空閑節(jié)點(diǎn),則所述首節(jié)點(diǎn)作為用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的鏈表節(jié)點(diǎn); 當(dāng)有序插入為鏈表尾部插入時(shí),按順序掃描鏈表各節(jié)點(diǎn),在掃描出的非空纖維鏈表的鏈表節(jié)點(diǎn)的鏈表后向指針無指向時(shí),在其后添加用于數(shù)據(jù)存儲(chǔ)的由系統(tǒng)分配鏈表地址的新的鏈表節(jié)點(diǎn)。
13.根據(jù)權(quán)利要求10或11所述的數(shù)據(jù)處理裝置,其特征在于,所述處理單元,用于當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)為有序插入,并且插入點(diǎn)為中間節(jié)點(diǎn)插入時(shí),確定鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn),是指: 利用哈希表方式查找到所述待插入數(shù)據(jù)被存儲(chǔ)之后其之前一個(gè)已存儲(chǔ)數(shù)據(jù)的哈希地 址; 根據(jù)該哈希地址的哈希節(jié)點(diǎn)中設(shè)置的鏈表指針確定該數(shù)據(jù)在所述鏈表中的鏈表地址; 基于所確定的待存儲(chǔ)數(shù)據(jù)的前一鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的指針信息以插入鏈表中間節(jié)點(diǎn)的方式確定待存儲(chǔ)數(shù)據(jù)所對(duì)應(yīng)的鏈表地址,及該鏈表地址所對(duì)應(yīng)的鏈表節(jié)點(diǎn)。
14.根據(jù)權(quán)利要求10中所述的數(shù)據(jù)處理裝置,其特征在于,所述處理單元還用于: 當(dāng)需要對(duì)已存儲(chǔ)數(shù)據(jù)進(jìn)行查找時(shí),采用哈希表查找方式確定待查找數(shù)據(jù)對(duì)應(yīng)的哈希地址; 基于所確定的哈希地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址; 在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
15.根據(jù)權(quán)利要求14所述的數(shù)據(jù)處理裝置,其特征在于,所述處理單元還用于: 當(dāng)對(duì)已查找到數(shù)據(jù)查找下一個(gè)時(shí),根據(jù)已查找到的數(shù)據(jù)的哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn)中的鏈表指針確定該已查找到數(shù)據(jù)對(duì)應(yīng)鏈表的鏈表地址; 利用該鏈表地址對(duì)應(yīng)的鏈表節(jié)點(diǎn)中的后向指針確定所述鏈表的下一個(gè)節(jié)點(diǎn)的鏈表地址; 基于所確定的下一個(gè)節(jié)點(diǎn)的鏈表地址與數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的對(duì)應(yīng)關(guān)系確定待查找數(shù)據(jù)的實(shí)際物理存儲(chǔ)地址; 在確定的實(shí)際物理存儲(chǔ)地址匹配待查找數(shù)據(jù)。
16.根據(jù)權(quán)利要求14所述的數(shù)據(jù)處理裝置,其特征在于,所述處理單元用于當(dāng)對(duì)已查找到的數(shù)據(jù)進(jìn)行刪除時(shí),是指: 根據(jù)已查找到數(shù)據(jù)對(duì)應(yīng)的哈希地址,確定該哈希地址對(duì)應(yīng)的哈希節(jié)點(diǎn),以及該哈希地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址; 利用所述哈希節(jié)點(diǎn)中設(shè)置的指向?qū)?yīng)的鏈表節(jié)點(diǎn)的鏈表指針確定所述鏈表節(jié)點(diǎn),以及該鏈表地址對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址; 刪除此哈希節(jié)點(diǎn)、鏈表節(jié)點(diǎn),以及所確定的數(shù)據(jù)存儲(chǔ)的實(shí)際物理存儲(chǔ)地址的存儲(chǔ)數(shù)據(jù); 更新哈希表和鏈表。
【文檔編號(hào)】G06F17/30GK104462549SQ201410826931
【公開日】2015年3月25日 申請(qǐng)日期:2014年12月25日 優(yōu)先權(quán)日:2014年12月25日
【發(fā)明者】郭瑞 申請(qǐng)人:瑞斯康達(dá)科技發(fā)展股份有限公司