C 使用單指標Struct實現雙向鍊錶

2021-08-03 12:48:11 字數 1092 閱讀 1884

數學基礎

離散數學中的異或運算 a⊕b,具有以下性質

單指標雙向鍊錶邏輯結構

單指標雙向鍊錶則需要採用異或鍊錶的方式,下圖是乙個具有五個節點的雙向鍊錶的邏輯結構示意圖,沒有頭結點。

其中每個節點的後半部分表示指標域,儲存了它的前驅節點的指標與後繼借點的指標的異或值。我們從最左邊的節點開始遍歷,就可以使用 0 ^ (0^p1) = p1 來得到下乙個節點的指標(請注意,此處 0^p1 是乙個整體,直接從節點的指標域中獲得的)。繼續往右走,又可以使用 p0 ^ (p0^p3) 來得到 p3,並以此類推。從右節點開始遍歷也是同理(如:(p4^0) ^ 0 = p4)。

因此,按照上面的資料結構,就可以只使用乙個指標域來實現雙向鍊錶了。

示例**

#include

using namespace std;

struct node ;

void main()

else

}tail->ptr = (uintptr_t)prepre ^ (uintptr_t)null;

//正向遍歷

//最後乙個元素為tail

cout<<

"正向"

<

pre =

null;

node* current = head;

while (current !=

null

&& current != tail)

cout

"\n";

//反向遍歷

//最後乙個元素為head

cout<<

"反向"

<

pre =

null;

current = tail;

while (current !=

null

&& current != head)

cout

"\n";

getchar();

}

最終輸出為

C 語言指標,單指標和雙指標的學習

學c語言初期,相信大家都會被指標所困擾,不知道怎麼去理解指標,本人在經過深入學習指標後終於理解單指標和雙指標的相關知識,現整理給大家,同時也是給自己學筆記,以免後面忘記了。先從單指標說起 首先我們先糾正一下,我前面一直說 指標 這樣不容易理解,我建議大家包括我自己,下次多在 指標 後面加上 型別 這...

C語言雙指標

雙指標又叫二重指標,常常用於解決在不開闢額外記憶體空間的情況下交換陣列或字串中元素的相對位置的問題。這些是我目前為止遇到的雙指標用法 1.可以用來原地修改字串。兩個指標的運動方向相反 編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。輸入 h e l l o 輸出...

C 結構Struct與指標,函式

指標傳遞,不返回值 include include struct student scores intgrades void changeinfo struct student p void displayinfo struct student s intmain 7 一次性全部賦值,如果缺少,會有...