資料結構 雙端鍊錶和雙向鍊錶

2021-08-31 13:58:11 字數 3052 閱讀 4340

雙端鍊錶:

一、什麼是雙端鍊錶。

鍊錶中儲存著對最後乙個鏈節點引用的鍊錶。

二、從頭部進行插入

要對鍊錶進行判斷,如果為空則設定尾節點為新新增的節點。

三、從尾部進行插入

如果鍊錶為空,則直接設定頭結點為新新增的節點,否則設定尾節點的後乙個節點為新新增節點。

四、從頭部進行刪除

判斷頭結點是否為下乙個結點,如果沒有則設定為結點為null。

雙端鍊錶的好處就是可以從尾結點進行新增

public

class

node

public

node

(long data)

public

void

display()

}

基本方法:

public

class

firstlastlinklist

/** * 插入乙個結點,在頭結點後進行插入

*/public

void

insertfirst

(long value)

node.next = first;

first = node;

}/**

* 插入乙個結點,從尾結點進行插入

*/public

void

insertlast

(long value)

else

last = node;

}/**

* 刪除乙個結點,在頭結點後進行刪除

*/public node deletefirst()

first = tmp.next;

return tmp;

}/**

* 顯示方法

*/public

void

display()

system.out.

println()

;}/** * 查詢方法

*/public node find

(long value)

current = current.next;

}return current;

}/**

* 刪除方法,根據資料域來進行刪除

*/public node delete

(long value)

previous = current;

current = current.next;}if

(current == first)

else

return current;

}/**

* 判斷是否為空

*/public

boolean

isempty()

}

雙向鍊錶

一、什麼是雙向量表。

每個結點除了儲存了對下乙個結點的引用,同時還儲存著對前乙個結點的引用。

二、從頭部進行插入

要對鍊錶進行判斷,如果為空則設定尾結點為新新增的節點。如果不為空,還需要設定頭結點的前乙個結點為新新增的結點。

三、從尾部進行插入

如果鍊錶為空,則直接設定頭結點為新新增的結點,否則設定尾結點的後乙個結點為新新增節點。同時設定新新增的結點的前乙個節點為尾結點。

四、從頭部進行刪除

判斷頭結點是否有下乙個結點,如果沒有則設定為結點為null。否則設定頭結點的下乙個結點為previous為null。

五、從尾部進行刪除

如果頭結點後沒有其他節點,則設定尾節點為null。否則設定尾節點前乙個結點的next為null。設定尾結點為其前乙個節點。

六、刪除方法。

不需要再使用乙個臨時的指標域。

package study.datastructure.firstnodelast;

/* * 雙向鍊錶

*/public

class

doublelinklist

/** * 插入乙個結點,在頭結點後進行插入

*/public

void

insertfirst

(long value)

else

node.next = first;

first = node;

}/**

* 插入乙個結點,從尾結點進行插入

*/public

void

insertlast

(long value)

else

last = node;

}/**

* 刪除乙個結點,在頭結點後進行刪除

*/public node deletefirst()

else

first = tmp.next;

return tmp;

}/**

* 刪除結點,從尾部進行刪除

*/public node deletelast()

else

last = last.previous;

return last;

}/**

* 顯示方法

*/public

void

display()

system.out.

println()

;}/** * 查詢方法

*/public node find

(long value)

current = current.next;

}return current;

}/**

* 刪除方法,根據資料域來進行刪除

*/public node delete

(long value)

current = current.next;}if

(current == first)

else

return current;

}/**

* 判斷是否為空

*/public

boolean

isempty()

}

資料結構和演算法 5 2 雙端鍊錶 雙向鍊錶

單鏈表要想在表尾插入乙個鏈結點,需要遍歷整個鍊錶直到表尾,再進行插入,效率很低 雙端鍊錶增加了對錶尾鏈結點的引用,可以直接在表尾插入鏈結點 下面是雙端鍊錶的實現 雙端鍊錶的使用 之前有介紹用陣列實現佇列,下面提供乙個用雙端鍊錶實現的佇列,其中queue是佇列的基類,若有疑惑,可以先看一下前面講佇列的...

雙端鍊錶 雙向鍊錶(java)

1 雙端鍊錶 2 測試雙端鍊錶 3 雙向鍊錶 4 測試雙向鍊錶 1 雙端鍊錶 package com.cwq.ch05 import com.cwq.ch04.node 雙端鍊錶,將資料串起來 author carpoor date 2019年1月29日 public class myfirstla...

資料結構 鍊錶 雙向鍊錶

注意typedef的定義結構,以及dinklist的資料型別 typedef struct dnode dnode,dinklist 注意插入第乙個結點時,prior指標的空指向問題 if l next null 若l後繼結點為空 則省略該步驟 l next prior p 基本 頭插法建立雙向鍊錶...