RT thread 雙鏈表說明

2021-09-12 10:44:26 字數 1620 閱讀 5059

說雙向鍊錶之前先簡單說下單鏈表

資料域引用域

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...