一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)轉(zhuǎn)換技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法及裝置。
【背景技術(shù)】
[0002] 數(shù)據(jù)庫或文件中存儲(chǔ)的數(shù)據(jù)記錄集合中的多條數(shù)據(jù)記錄被讀取到內(nèi)存中,通常W 數(shù)組結(jié)構(gòu)的方式進(jìn)行存儲(chǔ)。W數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄是無規(guī)律的,若對數(shù)據(jù)記錄中的數(shù) 據(jù)進(jìn)行插入、排序、刪除等操作,就必須移動(dòng)大量的數(shù)據(jù)。
[0003] 為了方便對數(shù)據(jù)記錄中的數(shù)據(jù)進(jìn)行插入、排序、刪除等操作,常需要將無規(guī)律的數(shù) 組結(jié)構(gòu)的數(shù)據(jù)記錄轉(zhuǎn)換為有規(guī)律的樹結(jié)構(gòu)的數(shù)據(jù)記錄。現(xiàn)有技術(shù)中,通常是采用遞歸算法 的方式將數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄轉(zhuǎn)換為樹結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄。
[0004] 采用遞歸算法的方式將數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄轉(zhuǎn)換為樹結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄 的過程中,系統(tǒng)要為每一次遞歸所使用的中間數(shù)據(jù)(例如:參數(shù)、返回地址、局部變量等)分 配不同的找空間來存儲(chǔ)。例如:執(zhí)行第一次遞歸算法所使用的局部變量為:局部變量a和局 部變量b,執(zhí)行第二次遞歸算法所使用的局部變量同樣為;局部變量a和局部變量b,則系統(tǒng) 為執(zhí)行第一次遞歸算法所使用的局部變量a分配第一內(nèi)存空間,系統(tǒng)為執(zhí)行第一次遞歸算 法所使用的局部變量b分配第二內(nèi)存空間,系統(tǒng)為執(zhí)行第二次遞歸算法所使用的局部變量 a分配第Η內(nèi)存空間,系統(tǒng)為執(zhí)行第二次遞歸算法所使用的局部變量b分配第四內(nèi)存空間。
[0005] 可W看出,遞歸算法所使用的內(nèi)存空間較多;同時(shí),為上述數(shù)據(jù)分配找空間需要花 費(fèi)一定的時(shí)間,數(shù)據(jù)出找時(shí)也需要花費(fèi)一定的時(shí)間,因此,現(xiàn)有采用遞歸算法進(jìn)行數(shù)據(jù)結(jié)構(gòu) 轉(zhuǎn)換的方案所耗費(fèi)的時(shí)間也較多。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明實(shí)施例的目的在于提供一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法及裝置,W減少轉(zhuǎn)換過程中 對內(nèi)存空間的占用,并減少數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換所花費(fèi)的時(shí)間。
[0007] 為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法,包括:
[0008] 將數(shù)據(jù)庫或文件中存儲(chǔ)的數(shù)據(jù)記錄集合中的多條數(shù)據(jù)記錄讀取到內(nèi)存中,其中, 所述數(shù)據(jù)記錄在內(nèi)存中W數(shù)組結(jié)構(gòu)進(jìn)行存儲(chǔ),每一條數(shù)據(jù)記錄中至少包含有自身數(shù)據(jù)記錄 的標(biāo)識和自身數(shù)據(jù)記錄的父級數(shù)據(jù)記錄的標(biāo)識;
[0009] 依次選擇數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄中的一個(gè)數(shù)據(jù)記錄作為當(dāng)前數(shù)據(jù)記錄,在所述 數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄中查找目標(biāo)數(shù)據(jù)記錄,將當(dāng)前時(shí)刻查找目標(biāo)數(shù)據(jù)記錄所使用的 中間數(shù)據(jù)放入內(nèi)存空間中,其中,不同時(shí)刻下的查找目標(biāo)數(shù)據(jù)記錄所使用的中間數(shù)據(jù)相同 時(shí),相同的中間數(shù)據(jù)所放入的內(nèi)存空間相同,所述目標(biāo)數(shù)據(jù)記錄為除所述當(dāng)前數(shù)據(jù)記錄外 的其他數(shù)據(jù)記錄、且所述目標(biāo)數(shù)據(jù)記錄的父級數(shù)據(jù)記錄的標(biāo)識與所述當(dāng)前數(shù)據(jù)記錄的標(biāo)識 相同,如果查找到所述目標(biāo)數(shù)據(jù)記錄,則確定目標(biāo)數(shù)據(jù)記錄和當(dāng)前數(shù)據(jù)記錄的父子關(guān)系,其 中,所確定的父子關(guān)系為:目標(biāo)數(shù)據(jù)記錄作為當(dāng)前數(shù)據(jù)記錄的子數(shù)據(jù)記錄;
[0010] 根據(jù)所確定的父子關(guān)系,將各當(dāng)前數(shù)據(jù)記錄和各當(dāng)前數(shù)據(jù)記錄的子數(shù)據(jù)記錄轉(zhuǎn)換 為樹結(jié)構(gòu)的數(shù)據(jù)記錄,其中,在轉(zhuǎn)換過程中,任一當(dāng)前數(shù)據(jù)記錄所在節(jié)點(diǎn)為:該當(dāng)前數(shù)據(jù)記 錄的子數(shù)據(jù)記錄所在節(jié)點(diǎn)的父節(jié)點(diǎn)。
[0011] 較佳的,所述每一條數(shù)據(jù)記錄中還包含自身數(shù)據(jù)記錄的同級順序值,所述方法還 包括:
[0012] 獲得父級數(shù)據(jù)記錄標(biāo)識相同的各個(gè)數(shù)據(jù)記錄的同級順序值;
[0013] 根據(jù)獲得的各個(gè)數(shù)據(jù)記錄的同級順序值,對樹結(jié)構(gòu)中的父級數(shù)據(jù)記錄標(biāo)識相同的 各個(gè)數(shù)據(jù)記錄進(jìn)行排序。
[0014] 較佳的,所述方法還包括:
[0015] 獲得數(shù)據(jù)記錄的查詢條件;
[0016] 按照樹結(jié)構(gòu)的層級關(guān)系,依次選擇樹結(jié)構(gòu)中的一層數(shù)據(jù)記錄中的一個(gè)數(shù)據(jù)記錄作 為當(dāng)前數(shù)據(jù)記錄,判斷當(dāng)前數(shù)據(jù)記錄是否滿足所述查詢條件,如果滿足,則獲得當(dāng)前數(shù)據(jù)記 錄,將所獲得的當(dāng)前數(shù)據(jù)記錄作為查詢結(jié)果輸出。
[0017] 較佳的,所述方法還包括:
[0018] 獲得數(shù)據(jù)記錄的查詢條件;
[0019] 根據(jù)預(yù)設(shè)的查詢條件與數(shù)據(jù)記錄在樹結(jié)構(gòu)中層次深度的對應(yīng)關(guān)系,確定與所獲得 的查詢條件對應(yīng)的數(shù)據(jù)記錄在樹結(jié)構(gòu)中的層次深度;
[0020] 在樹結(jié)構(gòu)的所確定的層次深度的數(shù)據(jù)記錄中,查找滿足所獲得的查詢條件的數(shù)據(jù) 記錄。
[0021] 較佳的,所述方法還包括:
[0022] 獲得數(shù)據(jù)記錄的查詢條件;
[0023] 根據(jù)預(yù)設(shè)的查詢條件與數(shù)據(jù)記錄在樹結(jié)構(gòu)中路徑的對應(yīng)關(guān)系,確定與所獲得的查 詢條件對應(yīng)的數(shù)據(jù)記錄在樹結(jié)構(gòu)中的路徑;
[0024]根據(jù)所確定的路徑,在樹結(jié)構(gòu)的數(shù)據(jù)記錄中,查找滿足所獲得的查詢條件的數(shù)據(jù) 記錄。
[00巧]為達(dá)到上述目的,本發(fā)明實(shí)施例公開了一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換裝置,包括:數(shù)據(jù)記錄讀 取模塊、目標(biāo)數(shù)據(jù)記錄查找模塊、父子關(guān)系確定模塊和轉(zhuǎn)換模塊,
[0026] 數(shù)據(jù)記錄讀取模塊,用于將數(shù)據(jù)庫或文件中存儲(chǔ)的數(shù)據(jù)記錄集合中的多條數(shù)據(jù)記 錄讀取到內(nèi)存中,其中,所述數(shù)據(jù)記錄在內(nèi)存中W數(shù)組結(jié)構(gòu)進(jìn)行存儲(chǔ),每一條數(shù)據(jù)記錄中至 少包含有自身數(shù)據(jù)記錄的標(biāo)識和自身數(shù)據(jù)記錄的父級數(shù)據(jù)記錄的標(biāo)識;
[0027]目標(biāo)數(shù)據(jù)記錄查找模塊,用于依次選擇數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄中的一個(gè)數(shù)據(jù)記 錄作為當(dāng)前數(shù)據(jù)記錄,在所述數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄中查找目標(biāo)數(shù)據(jù)記錄,將當(dāng)前時(shí)刻 查找目標(biāo)數(shù)據(jù)記錄所使用的中間數(shù)據(jù)放入內(nèi)存空間中,其中,不同時(shí)刻下的查找目標(biāo)數(shù)據(jù) 記錄所使用的中間數(shù)據(jù)相同時(shí),相同的中間數(shù)據(jù)所放入的內(nèi)存空間相同,所述目標(biāo)數(shù)據(jù)記 錄為除所述當(dāng)前數(shù)據(jù)記錄外的其他數(shù)據(jù)記錄、且所述目標(biāo)數(shù)據(jù)記錄的父級數(shù)據(jù)記錄的標(biāo)識 與所述當(dāng)前數(shù)據(jù)記錄的標(biāo)識相同;
[0028] 父子關(guān)系確定模塊,用于在所述目標(biāo)數(shù)據(jù)記錄查找模塊查找到所述目標(biāo)數(shù)據(jù)記錄 時(shí),確定目標(biāo)數(shù)據(jù)記錄和當(dāng)前數(shù)據(jù)記錄的父子關(guān)系,其中,所確定的父子關(guān)系為:目標(biāo)數(shù)據(jù) 記錄作為當(dāng)前數(shù)據(jù)記錄的子數(shù)據(jù)記錄;
[0029] 轉(zhuǎn)換模塊,用于根據(jù)所述父子關(guān)系確定模塊確定的父子關(guān)系,將各當(dāng)前數(shù)據(jù)記錄 和各當(dāng)前數(shù)據(jù)記錄的子數(shù)據(jù)記錄轉(zhuǎn)換為樹結(jié)構(gòu)的數(shù)據(jù)記錄,其中,在轉(zhuǎn)換過程中,任一當(dāng)前 數(shù)據(jù)記錄所在節(jié)點(diǎn)為:該當(dāng)前數(shù)據(jù)記錄的子數(shù)據(jù)記錄所在節(jié)點(diǎn)的父節(jié)點(diǎn)。
[0030]較佳的,所述每一條數(shù)據(jù)記錄中還包含自身數(shù)據(jù)記錄的同級順序值,所述裝置還 包括:
[0031]同級順序值獲得模塊,用于獲得父級數(shù)據(jù)記錄標(biāo)識相同的各個(gè)數(shù)據(jù)記錄的同級順 序值;
[0032]排序模塊,用于根據(jù)所述同級順序值獲得模塊獲得的各個(gè)數(shù)據(jù)記錄的同級順序 值,對樹結(jié)構(gòu)中的父級數(shù)據(jù)記錄標(biāo)識相同的各個(gè)數(shù)據(jù)記錄進(jìn)行排序。
[0033]較佳的,還包括;第一查詢條件獲得模塊和第一查找模塊,
[0034]第一查詢條件獲得模塊,用于獲得數(shù)據(jù)記錄的查詢條件;
[0035]第一查找模塊,用于按照樹結(jié)構(gòu)的層級關(guān)系,依次選擇樹結(jié)構(gòu)中的一層數(shù)據(jù)記錄 中的一個(gè)數(shù)據(jù)記錄作為當(dāng)前數(shù)據(jù)記錄,判斷當(dāng)前數(shù)據(jù)記錄是否滿足所述查詢條件,如果滿 足,則獲得當(dāng)前數(shù)據(jù)記錄,將所獲得的當(dāng)前數(shù)據(jù)記錄作為查詢結(jié)果輸出。
[0036]較佳的,還包括:第二查詢條件獲得模塊,層次深度確定模塊和第二查找模塊,
[0037]第二查詢條件獲得模塊,用于獲得數(shù)據(jù)記錄的查詢條件;
[0038]層次深度確定模塊,用于根據(jù)預(yù)設(shè)的查詢條件與數(shù)據(jù)記錄在樹結(jié)構(gòu)中層次深度的 對應(yīng)關(guān)系,確定與所獲得的查詢條件對應(yīng)的數(shù)據(jù)記錄在樹結(jié)構(gòu)中的層次深度;
[0039]第二查找模塊,用于在樹結(jié)構(gòu)中、層次深度確定模塊所確定的層次深度的數(shù)據(jù)記 錄中,查找滿足所獲得的查詢條件的數(shù)據(jù)記錄。
[0040]較佳的,還包括:第Η查詢條件獲得模塊、路徑確定模塊和第Η查找模塊,
[0041]第Η查詢條件獲得模塊,用于獲得數(shù)據(jù)記錄的查詢條件;
[0042]路徑確定模塊,用于根據(jù)預(yù)設(shè)的查詢條件與數(shù)據(jù)記錄在樹結(jié)構(gòu)中路徑的對應(yīng)關(guān) 系,確定與所獲得的查詢條件對應(yīng)的數(shù)據(jù)記錄在樹結(jié)構(gòu)中的路徑;
[0043]第Η查找模塊,用于根據(jù)路徑確定模塊所確定的路徑,在樹結(jié)構(gòu)的數(shù)據(jù)記錄中,查 找滿足所獲得的查詢條件的數(shù)據(jù)記錄。
[0044]由上述的技術(shù)方案可見,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法及裝置,將 數(shù)據(jù)庫或文件中存儲(chǔ)的數(shù)據(jù)記錄集合中的多條數(shù)據(jù)記錄讀取到內(nèi)存中;依次選擇數(shù)組結(jié)構(gòu) 存儲(chǔ)的數(shù)據(jù)記錄中的一個(gè)數(shù)據(jù)記錄作為當(dāng)前數(shù)據(jù)記錄,在所述數(shù)組結(jié)構(gòu)存儲(chǔ)的數(shù)據(jù)記錄中 查找目標(biāo)數(shù)據(jù)記錄,將當(dāng)前時(shí)刻查找目標(biāo)數(shù)據(jù)記錄所使用的中間數(shù)據(jù)放入內(nèi)存空間中,不 同時(shí)刻下的查找目標(biāo)數(shù)據(jù)記錄所使用的中間數(shù)據(jù)相同時(shí),相同的中間數(shù)據(jù)所放入的內(nèi)存空 間相同,如果查找到所述目標(biāo)數(shù)據(jù)記錄,則確定目標(biāo)數(shù)據(jù)記錄和當(dāng)前數(shù)據(jù)記錄的父子關(guān)系; 根據(jù)所確定的父子關(guān)系,將各當(dāng)前數(shù)據(jù)記錄和各當(dāng)前數(shù)據(jù)記錄的子數(shù)據(jù)記錄轉(zhuǎn)換為樹結(jié)構(gòu) 的數(shù)據(jù)記錄。
[0045]本發(fā)明在進(jìn)行數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換的過程中,無需對數(shù)據(jù)進(jìn)行入找操作和出找操作,節(jié) 省了時(shí)間。同時(shí),由于本發(fā)明不同時(shí)刻下的查找目標(biāo)數(shù)據(jù)記錄所使用的中間數(shù)據(jù)相同時(shí), 相同的中間數(shù)據(jù)所放入的內(nèi)存空間相同,因此只需為相同的中間數(shù)據(jù)分配一塊內(nèi)存空間即 可,節(jié)省了內(nèi)存空間的占用。
【附圖說明】
[0046]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可W 根據(jù)送些附圖獲得其他的附圖。
[0047]圖1為本發(fā)明實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法的第一種流程示意圖;
[0048] 圖2為本發(fā)明實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法的第二種流程示意圖;
[0049]圖3為本發(fā)明實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法的第Η種流程示意圖;
[0050] 圖4為本發(fā)明實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法的第四種流程示意圖;
[0051] 圖5為本發(fā)明實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換方法的第五種流程示意圖;
[0052] 圖6為本發(fā)明實(shí)施例提供的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換裝置的第一種結(jié)構(gòu)示意圖;
[0053]圖7為本