contributed by < TWPLrh
>
完成 Queue 程式碼
struct queue_t
- 增加tail和size已達到O(1)。q_new
- 新建 Queue照著註解去做,如果沒分配到的話要return NULL,如果成功,就必須設定初始值之後回傳。
q_free
- 釋放 Queue當q->head不是null,就將q->head移到next,並將prev的value和prev釋放。
q_insert_head
- 插入 Queue這裡的重點我認為是在Size=1
時如果不將newh->next設成null
,在make test
時就會說錯誤,這也讓我意識到,C在malloc
後並不會將所有初值都弄好,需要用memset
去清空或是每個property依次去設定。
q_insert_tail
- 插入 Queue 尾端和q_insert_head
差不多,不一樣的地方在line 20
之後,q->tail->next
一定是null
所以可以不用包在if
裡面,else
的話則先把q->tail->next
設爲newh
,再把q->tail
設爲newh
這是和q_insert_head
不同的地方。
q_remove_head
- 移除 Queue Head照著註解要求,先把會false的情況寫在前面,之後就代表這個Queue是可以被remove_head
,再確認sp是否non-null
,如果是,就複製過去,並把bufsize-1設成'\0'
,再做一些property的修改即可。
q_size
- 回傳 Queue Size直接回傳Queue的size,如果null,回傳0
q_reverse
- 前後翻轉 Queue 的順序翻轉就只是簡單的改變list方向而已,方法如code所示,先把q->tail
設爲q->head
,loop
裡面就是將list前後串接改變,第一次是null
,最後因為q->head
已經指到不知道什麼地方,所以把他指回prev
Usage : make test
makefile
-> qtest.c
-> script/driver.py
-> traces/
makefile
中有 test
,當在terminal輸入 make test
時即會呼叫test
下的scripts/driver.py
來協助評分和輸出。qtest.c
的 console_init()
,把測試的function都加入且綁定到cmd上,綁定的function都有各種條件來測試記憶體是否釋放以及邏輯是否造成運行上的錯誤。錯誤會呼叫report()
來印出那裡有錯及錯誤類別。script/driver.py
有 class Tracer
目的在執行15種trace方法,當每個方法都run過之後會印出總分。執行每一種執行方法都會呼叫trace\
目錄下的*.cmd
,並利用subprocess.call()
執行qtest
下的測試函式。trace/
下的檔案都是執行測試的腳本,對應的就是qtest.c
下console_init()
所加入cmd的函式。