復合物件解析為XML的順序表演算法

2021-08-30 20:13:17 字數 783 閱讀 3861

上兩個圖,說明復合物件的關係以及xml表示的方法:

簡單來說就是root中有objecta跟objectb,objectb中包含objectc,objectc中又包含了objecta,即引用了objecta。

注意看objectc這個節點中,reference屬性使用相對路徑表示出了objecta的位置。

大家從上面兩個圖應該了解這是個什麼情況了。

那麼先說一下樹形結構的解決方案,當然是構建多叉樹,然後開始對樹進行遍歷,效率是很低的~~

那麼再說下我的解決方案:

看圖:

root伴隨著乙個長度為1的陣列,第乙個元素為0,表示這是根節點,objecta伴隨著長度為2的陣列,表示它是root的第乙個節點,objectb和objectc應該也很好理解了吧。

這樣,當把root解析為xml時,發現objectc引用了objecta,那麼怎樣獲得reference的值呢?因為這是乙個順序表,所以我們去遍歷它。首先取得objecta的標誌性陣列那麼先查詢陣列第乙個元素為0的元素,在絕對路徑上加上「root」,得到「/root」,然後開始搜尋第二個元素為1的節點,找到後加到絕對路徑上就得到「/root/objecta」了。

復合物件解析為XML的順序表演算法的改進

上次的演算法採用的演算法,不適合生成相對路徑,另乙個的弊端在於,如果這個解析樹太過龐大,那麼用來表示路徑的陣列就越龐大,占用了大量的空間,針對這一點,我又進行了改進,從而獲得了乙個使用空間較少的演算法。此演算法也可容易的生成相對路徑。看例子,這次順序表的結構發生了變化 本次在儲存結構上發生了變化,最...

順序表的合併算

將兩個有序順序表合併為乙個新的有序順序表 include include define maxsize 20 typedef struct sqlist 鍊錶初始化 intlistinit sqlist l l length 0 return1 void printlist sqlist l pri...

C 物件的構造順序解析

include using namespace std class test test test const test obj void operator const test obj private int ma int main 以上 的執行結果是 當我們使用test t1 test 50 拷貝...