Jak Začít?

Máš v počítači zápisky z přednášek
nebo jiné materiály ze školy?

Nahraj je na studentino.cz a získej
4 Kč za každý materiál
a 50 Kč za registraci!




05_opakovani_iteratory_ADT

PDF
Stáhnout kompletní materiál zdarma (473.49 kB)

Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.

b) na začátek

novaKarta = (struct TPackListNode*)malloc( … );

novaKarta->iValue = aVal;

novaKarta->iNext = struktura->iTop;

struktura->iTop = novaKarta;

Karty - Lineární seznam

struct TPackList {

struct TPackListNode *iTop;
struct TPackListNode *iLast;

}

struct TPackListNode {

struct TPackListNode *iNext;
short

iValue;

}

c) Zamíchání

1.

Vytvoříme si 2 ukazatele (pA, pB) na náhodných pozicích v seznamu:

iTop -> … -> pA -> … -> pB -> … -> iLast -> NULL

2.

Provedeme několik změn ve vazbách:

iLast->iNext

= pA->iNext;

pA->iNext

= pB->iNext;

pB->iNext

= NULL;

iLast

= pB;

3.

Opakujeme N-krát

Karty – Pole indexů

struct TPackArray {

size_t iCount; 
short iValues[CARD_MAX_COUNT]; 
short iIndexes[CARD_MAX_COUNT];

}
• Přidali jsme pole indexů iIndexes
• iIndexes určuje pořadí vybírání karet z iValues
• Jak budou vypadat funkce pro:

a) vybrání následující karty?
b) zamíchání?
c) přidání karty (např. z jiného balíčku)?

Iterátory

• Též označováno jako Kurzory
• Návrhový vzor pro procházení datové struktury
• Oddělení implementace od použití
• Vytváří jednotné rozhraní
• Spojeny s příkazy foreach/for/while pro procházení 

a vybírání prvků

Iterátory - for

Iterátor {

kontejner;
pozice;

}

for ( iterátor = iterátor_begin();

iterátor_valid(iterátor);
iterátor_next(iterátor);
)

{

vypiš ( iterátor_aktuální_hodnota ( iterátor ) );

}

Iterátory - for

iterátor = iterátor_begin ( )

iterátor_valid ( iterátor )

iterátor_next ( iterátor )

iterátor_aktuální_hodnota ( iterátor )

• Co budou dělat tyto funkce u zásobníku realizovaném:

a) Statickým polem?
b) Jednosměrně lineárně vázaným seznamem?

Iterátory – for – statické pole

struct Tstack {

size_t iCount;
TStackElement iValues[STACK_MAXCOUNT];

}

struct TStackIterator {

const struct TStack *iStack;
size_t iPos;

}

iterátor = iterátor_begin ( )

//vytvoří nový objekt

iterátor_valid ( iterátor )

//došli jsme na konec?

iterátor_next ( iterátor )

//přejdi na další

iterátor_aktuální_hodnota ( iterátor )

//vrátí aktuální hodnotu

Témata, do kterých materiál patří