資料結構與演算法 雙鏈表

2021-10-09 21:10:58 字數 3599 閱讀 6887

刪除結點

遍歷元素

雙鏈表的高階操作

與單鏈表一樣,我還是建議用過掌握基礎操作來拼湊成大的操作。

單鏈表指標域只有乙個next指標,指向下乙個結點,這就導致了它只能從前往後訪問。為了彌補這一缺陷,我們可以往指標域裡再加入乙個指標prior,用於指向前面的結點,這樣就可以實現雙向訪問了:

與單鏈表相似,建立雙鏈表其實就是建立頭指標,我們還是將初始化寫在下面這個initlist函式裡:

void

initlist

(node *

&head)

在此基礎上,我們要定義乙個雙鏈表只需要:

node *head;

initlist

(head)

;

在某個結點後插入元素

雖然雙鏈表的prior指標使得逆向操作成為可能,但習慣期間,還是經常在某個節點之後插入新的結點,比如我要在p結點之後插入q結點,插入過程是這樣的:

)//判斷p是不是尾結點

p->next-

>prior=q;

//2q-

>prior=p;

//3p-

>next=q;

//4在某個結點前插入元素

畢竟是雙鏈表,思來想去還是決定把這個也寫一下。在結點nxt之前插入p結點:

記憶方法

發現規律沒有?無論是往前插入結點,還是往後插入結點,都是只能用到待插入結點q和兩個結點中的乙個p,因此,我們稱另乙個沒被用到的結點為打醬油的結點(一本正經)

無論是哪種插法,打醬油的結點總是最先被針對。因此我們只要再記住,每次qpq醬油結點連線的過程中,都是q先動的手,就能順利地記住連線順序。

在頭部插入元素s

s-

>next=head-

>next;

if(head-

>next!=

null

) head-

>next-

>prior=s;

s->prior=head;

head-

>next=s;

在尾部插入元素s
s-

>data=a[i]

;tail-

>next=s;

s->prior=tc;

tail=s;

刪除結點p的時候,我們可以將p前面的結點用p->prior表示,p後面的結點用p->next表示,也就是說**裡可以只有p

if

(p->prior!=

null

)//判斷p是不是第乙個

p->prior-

>next=p-

>next;

//1if

(p->next!=

null

)//判斷p是不是最後乙個

p->next-

>prior=p-

>prior;

//2delete p;

ps.這裡的1和2可以換順序

與單鏈表幾乎沒啥區別

void

findbro

(node *head)

}

求長度
int

getlength

(node *head)

return count;

}

基本都和單鏈表一樣,只是在基本操作上有細微差別。只要把基本操作一換,大框架保持原樣就好啦

void

output

(node *head)

cout<

}

void

deleelem

(node *

&head,

int i)

void

createlist_head

(node *

&head,

int a,

int len)

}

void

createlist_tail

(node *

&head,

int a,

int len)

tc->next=

null

;}

void

deleelem

(node *

&head,

int i)

void

inselem

(node *

&head,

int value,

int i)

資料結構 雙鏈表

typedef struct nodenode 雙鏈表的根節點的bwd指標指向雙鏈表的最後乙個節點,fwd指標指向雙鏈表的第乙個節點,雙鏈表的value欄位為空 以下程式是將乙個值插入到乙個有序的雙鏈表中,如果鍊錶中已經有和該值相同的節點則不插入 include include typedef st...

資料結構 雙鏈表

目標 掌握雙鏈表的資料結構 來看看什麼是雙鏈表吧 雙鏈表與單鏈表的區別,單鏈表是單項的 而雙鏈表是有左右的 題目acwing 827 實現乙個雙鏈表,雙鏈表初始為空,支援5種操作 1 在最左側插入乙個數 2 在最右側插入乙個數 3 將第k個插入的數刪除 4 在第k個插入的數左側插入乙個數 5 在第k...

資料結構 雙鏈表

單鏈表結點中只有乙個只指向後繼的指標,使得單鏈表只能從頭結點開始一次順序的先後遍歷。要訪問某個結點的前驅結點 插入刪除操作時 只能從頭開始遍歷,訪問後繼節點的時間複雜度為o 1 訪問前驅結點的時間複雜度為o n 為了克服單鏈表的上述缺點,引入了雙鏈表,雙鏈表結點中有兩個指標prior 和 next,...