or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
2023q1 Homework1 (lab0)
contributed by <
chiacyu
>開發環境
開發日誌
做作業前可以先研讀 你所不知道的 C 語言: linked list 和非連續記憶體對於實作過程大有幫助。
q_new
這邊需要注意的部份在根據
malloc
的說明:若是失敗時會回傳
NULL
因此就算失敗也必須要使用free
來釋放記憶體。q_free()
釋放記憶體的部份則是透過
list_for_entry_safe
依序走訪過每一個element
來釋放每個節點所佔用的記憶體。q_insert_head()
q_insert_tail()
q_remove_head()
q_remove_tail()
思考如何縮減程式碼。
jserv
q_size()
q_delete_mid()
這邊用的方式是先計算出
queue
的長度,再取下高斯的方式來找出mid
的位置改進漢語描述,並描述對應的演算法。
jserv
q_delete_dup()
delete
的方式用兩個指標 先去若是遇到重複的字串 將第二個指標持續往next
前進直到不同 再第一個指標往next
走得過程刪除重複的節點改進漢語表達。
jserv
q_swap()
swap
的實作方式則是用兩個指標分別指到,欲插入頭部的位置與欲移動節點之位置。由於後一個節點的next
會指向head
因此可以作為判斷之條件來檢視是否走遍所有節點。q_reverse()
q_reverseK()
目前的實作方式是用兩個指標,第一個指標放在
前頭
,第二個指標指向欲移動的點。但目前這種方式當遇到queue
長度能被k
整除時會有問題,需要再改進。q_sort()
目前是依照 你所不知道的 C 語言: linked list 和非連續記憶體 內文提供的遞迴版本去實作。 唯一的差別是在與這邊的實作是取
first entry
作為pivot
,範例的版本則是取最後一個entry
作為pivot
。 原本在宣告large_head
跟small_head
的時候是使用malloc
但發現在執行時期會發生FATAL ERROR: Calls to malloc disallowed
後來才改為不需要malloc
的版本。q_descend
q_merge()
這邊的作法是透過,
list_for_each_entry_safe
的方式將每一個節點走遍。 假設總共有三個queue
[A,B,C]
[D,E,F]
[G,H,I]
, 先準備一個sort_head
並將所有節點移動至此成[A,B,C,D,E,F,G,H,I]
此時三個佇列變成[]
[]
[]
,在將sort_head
排序後串回第一個queue
, 變成[A,B,C,D,E,F,G,H,I]
[]
[]
。網頁伺服器
Shuffle 實作