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

  1. Osvojiť si problematiku dynamických štruktúrovaných údajov.
  2. 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 hodnotou NULL.

  • task - Referencia na úlohu typu struct task, ktorá má byť odstránená. Ak miesto existujúcej referencie funkcia dostane hodnotu NULL, 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.

Ú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

  1. Implementujte zostávajúce funkcie podľa hlavičkového súboru.

Additional Resources