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 <
joshyue
>實驗環境
開發過程
q_new
參照list.h中的
INIT_LIST_HEAD
, 將next和prev皆指向head本身。q_free
參照list.h中的
list_for_each_entry_safe
走訪queue中每個元素,利用temp保存下個節點的位置後,透過queue.h的q_release_element
將當前節點之value刪除並釋放,最後才將head釋放。q_insert_head
宣告node_insert物件並配置記憶體,配置失敗回傳false,若成功則利用
strdup
根據字串長度配置相對應之記憶體空間後,才將字串複製到物件內的value,同前述若配置失敗則釋放node_insert,回傳false,成功則參照list.h中的list_add
,將node_insert插入至queue最前方。q_insert_tail
同
q_insert_head
的概念,差別在於list_add
是將node_insert插入到queue最前方,此處改用list_add_tail
,將node_insert插入到queue尾端。q_remove_head
首先先判斷head若為NULL或empty的話,則回傳NULL,再來參照list.h中的
list_entry
,取得第一個節點之位址,並透過list_del
刪除第一個節點的連結,並保持斷開位置之前後節點仍相連,再來若sp不為NULL,則將刪除節點之value複製給sp,因strncpy
不會回傳字串結束符'\0',因此最後要在sp的最後補上'\0'。q_remove_tail
同
q_remove_head
的概念,差別在於將head->next改為head->prev。q_size
若head為NULL或empty,則回傳0;反之則參照list.h中的
list_for_each
來遍歷queue的每個節點,並在跳到下個節點時,長度+1,如此走訪完便能得到queue的size。q_delete_mid
q_delete_dup
q_swap
q_reverse
q_reverseK
q_sort
q_descend
q_merge
q_shuffle