contributed by < jychen0611
>
結構體
以下分別為取得串列尾節點和取得串列長度之函式。
因為 left
為節點指標的指標,(*left)
表指向該節點的指標,依據判斷可知 AAAA 應填入(*left)->next
,而 left = &((*left)->next)
表left
指向隔壁節點指標的位址。
其函式回傳為指向串列尾端節點的指標。
同理,BBBB 應填入(*left)->next
,表left
指向隔壁節點指標的位址。
以下是運用 Optimized QuickSort — C Implementation (Non-Recursive) 所實作非遞迴 (non-recursive; iterative) 的快速排序法程式碼。
其流程為
串列分割 i
之兩端,當 L R 尚未交會則進行內部排序p -> next
list_tail(left)
, EEEE 應填入 list_tail(right)
串列分割 i+2
之內部排序(也就是先排右邊)以下為 Timsort merge 過程。
由於 tail 為指標的指標,AAAA 應填入 &head
,表指標 head 的位址。
同理, BBBB 應該填入 &a->next
, CCCC 應該填入 &b->next
表指向下個節點指標的位址(更新 tail)。
以下為補上雙向鏈結串列中的 prev
之函式,過程如下:
next
指向 headlist
逐步走訪整個串列,將 link 所指節點的 prev
指向 tail 。next
指向 head , head 的 prev
指向 tail 之動作由上述可知 DDDD 為 tail->next
,EEEE 為 head->prev
下面是 timsort 程式碼。其過程如下 :