雙向鍊錶(鍊錶)

2022-08-24 15:45:09 字數 3720 閱讀 1004

雙向鍊錶:每個節點包含指向後繼節點的指標和指向前驅節點的指標。

繼承關係圖:

實體圖:

duallinklist.h

/*

* duallinklist: 雙向鍊錶類模板

* 成員變數:

* node: 節點實體

* m_header: 頭節點

* m_length 鍊錶長度

* m_step 步進長度

* m_current 當前節點前乙個節點

* 成員函式:

* create() 申請乙個新節點

* destroy() 刪除乙個新節點

*

* duallinlist() 建構函式初始化成員變數

* insert() 引數判斷,申請新節點,尋找節點,插入節點。分四步:

* remove() 引數判斷,尋找節點,刪除節點。 分三步:

* set() 引數判斷,尋找節點,設定節點值

* get() 引數判斷,尋找節點,獲取節點值

* length() 獲取鍊錶長度

* clean() 釋放所有節點空間

* find() 返回對應值得節點下標

* position() 返回下標pos節點的上乙個的節點指標

* ~linklist() 釋放所有節點空間

** bool move() 移動游標到指定位置

* bool end() 判斷游標是否到最後

* t current() 回去當前游標節點值

* bool next() 移動步長的節點數

* bool pre() 移動步長的節點數

*/#ifndef duallinklist_h

#define duallinklist_h#include

"list.h

"#include

"exception.h

"namespace

dsl;

mutable

struct : public

topclass

m_header;

intm_length;

intm_step;

node*m_current;

virtual node* create(const t&value)

return

node;

}virtual

void destroy(node*todel)

public

: duallinklist()

bool insert(const t&obj)

bool insert(int pos, const t&obj)

node* pre_node =slider_node;

node* next_node = slider_node->next;

new_node->next = next_node; //

pre節點指向new節點,new節點指向next節點 在任何情況下是安全操作

pre_node->next =new_node;

if(pre_node == head_node) //

插入鍊錶頭部

if(pre_node != head_node) //

插入鍊錶中間

if(next_node == null) //

插入鍊錶末尾

if(next_node != null) //

插入鍊錶中間

m_length++;

}return

ret;

}bool remove(int

pos)

node* pre_node =slider_node;

node* todel =slider_node->next;

node* next_node = todel->next;

node* head_node = reinterpret_cast(&m_header);

pre_node->next = next_node; //

pre節點指向next節點 在任何情況下是安全操作

if(next_node == null) //

刪除尾節點

if(next_node != null) //

刪除中間節點和頭節點

m_length--;

if(m_current == todel) //

游標處理

destroy(todel);

}return

ret;

}bool

set(int pos, const t&obj)

slider_node->next->value =obj;

}return

ret;}t

get(int pos) const

bool

get(int pos, t& obj) const

obj = slider_node->next->value;

}return

ret;

}int find(const t& obj) const

else

}return

ret;

}int length() const

void

clean()

}bool move(int

pos)

m_current = slider_node->next;

}return

ret;

}bool

end()

t current()

else

}bool next(int step = 1

)

}return

ret;

}bool pre(int step = 1

)

}return

ret;

}~duallinklist()

};}#endif

view code

擴充套件繼承圖:

mysql 雙向鍊錶 雙向鍊錶

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

單向鍊錶和雙向鍊錶區別 雙向鍊錶

一開始確實被這個雙向鍊錶整暈了,node裡面不停套node,簡直無限套娃,讓人不知道該怎麼下手。後來看了資料結構與演算法分析這本書的 才算整明白。我把鍊錶分成了三個部分 第一部分是node.node是乙個由兩根指標,以及我們需要儲存的資料構成的結構體。這個node就是無限套娃的起源,也是鍊錶用於儲存...

鍊錶與雙向鍊錶

鍊錶與雙向鍊錶 一 特點 1 陣列列表 缺點 新增很慢 優點 查詢快 元素是整塊出現的 大小是可變的 可以刪除 2 鍊錶 優點 新增很快 刪除 缺點 查詢慢 元素是零散出現的陣列列表 鍊錶是乙個乙個的結點相連線,需要定義結點,是鏈式的資料結構。二 鍊錶實現 1 定義乙個結點 public class...