contibuted by < W >
請注意看作業要求,填入 GitHub 帳號名稱
在struct裡 tail 和 size ,使一些function可以在O(1)裡完成
如果malloc成功就把新產生的 queue_t 初始化
從head開始依序將每個node的value及整個node free
只要有一個malloc不成功就要將整個新產生的node跟裡面的value要求的空間free掉
若malloc都成功,先將s字串複製一份到value,並再字串尾加上 '\0'
然後將 next 指向 head 指的node,接著把自己丟給 head
若此node是第一個產生的node,也把自己丟給 tail
將 size +1
只要有一個malloc不成功就要將整個新產生的node跟裡面的value要求的空間free掉
若malloc都成功,先將s字串複製一份到value,並再字串尾加上 '\0'
然後將 next 指向 NULL
接著 判斷一下tail是否有node,若不判斷直接寫 q->tail->next 會產生錯誤
( 因為若是 q->tail 指向 NULL 就沒能指向 next 指標 )
接著把自己丟給 tail
若此node是第一個產生的node,也把自己丟給 head
將 size +1
(p.s.) 因為在.h檔新增的tail,使此function可以實現在O(1)裡完成
要是沒有紀錄tail,此function為了找到最尾端,勢必要將整個list從頭找到尾,此時需要O(n)
首先若q指向NULL或目前沒有任何node => 此指令不能運作
接著若是sp指向non_NULL就將要刪除的node的value依據bufsize的長度限制複製進去
但若是sp指向NULL則不用複製
接著用一個 ele_tmp 先把head指向的地方複製一份放著
並將head指向目前指向的node的next
接著運用ele_tmp將原先指向的node的value和整個node清掉
將 size -1
回傳目前有幾個node
因為在.h檔新增的size使我們每經過一步操作都可以隨時掌握node的數量
此時可以實現在O(1)回傳node的數量
說明待補,需要圖片輔助
此次作業除了上述問題,其實還有一個更根本的問題,從github clone下來的初始檔案並非正常的,運用指令 $cppcheck *.[ch] (此指令的意思是對所有.c .h檔做cppcheck)
我們可以發現在harness.c的第147行會發生錯誤
再看看我們的錯誤指令 Address of auto-variable 'new_block->payload' returned
上網查了一下 auto-variable 是局部變數/區域變數的意思
我們再往上找
再往上找 payload
發現他是一個 unsigned char[0]
待補