Cvičení 3
Témata
- dynamická pole,
- cyklická pole,
- seznam
Informatici (cvičení v C)
Pokud zatím neumíte alokovat paměť dynamicky, tak všechny použité uzly můžete vytvořit s předstihem v mainu (pomocí pole obsahujícího všechny používané uzly). Žádný z takových uzlů se v seznamu nebude vyskytovat vícekrát (tj. toto nemusíte ošetřovat). Pokud už dynamické alokace ovládáte, můžete ve všech procedurách v úkolu 3 přijímat místo přidáváného uzlu rovnou hodnotu a uzel vytvořit dynamicky v rámci procedury.
Vytvořte strukturu pro uzel (jednosměrného) spojového seznamu (obsahující
int dataa odkaz na další prveknext) a typnodepro tuto strukturu (typedef).Vytvořte strukturu pro jednosměrný spojový seznam (tj. struktura obsahujicí začátek seznamu - první uzel) a typ
listpro tyto struktury (typedef).Použijte struktury z úkolů 1 a 2 k implementaci následujících procedur:
- zjištění délky seznamu:
int length(list seznam) - výpis prvků (tj složka
datastrukturynode) seznamu oddělených čárkou:void print_list(list seznam) - přidávání uzlu na začátek seznamu:
void add_start(list *seznam, node *uzel) - přidávání uzlu na konec seznamu:
void add_end(list *seznam, node *uzel) - přidávání uzlu na zadané místo v seznamu (nebo na konec, pokud se daná pozice v seznamu nevyskytuje):
void add_position(list *seznam, node *uzel, int position) - odebírání uzlu ze začátku seznamu:
int remove_start(list *seznam)- vrátí 0, pokud se něco smazalo, a -1 jinak - odebírání uzlu z konce seznamu:
int remove_end(list *seznam)- vrátí 0, pokud se něco smazalo, a -1 jinak - vyhledávání uzlu v seznamu -
int search(list *seznam, node *uzel)- vrátí pozici hledaného uzlu v seznamu, nebo -1 pokud tam není - odebírání zadaného uzlu ze seznamu -
int remove(list *seznam, node *uzel)- vrátí 0, pokud uzel byl odebrán, a -1 jinak
- zjištění délky seznamu:
Učitelé (cvičení v Pythonu)
- Implementujte vlastní spojový seznam v Pythonu.
- Z operací zkuste alespon vyhledávání, přidávání a mazání prvku.
- Zkuste i různé varianty přidávání: na začátek, na konec, na n-tou pozici.