contributed by < extrovert7986
>
依據 list.h
定義
可以得知 empty list
應該為一個 prev
與 next
都指向自己的東西
請用正式的術語,避免說「東西」。考慮到日後參加科技公司面試,你現在所紀錄的內容,可能就會在日後出現,現在就養成說專業術語的習慣。
Update:
可以得知 empty list
應該為一個prev
與 next
都指向自己的串列
上述的程式碼並為成功釋放 element_t 裡面字串的記憶體
更新為以下的形式
2/26 Update: 需要判斷 l pointer 是否為 NULL
開發過程中, 發現自己把 ele
加入 head
中(14 ~ 17), 會導致 Memory leak 如下
但如果使用 list_add
function, 就不會出現問題, 推測應該是 static analysis 的問題, 檢查 cppcheck 版本為 1.90 沒有問題, 暫時將程式碼改為以下形式
Original:
Updated:
TODO: 查閱 Cppcheck 手冊,使用其 suppression 標注。
2/26 Update: 加入判斷確認 head 與 ele 是否為 NULL
由於 q_insert_tail 中 new element 的動作可以與 q_insert_head 中共用, 所以將該部份的 code 抽出共用
並且更改 q_insert_head 如下
q_insert_tail 實做如下
2/26 Update: 加入判斷確認 head 與 ele 是否為 NULL
這兩個 function 分別用來移除(remove)串列中的第一與最後一個節點,
移除時, 並不釋放目標節點的記憶體位置,
以下 2 段程式碼分別對串列開頭(head->next)與結尾(head->prev)節點進行移除相關的動作
2/26 Update: 根據 manual, strncpy 不會幫忙寫入最後一個 byte 的 '\0', 需要由使用者補上
q_delete_mid 暫時實做如下, 透過 Floyd’s Cycle Detection Algorithm
找出佇列的中心點並且 remove
「中心點」這詞不精準,需要定義
jservImage Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
2/27 Update: 此處中心點的定義如下
在不包含 head ,長度為 n 的佇列中, 佇列中的第一個 element_t index 為 0, 最後一個 element_t index 為 n-1 的情況下, 中心點為第 個 node
原本的作法為 remove 並非 delete
改為以下 delete 作法
將每一個 node 的 next 與 prev 交換即可
以 for_each 相關巨集改寫上述程式碼。
2/28 Update:
透過 merge sort 將佇列進行排序
透過以下的 merge 函式將切開來的 2 個 list 排序並且 merge 回來
主要被 qtest 呼叫的 function
首先將最後一個 node 與 head 切開
然後在 sort 完之後, 將所有 node 的 prev link 回來外
處理最後一個 node 與 head 之間的 link
此 function 目前的演算法如下