說雙向鍊錶之前先簡單說下單鏈表
資料域引用域
data
next
線性表(a 1 ,a 2 ,a 3 ,a 4 ,a 5 ,a 6 )對應的鏈式儲存結構示意圖。prev
儲存位址
data
next
709900
a4600
800900
a2709
900600
a5600
800800
a1900
900709
a3900
雙向鍊錶結點的定義與單鏈表的結點的定義很相似,只是雙向鍊錶多了乙個字段 prev。
引用域資料域
引用域prev
data
next
儲存位址data
next
900a4
600900
a2709
600a5
null
800a1
900709
a3900
struct rt_list_node
;typedef struct rt_list_node rt_list_t; /**< type for lists. */
rt_inline void rt_list_init(rt_list_t *l)
/**
* @brief insert a node after a list
* * @param l list to insert it
* @param n new node to be inserted
*/rt_inline void
rt_list_insert_after
(rt_list_t *l, rt_list_t *n)
/**
* @brief insert a node before a list
* * @param n new node to be inserted
* @param l list to insert it
*/rt_inline void rt_list_insert_before(rt_list_t *l, rt_list_t *n)
/**
* @brief remove node from list.
* @param n the node to remove from the list.
*/rt_inline void rt_list_remove(rt_list_t *n)
/**
* @brief tests whether a list is empty
* @param l the list to test.
*/rt_inline int rt_list_isempty(const rt_list_t *l)
單鏈表 雙鏈表
實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k個插入的數後面的數 3 在第k個插入的數後插入乙個數 現在要對該鍊錶進行m次操作,進行完所有操作後,從頭到尾輸出整個鍊錶。注意 題目中第k個插入的數並不是指當前鍊錶的第k個數。例如操作過程中一共插入了n個數,則按照插入的...
單鏈表和雙鏈表
單鏈表 單鏈表只有乙個指向下一結點的指標,也就是只能next 雙鏈表 雙鏈表除了有乙個指向下一結點的指標外,還有乙個指向前一結點的指標,可以通過prev 快速找到前一結點,顧名思義,單鏈表只能單向讀取 為什麼市場上單鏈表的使用多餘雙鏈表呢?從儲存結構來看,每個雙鏈表的節點要比單鏈表的節點多乙個指標,...
單鏈表和雙鏈表
單鏈表 是乙個node,儲存當前物件,並指向下乙個next,插入在第一位node,next指向原來的first 單鏈表 只儲存第乙個node的引用,雙端鍊錶 儲存兩個node的引用,第乙個和最後乙個node,可以從第乙個插入,也可以從最後乙個插入,也可以從頭部和尾部刪除 鏈結點,相當於是車廂 pub...