鍊錶內容的補充3 迴圈鍊錶與雙向鍊錶

2021-08-21 21:37:29 字數 2418 閱讀 9949

1.迴圈鍊錶

與單鏈表的整體結構類似,迴圈鍊錶也是一種鏈式儲存的結構,不同的是:迴圈鍊錶要求表中最後乙個結點的指標指向鍊錶的頭結點,達到乙個迴圈的效果。由此可以得出,遍歷迴圈鍊錶指標資料域的語句是指標所指結點或指標所指結點的後繼結點是否等於頭結點(或指標是否等於頭指標)。

除了鍊錶結構不同以外,其餘的基本操作與單鏈表幾乎一致,包括新建元素,增加元素,刪除元素等,示意圖如下所示:

2.雙向鍊錶

不同於普通的單鏈表,雙向鍊錶設定了兩個指標prior與next,prior指標方便直接指示前驅,而next指標仍然指示後繼節點。設定兩個指標最直觀的優勢在於,方便了鍊錶的雙向訪問,即不需要通過計算for迴圈的次數來訪問結點的前驅,而僅需要p->prior語句即可。

(1)雙向鍊錶結點的基本結構

與單鏈表結點的結構類似,雙向鍊錶的結點結構也具有資料域與指標域,資料域由int型別的變數data進行表示,該型別也可以是string,char等其他型別,不同的是,指標域需要定義兩個指標,分別指示直接前驅結點以及直接後繼結點,通過前驅指標域的設立可以直接訪問前驅結點。雙向鍊錶頭尾結點的前驅與後繼也值得注意:頭結點的前驅是鍊錶的尾結點,後繼則是位序為1的普通節點,而尾結點的前驅結點是其邏輯位序上的前驅結點,相對地,其後繼節點不為null,是整個雙向鍊錶的頭結點。結點的結構**以及示意圖如下:

雙向煉表示意圖

在定義了基本結構後,按單鏈表的學習思路,需要完善雙向鍊錶結點的不同操作。雙向鍊錶的搜尋結點,定位結點,求鍊錶長度操作與單鏈表相同,不同之處主要在於插入以及刪除操作。

(2)雙向鍊錶的初始化操作

雙向鍊錶的初始化操作較為簡單,按雙向鍊錶的結點結構來看。主要步驟如下:1)定義乙個dulinklist型別的頭指標head,使用malloc語句為其分配空間    2)head指標指向的結點前驅結點定義為自身,後繼結點定義為自身(如果沒有該初始化的步驟會導致無法進行後續的插入結點工作)    初始化操作**如下:

dulinklist init()

(3)雙向鍊錶的結點插入操作

與單鏈表的插入操作類似,首先明確操作的整體過程,即在第i個結點之前插入全新的結點,i=1,2,....n,在整體過程了解之後,基本思路如下:(1)定義頭指標head,雙向鍊錶結點的指標p,先由頭指標開始向後移動i次,尋找到位序為i+1的結點 ,以指標p指向該段記憶體 (2)定義int 型的變數為e,用乙個全新的指標s表示該結點,利用malloc語句,新建乙個s指標指向的結點。該節點的資料域賦值為e。   (3)s結點的前驅結點賦值為p結點的前驅結點,p前驅結點的後繼結點指向s,同樣地,s結點的後繼結點賦為p,p結點的前驅結點記作s  在位序為i的結點之前插入結點的操作基本**如下:

void insert(dulinklist head,int i,int e)

s=(dulnode*)malloc(sizeof(dulnode));

s->data=e;

p->prior->next=s;

s->prior=p->prior;

s->next=p;

p->prior=s;

}

實現插入功能的案例**如下:

int main()

for(int l=1;l<=m;l++)

p=head->next;

while(p!=head)

return 0;

}

(4)雙向鍊錶結點的刪除操作

與雙向鍊錶插入結點的操作類似,先明確刪除結點的整體過程,即定義乙個指標p,p初始化為頭指標,通過for迴圈使p指向位序為i的結點,從而實現接下來的指標移動步驟。刪除單個結點的基本思路如下:1)定義int型別的變數為e,將結點資料域的值賦給該變數,輸出該值  2)將p指向結點的前驅結點的後繼結點賦值為p的後繼結點,p的後繼結點的前驅結點賦值為p的前驅結點 3)釋放指標p所指結點p的空間,完成結點的刪除   具體**如下:

void delete(dulinklist head,int e,int i)

e=p->data;

coutnext=p->next;

p->next->prior=p->prior;

free(p);

}

迴圈鍊錶與雙向鍊錶

迴圈鍊錶 最後節點的next指標不指向null,直接改為指向首節點就行。迴圈列表不需要頭節點 include include includetypedef struct student lstudent,lpstudent void initlink lpstudent phead ptr next...

迴圈鍊錶,雙向鍊錶

迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...

鍊錶 雙向迴圈鍊錶

雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...