雙向鍊錶:每個節點包含指向後繼節點的指標和指向前驅節點的指標。
繼承關係圖:
實體圖:
duallinklist.h
/*view code* 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
擴充套件繼承圖:
mysql 雙向鍊錶 雙向鍊錶
雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...
單向鍊錶和雙向鍊錶區別 雙向鍊錶
一開始確實被這個雙向鍊錶整暈了,node裡面不停套node,簡直無限套娃,讓人不知道該怎麼下手。後來看了資料結構與演算法分析這本書的 才算整明白。我把鍊錶分成了三個部分 第一部分是node.node是乙個由兩根指標,以及我們需要儲存的資料構成的結構體。這個node就是無限套娃的起源,也是鍊錶用於儲存...
鍊錶與雙向鍊錶
鍊錶與雙向鍊錶 一 特點 1 陣列列表 缺點 新增很慢 優點 查詢快 元素是整塊出現的 大小是可變的 可以刪除 2 鍊錶 優點 新增很快 刪除 缺點 查詢慢 元素是零散出現的陣列列表 鍊錶是乙個乙個的結點相連線,需要定義結點,是鏈式的資料結構。二 鍊錶實現 1 定義乙個結點 public class...