單鏈表只能方便的進行單向查詢,而雙鏈表可以方便的進行雙向查詢,但由於增加了乙個指標域,使得其儲存密度進一步降低。
有一種方法(基於異或運算的對稱表)可以使用乙個指標域就能夠方便的進行雙向查詢,它是一種用時間換取空間的折中策略。
異或運算回顧
3^5=6
011 ^101=110
x,y,x^y
x=y(xy)
y=x(xy)
儲存結構定義
typedef struct lnode
lnode,*linklnode;
typedef struct
linklist;
定義結點的link域為前驅位址和後繼位址的異或
開始結點的前驅位址和終端後繼位址均為null,整個鍊錶不再需要頭結點。
基於異或的對稱表在c語言中的實現
異或運算 有趣的異或運算
異或運算可以看做是沒有進製的加法,按位異或運算,相同為0,不同為1。0 0 0 0 1 1 1 0 1 1 1 0 觀察運算結果我們發現,當與0做異或運算時,另一元值不變 而與1做異或運算時,另一元值值取反。根據以上異或運算的特徵,可以有以下用途,除方便直觀外,運算效能也更加優異。1 變數重置0 假...
(與運算) (或運算) (異或運算)
即 兩個運算元同為 1 的時候為1 0 0 0 1 0 1 0 1 1 1 1 1 即 兩個運算元中至少有乙個為 1 的時候為1 0 0 0 0 1 1 1 0 1 1 1 0 即 兩個運算元不同的時候為1 運算規則 1 0 0 1 即 對乙個二進位制數按位取反,即將0變1,1變0。將乙個運算物件的...
與運算( ) 或運算( ) 異或運算( )
預算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩個同時為1,結果為1,否則為0 例如 3 5 十進位制3轉為二進位制的3 0000 0011 十進位制5轉為二進位制的5 0000 0101 結果 0000 0001 轉為十進位制 1 即 3 5 1 運算規則 0 0 0 0 1 1 ...