linux2021
,linked list
contributed by < cymb103u >
node_t
- 題目預期 : 已知不存在 circular (環狀結構),下方程式碼嘗試對該單向 linked list 進行 Quick sort,預期依據遞增順序。
list_add_node_t
函式是將 node_t
節點加入到 *list
之前,並將 *list
原本的值更新為 node_t
指向整個串列的最前端。left = &((*left)->next)
list_concat()
function 的功用為串接兩個 list。根據給定的 implement 推測它是要走訪 left list 到 end(NULL),再將左右 list 接在一起。而給定的 input left
為 pointer to pointer to node_t
; right
則是 pointer to node_t
。
一開始以為是 *left = (*left)->next
,但這樣子實際上會改變 left
所指向的 address 裡面的值 ( pointer to node_t ),而非改變 left
所指向的 address
所以應該使用 left = &((*left)->next)
來更新 left
所指向的 address
Reference :
&right
, BBB = &left
recursion
來進行。 所以用 !*list
來檢查是否要將這個函式中止。pivot
取出後並將其 next 指向 NULL 來使它獨立right
, 比它小的則是放到 left
,所以 AAA 填入 &right
BBB 填入 &left
left
和 right
list_concat(&result, pivot); list_concat(&result, right);
在最後將分開的 list 以 list_concat()
做串接,並將*list
指向為 result 。
time(NULL)
引入時間參數,來產生 random seed.在原本的程式碼使用 recursive function 時,會需要 function call stack 來紀錄變數、return address 等資訊,並且造成 overhead 減慢速度,所以採用 iterative 來做改寫。
asd
examples/
目錄提供 quick sort 實作,請探討 Linux 的 linked list 和上述程式碼的落差,並改寫 linux-list 的 quick sort 範例,避免使用遞迴呼叫