contributed by < a20034294
>
queue.[ch]
和連帶的檔案,測試後用 Git 管理各項修改,記得也該實作 q_sort
函式。
qtest
實作的記憶體錯誤,並透過 Massif 視覺化 "simulation" 過程中的記憶體使用量,需要設計對應的實驗qtest
實作,撰寫獨立的終端機命令解譯器 (可建立新的 GitHub repository)qtest
命令列功能,使其支援單行或多行編輯、歷史命令處理、命令自動補完 (例如輸入 h
之後按下 Tab 按鍵,自動接續補上 elp
,成為完整的 help
命令)。除了整合程式碼外,應當說明 antirez/linenoise 的運作原理,注意到 termios 的運用a20034294 大失敗
依照 C Programming Lab 裡的說明,需要更改以下的 function 以完成作業要求
新增 malloc return NULL
時的例外狀況,以及初始化 queue
將所使用的 string 空間以及 list_ele_t
所使用的 node 空間釋放
與 q_insert_tail
差距不大,只貼其中一個
動態分配記憶體 copy 需要 insert 的 string 然後維護 queue
原本使用 strcpy()
進行 copy,但被報 Warnning
利用 strncpy
進行 copy 並在尾端補 \0
最後釋放記憶體空間
由於在各個會變動大小的函數內已經維護 size,因此直接 return q->size
可改寫為:
a20034294已經修改完成 謝謝老師 4b2c0a
走訪 list 並將 next
指標反指
最後將 head
、tail
互換
使用 merge sort 由於 code 太長了就不貼了
值得一提的是原本直接引入 natural sort 作為比較使用,結果 make test
出現 TLE + seg fault
,make valgrind
執行可以正常通過,判斷應是太慢導致。
調整 insert 的數量,從 到 之後可以通過,認為成因可能是 QEMU + x5650 2.66G 太慢。
突然想到可以用 hash 表,讓他可以在判斷字串不同之後才進行比較。
以下為 hash function
然後正常通過,不過這對 、 這樣的字串比對沒有幫助,因為 hash 值無法比較大小,用紅黑樹的 map(c++ STL) 或是 hash map 做 hash 比較結果的 cache 可以顯著提升效率,但是實作太難,也沒有必要就不實作了。
未完