contributed by <yungchuan
>
由於是第一次使用 github ,所以先進行相關設定
先設定本機端的 ssh key ,在終端機輸入以下指令
依照顯示的訊息設定,最後會顯示出一串文字,就是 ssh key 。將這串 ssh key 複製到 github 上,就可以連結 github 與本機。
最後輸入以下指令驗證
輸入 yes ,看到Hi yungchuan! You've successfully authenticated, but GitHub does not provide shell access.
也就是說成功連上 github 了。
git config --global user.email "you@example.com"
設定 emailgit config --global user.name "Your Name"
設定使用者名稱依照題目的需求完成
這邊主要的概念是:
接著輸入
將結果 commit 到 git 中
首先,看到要求 q_insert_tail 要在 O(1) 的時間內完成就知道在 queue_t 結構裡面應該需要別的參數,否則難以達到要求。所以藉此機會順便稍微瀏覽一下後面的 function ,發現還有 q_size ,同樣要求 O(1) 的時間,所以接著去修改 queue.h 檔案中 queue_t 的結構,如下:
既然動到了結構定義,就必須要先去看先前完成的函式是否需要更動。所以將 q_new 改寫如下:
而 q_free 的部份則不需要更動。
接著實做 q_insert_head 及 q_insert_tail 的部份
有個地方我不太懂,這裡的 insert 都使用到 strdup 這個 function ,而 strdup 的實做應該是藉由 malloc 去配置等量的記憶體空間在複製字串的,所以在刪除的時候必須要 free 其配置的空間。但是在 q_free 實做的時候,卻被測試程式 qtest 回報錯誤,而如果不用 free 則可以正確執行。但是我認為這應該不是正確的方式,所以在最後我會另外使用 malloc 重新撰寫這兩個函式以及隨之更改 q_free 還有後面會提到的 q_remove_head 的內容。
接著輸入
接著將剩下的 q_remove_head, q_size, 以及 q_reverse 實做出來:
這邊要注意 strncpy 的操作,避免存取到超過預定的空間。
接著一樣 commit
先使用 clang-format -i *.[ch]
整理程式碼風格
使用 make test 來自動測試:
使用 git push
將結果傳回 github 上。
在 insert 的時候有發現,當使用 strdup 的時候,無法如預期的釋放其配置的記憶體空間,所以我決定改用 malloc 來實做 insert 函式,實做如下:
與原本的作法不同的地方在於,在第 9 行的地方,將原本的 strdup 改成 malloc 來配置記憶體,配置完記憶體以及檢查成功配置後,多加了第 14 行的字串複製,讓要 insert 的字串複製到 linked list 的 node 中;而 insert_tail 也是用一樣的概念實做。
接著因為用 malloc 實做了 insert ,所以在刪除的時候也就需要把配置的記憶體空間釋放。因此改寫 q_free 以及 q_remove_head 兩個函式如下:
為了將配置的記憶體釋放,在第 8 行以及第 27 行加上了 free 來釋放配置給字串的記憶體。
如此就完成了用 malloc 以及 free 來處理字串的實做,一樣執行評分程式 make test
得到結果如下:
這次的修改一樣通過評分程式的測試,接著一樣統一格式後執行 git
將結果上傳至 github 。