contributed by < chewei3
>
在 queue.[ch]
中完成以下實作
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
: 以遞增順序來排序鏈結串列的元素queue_t
,加入 list_ele_t *tail
及 int size
使得q_size
以及 q_insert_tail
能夠在 時間完成list_ele_t *tail
的缺點是使用的記憶體空間增加, queue operation 需要維護 q->tail
建立新的 queue ,需考慮 malloc 失敗的情況
釋放 queue 的所有記憶體,需檢查
插入新的 node 到 queue 的 head ,需考慮
q->tail
list_ele_t *newh
因為用 strcpy 將 char *s
copy 到 node->value 會報錯,所以參考 qtest.c
使用 strncpy
因為有額外記住 q->tail
,所以可以用 時間插入
作法跟 q_insert head
類似
char *sp
非空,需要 assign head->value
給它跟 quiz1 的作法相同,需額外維護 q->tail
參考 作業說明連結 使用MergeSort,後來有看到 Zhumon 的 merge可以將 merge 及 merge_sort合併
待補
還沒有看這部分,目前只有把結果跑出來
因為 trace-17 有時候不會通過,用 Perf 去看效能瓶頸在哪
結果發現 q_insert_head
佔據了 15.7% 的執行時間,但是在 trace-17 裡面並沒有 insert_head
待補