KMI/ZPP2 - 11. seminář - 2. zápočtový úkol
2. zápočtový úkol
Vytvořte knihovnu zasobnik.py
, která implementuje zásobník přes spojový seznam (spojový seznam byl definován na 4. semináři). Do zásobníku budou moct být ukládána jen kladná čísla v rozsahu počtu bajtů, který bude zadán při vytvoření zásobníku. Zásobník bude možné ukládat do binárního souboru a také z něj načítat. Formát binárního souboru je pevně dán – první bajt bude rozsah ukládaných čísel a poté budou následovat samotná čísla uložená v zásobníku. Ukládání a načítání souboru implementujte dle úkolů 25 - 28 ze skript ZPP2.
Bude možnost vytvářet libovolný počet zásobníků. Do zásobníků bude možno prvky libovolně přidávat a získávat. Při pokusu o odebrání z prázdného zásobníku bude vráceno None. Je možné používat pouze zde probrané konstrukce jazyka Python. Mj. tedy není povoleno použití dodatečné knihovny, neprobrané datové struktury (slovník, tuple). Není povoleno použití funkcí pro práci se seznamy (např. pop() a clear()) pro samotnou manipulaci s daty v zásobníku (tzn. přidání do zásobníku, odebrání ze zásobníku), pro pomocné funkce na konverzi a ukládání do souboru je použití těchto funkcí povoleno. Není povoleno použití "del". Nápověda: Pro uchování odkazu na zásobník (první prvek spojového seznamu) je možno samotný zásobník "obalit" seznamem.
Příklad použití:z1 = zasobnik.vytvor_zasobnik(2) zasobnik.pridej_do_zasobniku(z1, 16) zasobnik.pridej_do_zasobniku(z1, 65536) zasobnik.pridej_do_zasobniku(z1, 65535) zasobnik.pridej_do_zasobniku(z1, 3) zasobnik.pridej_do_zasobniku(z1, -3) zasobnik.zapis_do_souboru("zasobnik.bin", z1) z2 = zasobnik.nacti_ze_souboru("zasobnik.bin") print(zasobnik.odeber_ze_zasobniku(z2)) print(zasobnik.odeber_ze_zasobniku(z2)) print(zasobnik.odeber_ze_zasobniku(z2))Vypíše:
hodnota 65536 je mimo povolený rozsah. hodnota -3 je mimo povolený rozsah. 3 65535 16