-
p←1→n
話雖如此,我希望你明白,現在有乙個迴圈雙鏈表的4個節點,每個節點的位址相當於這四個節點的位置。
每個位置儲存 3 條資訊、資料和兩個指標。
例如,節點 1 有資料,p 指標和 n 個指標,p 指標指向 4 的位置,n 指向 2 的位置,節點 2 也有乙個資料和兩個指標,其 p 指向節點 1 的位置,n 個指標指向節點 3 的位置......
在這裡,將節點的位址與節點的位置進行比較,節點的位置本質上是節點儲存在計算機記憶體上的三條資訊的位置。
-
#include
struct tnode
tnode pre;
tnode next;
int seq;
int main()
tnode pnode[5], temp;
int n = 5, i = 0;
鍊表初始化。
for (i; i < n; i++)
pnode[i].next = pnode[i+1];
if ( i != 0)
pnode[i].pre = pnode[i-1];
pnode[i].seq = i;
鍊表節點交換、交換 3 和 4
temp = pnode[3];
交換,然後重新分配 3 的正面和背面,以及 4 的正面和背面。
return 0;
-
讓我們打個比方。 將鍊表節點視為乙個人,將鍊表指標視為人手(左手是前進指標,右手是後向指標)。
非迴圈單向鍊表如下所示:幾個人排成一排,每個人的右手指向他右邊的人,最右邊的人指向空氣(null)。 如果你想找到這一行中的任何人,你必須從行的頭部(鍊表標題)開始,朝你的手指方向看。
乙個圓形的單向鍊表是這樣的:幾個人圍成乙個圓圈,每個人舉起右手指向右邊的人,這樣每個人的右手都指向乙個人(如果只有乙個人,他的右手指向自己)。 從任何乙個人開始,你可以繼續沿著手指的方向迴圈,找到每個人。
非迴圈雙鏈表如下所示:連續的多個人,每個人舉起左手指向左邊的人,每個人舉起右手指向右邊的人,然後最左邊的人的左手指向空氣(null),最右邊的人的右手指向空氣(null)。 如果你想在這一行找到乙個目標人,你可以從任何人開始,嘗試在左邊方向找到它,如果你找不到它,你可以繼續在右邊方向搜尋,直到你找到目標人。
乙個圓形的雙鏈列表看起來像這樣:幾個人圍成一圈,每個人舉起左手指向左邊的人,每個人舉起右手指向他右邊的人,這樣每個人的左右手都可以指向乙個人(如果只有乙個人, 然後他的左手和右手都指向自己)。無論您選擇左手還是右手方向,您都可以繼續迴圈以找到每個方向。
-
排序作為示例。
比如。 有 10 個數字。 從大到小排序為有序陣列 a[0] a[9]。
在這種情況下,如果要在新增第 11 個數字時保持新陣列的順序,假設該值將插入到 a[n] n<9 中;
這意味著 a[n]-a[9] 在插入前應向後移動乙個位置,並且應插入 a[n]
這樣。 還有更多操作說明。
如果使用鍊表,只需在幾個操作中插入n個節點和附近節點的資訊即可。
單向鍊表和雙向鍊表是。 插入和遍歷靈活性。
假設您在鍊表中找到了乙個節點 p。 現在你必須通過他面前的 n 個節點並列印出來。
在兩個方向上,它可以直接反轉並逐個列印。
而且是單向的。 可以生成並列印出節點 P 後面的 n 個節點。
您的程式可以提出乙個按特定標準排序的有序資料集(例如檔案),儲存在書目鍊表中,並使用檔案編號輸入。
1. 列印出檔案的其他資訊(例如日期)
2. 列印出檔案中的前 n 條資訊。
3.檔案後列印出n條資訊。
函式 2 和 3 被寫成函式,將引數作為節點指標傳入,因此在函式中您將找到鍊表的結構優勢。
-
雙鏈表的特點是,從乙個節點中,可以找到它前面的節點和它後面的節點,而不是從開始節點迴圈。
cin 的內容快取了,需要通過以下兩行清除**,必須先清除標誌,然後同步清除緩衝區。;; >>>More