雙向鍊錶及其用法

2021-07-01 20:22:00 字數 1493 閱讀 2017

一、雙向鍊錶的定義

雙向鍊錶也是鍊錶的一種,它每個資料結點中都有兩個結點,分別指向其直接前驅和直接後繼。所以我們從雙向鍊錶的任意乙個結點開始都可以很方便的訪問其前驅元素和後繼元素。

二、雙向鍊錶的儲存結構

雙向鍊錶也是採用的鏈式儲存結構,它與單鏈表的區別就是每個資料結點中多了乙個指向前驅元素的指標域 ,

它的儲存結構如下圖:

當雙向鍊錶只有乙個結點的時候它的儲存結構如下:

三、雙向鍊錶的實現與操作

因為在雙向鍊錶中,我們可以通過任意乙個結點訪問到其前驅元素和後繼元素,時間複雜度為o(1),所以雙向鍊錶是十分方便的,我們通常構建鍊錶也會選擇去構建雙向鍊錶。

接下來看一下雙向鍊錶的實現與操作:

#include#include#includetypedef struct double_list

double_list;

double_list *createlist() //建立有n個元素的雙向鍊錶 並輸入元素

return head;

}//遍歷並且輸出這些元素

void printlist(double_list *head)

printf("\n");

}//得到現在雙向鍊錶中的元素的個數

int lengthlist(double_list *head)

return coun;

}//在第i個元素之前插入資料data

void insertlist_f(double_list *head, int i, int data)

//刪除第i個位置的元素

void deletelist_i(double_list *head, int i)

//刪除值為x的元素

void deletelist_x(double_list *head, int x)

else

p = p->next;

}//對雙向鍊錶進行排序

void sortlist(double_list *head) //公升序

}}int main()

對於雙向鍊錶的遍歷來說我只給出了前序遍歷的**,沒有寫後序遍歷的**,這其實是差不多的,但是因為雙向鍊錶可以進行兩個方向的遍歷,這給我們帶來了很大的方便。

雙向鍊錶及其各種操作

什麼是雙向鍊錶 我們都知道單向鍊錶中的每乙個節點有且只有乙個指標,這個指標就是用來指向下乙個節點的,單向鍊錶顧名思義就是鍊錶方向是單方向的,而本文要介紹的雙向鍊錶就是鍊錶方向是雙方向的,也就是雙向鍊錶中的每乙個節點有兩個指標,乙個指標用來指向上乙個節點 前驅 另乙個指標用指向下乙個節點 後繼 雙向鍊...

雙向鍊錶及其相關操作

雙向迴圈鍊錶 每乙個結點都有兩個指標,乙個前驅乙個後繼,頭結點的前驅指向最後乙個結點,最後乙個結點的後繼指向頭結點 結構體定義 typedef int type 結點定義 typedef struct nodenode 鍊錶定義 typedef struct listlist 建立乙個結點 node...

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...