ontributed by < OWaitsInTime
>
說好的進度呢?
最開始的想法是用指標記錄上一個節點
queue.h
中 q_release_element
可以用來釋放指標的記憶體
q_release_element
只能釋放 element_t
結構,重看架構圖
head的部分是 list_head
沒有儲存value,而其他部分是 element_t
因為 q_release_element
會失去 next 的資料,所以額外使用一個指標在 release 後連結資料
要求 Return: true for success, false for allocation failed or queue is NULL
首先判斷要插入的 insert
以及要被插入的 head
是否存在,而 list_add
可以把節點插入到 list 的開頭
ERROR: Failed to save copy of string in queue
沒有考慮到 insert->value == NULL
的狀況
把 q_insert_head
中的 list_add
改成 list_add_tail
要求 Return: the pointer to element, %NULL if queue is NULL or empty.
C 字串需要尾端的 '\0'
字元來判斷字串結束
把 q_remove_head
中 head->next
改成 head_prev
要求 Return: the number of elements in queue, zero if queue is NULL or empty
使用 q_size
得到 queue 的節點數並利用 (x/2)+1 找到中間節點是第幾個
list.h
中 list_swap
可以交換兩個節點,當 leader 指標指向 head
或 head->next
時就不做交換
把 list_swap
用 list_move
替代