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.