contributed by < pingsutw
>
q_new
: 建立新的「空」佇列;q_free
: 釋放佇列所佔用的記憶體;q_insert_head
: 在佇列開頭 (head) 加入 (insert) 給定的新元素 (以 LIFO 準則);q_insert_tail
: 在佇列尾端 (tail) 加入 (insert) 給定的新元素 (以 FIFO 準則);q_remove_head
: 在佇列開頭 (head) 移除 (remove) 給定的元素。q_size
: 計算佇列中的元素數量。q_reverse
: 以反向順序重新排列鏈結串列,該函式不該配置或釋放任何鏈結串列元素,換言之,它只能重排已經存在的元素;q_sort
: 「Linux 核心設計」課程所新增,以遞增順序來排序鏈結串列的元素,可參閱 Linked List Sort 得知實作手法;queue_t
q_insert_tail
和 q_size
需要將原本 時間複雜度的實作改寫為 時間複雜度,所以加了 *tail
和 qsize
來紀錄最後一個節點和 queue
大小q_new
queue_t
, 如果 malloc 失敗回傳 NULLq_free
queue_t
為 NULL 時直接 return,當 queue_t
不為 NULL 時,依序拜訪個節點並釋放記憶體空間q_insert_head
queue_t
為 NULL 時,直接 return falsequeue_t
不為 NULL 時, 先 malloc 記憶體空間給 list_ele_t
還有 list_ele_t->value
,如果失敗 return false,如果成功再將字串寫到節點裡,注意字串最後一個字元需為 \0
表示字串結束q_insert_tail
queue_t
為 NULL 時,直接 return falsequeue_t
不為 NULL 時, 先 malloc 記憶體空間給 list_ele_t
還有list_ele_t->value
,如果失敗 return false,如果成功再將字串寫到節點裡,注意字串最後一個字元需為 \0
表示字串結束strncpy
而不是 strcpy
, 因為 strcpy
沒有限制字串寫入 buffer 的大小,可能因為程式疏失,而導制記憶體使用過量q_remove_head
queue
為 NULL 或 queue size
為 0 時,return 0queue
不為 NULL,複製自傳到 buffer
,buffer
的最後一個字元需為 \0
代表字串結束q_size
queue_t
的大小已經紀錄在 queue_t
裡面可以直接取得,如果 queue_t
為空時 return 0.
q_reverse
queue
為 NULL 或 queue size
為 0 時,直接 returnnext = cur->next;
cur->next = prev;
prev = cur;
cur = next;
q_sort
queue
中的元素進行排序queue
分兩半,在進行合併is_less_then
merge
queue
進行合併sysprog2020