Todo List II.
Práca so spojkovým zoznamom a základnými CRUD operáciami nad ním.
Video pre cvičenie
About
Aj vy zvyknete zabúdať? Neviem, ako vy, ale čo si nezapíšem, tak o tom veľmi neviem. V rámci tejto úlohy teda vytvoríte jednoduchú implementáciu todolist-u v jazyku C.
Objectives
- Osvojiť si problematiku dynamických štruktúrovaných údajov.
- Naučiť sa vytvárať a prehľadávať spájané zoznamy.
Content
Súbor si stiahnite z tejto adresy.
Helper Functions
Začneme vytvorením jednoduchých pomocných funkcií na prácu so zoznamom úloh.
Úloha
Vytvorte funkciu get_size(), ktorá vám vráti počet
položiek zoznamu.
Funkcia má tieto parametre:
first- referencia na prvú úlohu zoznamu
Funkcia vráti hodnotu typu size_t, ktorá bude
reprezentovať počet položiek zoznamu. Ak je zoznam prázdny, funkcia
vráti hodnotu 0.
Úloha
Vytvorte funkciu is_completed(), ktorá overí, či je
úloha dokončená alebo nie.
Funkcia má jeden parameter typu struct task* a vracia
hodnotu typu bool.
Úlohu budeme považovať za dokončenú vtedy, keď jej položka
active bude mať hodnotu false.
Delete Task
V tomto kroku vytvoríme funkciu určenú na zmazanie úlohy zo zoznamu.
Základ bude tvoriť funkcia delete_task(), pomocou ktorej
odstránime zo zoznamu zvolenú položku.
Funkcia má dva parametre:
first- Referencia na prvú úlohu zoznamu. Ak zoznam zatiaľ neobsahuje žiadnu úlohu, bude jej hodnotouNULL.task- Referencia na úlohu typustruct task, ktorá má byť odstránená. Ak miesto existujúcej referencie funkcia dostane hodnotuNULL, funkcia nič zo zoznamu neodstráni.
Funkcia vždy vráti referenciu na prvý prvok zoznamu.
Implementáciu rozdelíme do niekoľkých úloh.
Úloha
Vytvorte funkciu delete_task(), ktorá odstráni prvú
položku zoznamu.
Úloha
Otestujte vytvorenú funkciu.
Pri testovaní použite aj nástroj valgrind, s ktorým
overíte, či ste po sebe pamäť upratali naozaj korektne.
Úloha
Rozšírte implementáciu funkcie delete_task() tak, aby
dokázala zmazať úlohu nachádzajúcu sa kdekoľvek v zozname.
Úloha
Otestujte vytvorenú funkciu.
Pri testovaní použite aj nástroj valgrind, s ktorým
overíte, či ste po sebe pamäť upratali naozaj korektne.
Delete Tasks
V tomto kroku vytvoríme funkcie, ktoré odstránia zo zoznamu viac úloh, ako len jednu. Rovnako tak podľa zadania nemusia odstrániť žiadnu úlohu.
Úloha
Vytvorte funkciu delete_all_tasks(), ktorá odstráni
všetky úlohy v zozname.
Funkcia dostane jeden parameter typu struct task*, ktorý
bude referenciou na začiatok zoznamu.
Funkcia rovnako vráti referenciu na struct task*, ktorá
bude reprezentovať nový začiatok zoznamu. Po jeho zmazaní však bude vždy
NULL.
Poznámka
Pre implementáciu funkcie môžete s výhodou použiť už vytvorenú
funkciu delete_task().
Úloha
Vytvorte funkciu clear_completed(), ktorá odstráni len
tie úlohy, ktoré sú už dokončené.
Hotová úloha je tá, ktorá má položku .active nastavenú
na hodnotu false.
Additional Tasks
- Implementujte zostávajúce funkcie podľa hlavičkového súboru.