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 (quiz1)
tags:
2023-linux_kernel
contributed by <
JoshuaLee0321
>第一週測驗題
測驗一
2023q1 第 1 週測驗題
題目敘述如下:
而目標為利用
linux/list.h
中的 API 對快速排序法實作divide and conquer 演算法
,而很明顯的這個演算法就會把給定的 linked list 分為兩半來處理,除此之外還要保證 stable由於知道是 quick sort,我們就可以直接填入以上AAA 到 FFF 了
struct item *pivot = list_first_entry(head, AAA, BBB);
CCC 吃四個參數,主要是為了把最前面的itm 移除掉後給list_less 或 list_greater,所以
最後的 FFF,由於是已經把 list_greater 排序好了,而很明顯這個已經排序好的 linked list 為比較大的鏈結串列,那只需要把他接在最後面,這個排序就完成了。
延伸問題
一、
二、
三、
四、
測驗二
2023/2/28 老師我想要請問為甚麼要寫
而不是
這樣意義何在?多做一件事情不是會多消耗資源嗎?
GGGG
很明顯就是list_for_each_entry_safe
HHHH
看起來就是要把pivot
放入list_less
中,而由於在quicksort
中pivot
會是list_less
中最大的元素,故把他擺到list_less
中的最後一位,也就是list_move_taillist_move(&pivot->list, &list_greater)
IIII
跟JJJJ
的意思為,當list_greater 或是 list_less
中有東西的話,我就把他們擺入stack中,所以這邊應該要寫&stack[++top]
如此一來可以保證 top往上移動並且不會撞到原本的元素stack
中的元素放入 原本的head
中,一一把排序好的元素放回head中。stack[top]
的元素拿出來之後並且初始化KKKK
很明顯的就是 &stack[top–]其實這四行程式碼可以省略成一行,變成以下:
list_move_tail(&stack[top--], head)
測驗三