--- title: 2021q1 Homework1 (lab0) tags: Linux Kernel Course --- contributed by <[Cancer-of-Japan](https://github.com/Cancer-of-Japan/lab0-c/blob/lab0-c_fork/queue.c)> Meet the requirements below - [ ] **q_new:** Create a new, empty queue. - [ ] **q_free:** Free all list being used. - [ ] **q_insert_head:** Insert a new element at the head of the list. - [ ] **q_insert_tail:** same as q_insert_head, but insert at the end of the list. - [ ] **q_remove_head:** Remove the element at the head of the list. - [ ] **q_size:** Tells how many elements are in the list. - [ ] **q_sort:** Sort elements in ascending oreder. ### Setup - Install Package... `$ sudo apt install build-essential git-core valgrind cppcheck clang-format aspell colordiff` - Pull the [forked GitHub repository](https://github.com/Cancer-of-Japan/lab0-c): `git clone https://github.com/Cancer-of-Japan/lab0-c.git` - Build: `make clean` `make ` #### **q_new** - Checks for NULL before initializing queue. #### **q_free** - Frees value and queue element internally. #### **q_insert_head** - First it checks whether queue is not NULL and new queue allocation before performing insertion. - If "tail" is NULL, it means element is the first item in the queue, which implies both 'head' and 'tail' should point to the element. #### q_insert_tail - Logic is same as "q_insert_head". - Make 'head' and 'tail' point to element when it is the first element. #### q_remove_head - Make sure queue and 'head' exsists before any operation. - Check 'sp' variable before copying 'head -> value', it is to show which element is being removed on the 'qtest' console. - If the element is happens to be only element in the list, make sure both 'head' and 'tail' are set to NULL after removing the element. - Free memory at last. #### q_size - Checks whether it's NULL or not, and the if not, returns corresponding number for size. #### q_reverse - Use 3 variables to perform reversing process. #### q_sort - Use merge sort to sort list in ascending order. - -> it's the part I could not finish.