• DT = datové typy • ADT/ADS = abstraktní datové typy / struktury

Transkript

• DT = datové typy • ADT/ADS = abstraktní datové typy / struktury
© Květuše Sýkorová
20.05.2016
• DT = datové typy
– obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru
• určen: obor hodnot + výpočetní operace
– např. INT = {‐2 147 483 648 až +2 147 483 647} + {+,‐,*,/,…}
• ADT/ADS = abstraktní datové typy / struktury
© Květuše Sýkorová
• poprvé představen 1974, veřejnosti až 1977
– implementačně nezávislá struktura dat s operacemi na této struktuře
• určen: množství alokované paměti + druh dat
– paměť (B) – dáno programovacím jazykem a typem PC
» Java (pevná velikost), C, C++ (dle velikosti registru – ½, 1, 2)
– druh dat – způsob manipulace s daty (DT)
» celé číslo, řetězec znaků, měna, desetinné číslo, …
1
20.05.2016
• podle historického vývoje IT
– klasické DT
• jednoduché DT
• složené DT
• zvláštní DT
– klasické ADT
© Květuše Sýkorová
• základní ZDT
• uživatelské UDT
– prostředí .NET
• hodnotový DT
• referenční DT
• klasické DT
• jednoduché DT
– ordinální (ex. předchůdce a následník)
» log.hodnota (boolean), c.číslo (integer), znak (char), výč.typ (enum)
– neordinální (číslo s plovoucí čárkou)
» reálné číslo (real, float, double)
– prázdný
» void, null, nill
© Květuše Sýkorová
• složené DT
– homogenní
» pole, textový řetězec
– nehomogenní
» seznamy, struktury, záznamy, třídy
• zvláštní DT
» ukazatel (*pt), soubor (file), ...
2
20.05.2016
• klasické ADT/ADS
– ZDT = základní, primitivní, vestavěné (built‐in)
• definované programovacím jazykem
– celočíselné, s plovoucí desetinnou čárkou, znakové, logická hodnota
» Java: byte, short, int, long, float, double, char, String, boolean
» C#: s byte, u short, u int, u long, float, double, decimal, char, string, bool, object
© Květuše Sýkorová
– UDT = uživatelsky definované
• definované programátorem
• seskupení primitivních ZDT
– pole, textový řetězec, fronta, seznam, zásobník, strom, ...
» Java: pole array, třída class, výčtový typ enum, rozhraní interface
» C#: pole array, třída class, výčtový typ enum, struktura struct, …
• v prostředí .NET
• předek třídy System.Object
– hodnotový datový typ
• vytváření dynamicky (složka třídy) nebo v zásobníku (lokální proměnná metody)
• Primitivní (atomické) datové typy
© Květuše Sýkorová
– celá čísla (byte, short, int, long), znaky (char), reálná čísla (float, double), logické hodnoty (bool), prázdný typ (void, null), výčtový typ, struktura
– referenční (odkazový) datový typ
• vytváření pouze dynamicky
• odkazování – reference
• rušení – automatická správa paměti
– řetězce (String), pole ([]), třídy (class), …
3
20.05.2016
– celá čísla
• uložení: znaménko + bin.číslo
– byte (1B)
• 0 až 255 / ‐128 až +127
• bez znaménka / se znaménkem
– unsigned / signed
– záporná čísla ‐ doplňkový kód
– např. 10000001
– short (2B)
• 0 až 65 535 / ‐32 768 až +32 767
– int (4B, 6B)
© Květuše Sýkorová
• 0 až 4 294 967 295 / ‐2 147 483 648 až +2 147 483 647
– long (8B)
• 0 až 18 446 744 073 709 551 615 / ‐9 223 372 036 854 775 808 až +9
223 372 036 854 775 807
– Java : byte, short, int, long ‐ signed
– C# : sbyte, byte, short, ushort, int, uint, long, ulong
– reálné číslo
• reálné číslo = mantisa * 2exponent
– mantisa v normalizovaném tvaru (1,23456789)
• uložení: znaménko + mantisa + exponent (= pohyblivá čárka)
– velikost mantisy = max. počet platných cifer
– velikost exponentu = rozsah zobrazovaných hodnot
© Květuše Sýkorová
– real / float (4B)
• s jednoduchou přesností (3B mantisa + 1B exponent)
• ± 1.5 x 10‐45 až ± 3.4 x 1038 • přesnost na 7‐8 cifer za desetinnou čárkou
– double (8B)
• s dvojitou přesností (6B mantisa + 2B exponent)
• ± 5.0 x 10‐324 až ± 1.7 x 10308 • přesnost na 15‐16 cifer za desetinnou čárkou
4
20.05.2016
– celočíselná hodnota znakové sady
– znaková sada (kódová stránka) + kódování
• ASCII (1B) – 256/128 znaků (1 způsob kódování)
– kódování EBCDIC (souběžně s ASCII, pro sálové počíteče)
– kódové stránky národních abeced latin‐1, latin‐2, Kamenických, Win1250
© Květuše Sýkorová
• Unicode (1B,2B,4B) – 1 114 112 znaků (17*65536)
–
–
–
–
» standardy UCS (až 32b) + Unicode (až 16b) ‐ 1991
kódování UTF‐7 (7b, znaková sada ASCII)
kódování UTF‐8 (8‐32b, ISO 8859‐1, Internet + OS GNU/Linux)
kódování UCS‐2 (16b), UTF‐16 (16‐32b, LE, BE, OS Windows)
kódování UCS‐4, UTF‐32 (32b, LE, BE, neefektivní)
» endianita = ukládání vícebajtových DT (0x4A3B2C1D), LE, BE, ME
– char (2B)
• lze použít jako celočíselný typ bez znaménka (ushort)
– boolean (1bit)
– 1 / 0
– true / false
– pravda / nepravda
• uložen často jako 1B
© Květuše Sýkorová
• existují i další ZDT
– různé pro různé programovací jazyky
– Java : string
– C# : decimal, void, list, …
5
20.05.2016
• proměnná = odkaz na paměťové místo
– na paměťovém místě najdeme hodnotu proměnné
• název = ukazatel na 1.bajt
• datový_typ = velikost paměťového místa (1B, 2B, 4B, …)
© Květuše Sýkorová
obsah
• deklarace:
datový_typ název_proměnné ;
short obsah;
• definice:
název_proměnné = hodnota ;
obsah = 15;
• ukazatel = odkaz na paměťovou adresu
– na paměťové adrese najdeme adresu jiné proměnné
– velikost adresy v pamě → rychlejší práce pro velké datové struktury
– lze použít jako prvek struktury, atribut třídy
• adresový operátor & pro získání adresy proměnné
• operátor * pro práci s hodnotou proměnné v místě adresy
© Květuše Sýkorová
obsah
• deklarace:
datový_typ * název_ukazatele ;
short *ptObsah;
ptObsah
• definice:
název_ukazatele = & proměnná ;
ptObsah = &obsah;
6
20.05.2016
• pole = odkaz na řadu homogenních paměťových míst
– prvek pole = jedno paměťové místo
• určen indexem [i]
• umístěny v paměti vedle sebe
• stejného datového typu
– statické pole (při překladu musí být známa fixní velikost pole)
– dynamické pole (při běhu programu se může měnit velikost pole)
© Květuše Sýkorová
obsah[0]
obsah[1]
obsah[2]
• deklarace:
datový_typ[] název_pole [počet_prvků] ;
short obsah[4];
short[] objem = new short[pocet];
obsah[3]
• definice:
název_pole[prvek] = hodnota ;
obsah[1] = 15;
objem[3] = 7;
• struktura = odkaz na seskupení heterogenních paměťových míst
hodnotový typ ADS
– prvek struktury = jedno paměťové místo
• různého datového typu
• umístěny v paměti vedle sebe
• určen instancí a operátorem .
© Květuše Sýkorová
ABCD.obsah
ABCD.nazev[1]
ABCD.nazev[0]
• deklarace:
struct název_str { typ prvek; } prom ;
struct ctverec{ short obsah;
char nazev[2]; } ABCD, PQRS;
PQRS.obsah
• definice:
název_prom . prvek = hodnota ;
ABCD.obsah = 15;
ABCD.nazev = "PX";
7
20.05.2016
• třída = odkaz na seskupení heterogenních paměťových míst
referenční typ ADS
– prvek třídy = jedno paměťové místo
• různého datového typu
• umístěny v paměti vedle sebe
• určen instancí a operátorem new
© Květuše Sýkorová
ABCD.obsah
ABCD.nazev[1]
ABCD.nazev[0]
• deklarace:
PQRS.obsah
• definice:
class název_tr { typ prvek; metody } ;
class ctverec{ short obsah; char nazev[2]; Constr(…) …};
název_tr prom = new Constr(…) ;
ctverec ABCD = new Constr(15,"PX");
ctverec PQRS = new Constr();
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
• součást skoro každého programu
© Květuše Sýkorová
zasobnik[0]
vrchol = ‐1
realizace v poli:
int velikost = 4;
int Zasobnik[velikost];
int vrchol = ‐1;
zasobnik[1]
zasobnik[2]
zasobnik[3]
realizace v C#:
public class Stack {
object[] items;
int count;
public void Push(object item) {...}
public object Pop() {...}
}
Stack zasobnik = new Stack();
8
20.05.2016
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vložení hodnoty 24 do Zásobníku
zasobnik[0]
zasobnik[1]
zasobnik[2]
zasobnik[3]
© Květuše Sýkorová
24
vrchol = 0
realizace v C#:
zasobnik.Push(24);
realizace v poli:
vrchol = vrchol + 1;
Zasobnik[vrchol] = 24;
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vložení hodnoty 59 do Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
zasobnik[1]
zasobnik[2]
zasobnik[3]
59
vrchol = 1
realizace v poli:
vrchol = vrchol + 1;
Zasobnik[vrchol] = 59;
realizace v C#:
zasobnik.Push(59);
9
20.05.2016
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vložení hodnoty 11 do Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
zasobnik[1]
59
zasobnik[2]
zasobnik[3]
11
vrchol = 2
realizace v C#:
zasobnik.Push(11);
realizace v poli:
vrchol = vrchol + 1;
Zasobnik[vrchol] = 11;
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vložení hodnoty 37 do Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
59
zasobnik[1]
11
zasobnik[2]
zasobnik[3]
37
vrchol = 3
realizace v poli:
vrchol = vrchol + 1;
Zasobnik[vrchol] = 37;
realizace v C#:
zasobnik.Push(37);
10
20.05.2016
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vyjmutí hodnoty 37 ze Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
zasobnik[1]
59
zasobnik[2]
11
zasobnik[3]
37
vrchol = 2
realizace v poli:
pom = Zasobnik[vrchol];
vrchol = vrchol ‐ 1;
realizace v C#:
int pom = (int) zasobnik.Pop();
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vyjmutí hodnoty 11 ze Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
zasobnik[1]
59
11
zasobnik[2]
zasobnik[3]
37
vrchol = 1
realizace v poli:
pom = Zasobnik[vrchol];
vrchol = vrchol ‐ 1;
realizace v C#:
int pom = (int) zasobnik.Pop();
11
20.05.2016
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vyjmutí hodnoty 59 ze Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
zasobnik[1]
59
zasobnik[2]
11
zasobnik[3]
37
vrchol = 0
realizace v poli:
pom = Zasobnik[vrchol];
vrchol = vrchol ‐ 1;
realizace v C#:
int pom = (int) zasobnik.Pop();
• zásobník = způsob seskupení paměťových míst
– metoda LIFO (last in, first out)
Vložení hodnoty 31 do Zásobníku
zasobnik[0]
© Květuše Sýkorová
24
zasobnik[1]
31
11
zasobnik[2]
zasobnik[3]
37
vrchol = 1
realizace v poli:
vrchol = vrchol + 1;
Zasobnik[vrchol] = 31;
realizace v C#:
zasobnik.Push(31);
12
20.05.2016
• používané metody / funkce:
– je zásobník plný?
1
1
• ano, pokud • ne, pokud – je zásobník prázdný?
1
© Květuše Sýkorová
• ano, pokud • ne, pokud 0
– vlož (push) hodnotu do zásobníku.
• otestuj, zda již není plný
– vyjmi (pop) hodnotu ze zásobníku.
• otestuj, zda již není prázdný
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
© Květuše Sýkorová
fronta[0]
zacatek = 0
konec = 0
realizace v poli:
int velikost = 4;
int Fronta[velikost];
int zacatek = 0;
int konec = 0;
fronta[1]
fronta[2]
fronta[3]
realizace v C#:
public class Queue {
object[] items;
int start, stop;
public void Push(object item) {...}
public object Pop() {...}
}
Queue fronta = new Queue();
13
20.05.2016
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vložení hodnoty 24 do Fronty
fronta[0]
fronta[1]
fronta[2]
fronta[3]
© Květuše Sýkorová
24
zacatek = 0
konec = 1
realizace v poli:
Fronta[konec] = 24;
konec = (konec + 1) % velikost;
realizace v C#:
fronta.Push(24);
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vložení hodnoty 59 do Fronty
fronta[0]
© Květuše Sýkorová
24
fronta[1]
fronta[2]
fronta[3]
59
zacatek = 0
konec = 2
realizace v poli:
Fronta[konec] = 59;
konec = (konec + 1) % velikost;
realizace v C#:
fronta.Push(59);
14
20.05.2016
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vložení hodnoty 11 do Fronty
fronta[0]
© Květuše Sýkorová
24
fronta[1]
fronta[2]
59
fronta[3]
11
zacatek = 0
konec = 3
realizace v poli:
Fronta[konec] = 11;
konec = (konec + 1) % velikost;
realizace v C#:
fronta.Push(11);
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vyjmutí hodnoty 24 z Fronty
fronta[0]
© Květuše Sýkorová
24
fronta[1]
fronta[2]
59
fronta[3]
11
zacatek = 1
konec = 3
realizace v poli:
pom = Fronta[zacatek];
zacatek = (zacatek + 1) % velikost;
realizace v C#:
int pom = (int) fronta.Pop();
15
20.05.2016
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vyjmutí hodnoty 59 z Fronty
fronta[0]
© Květuše Sýkorová
24
fronta[1]
59
fronta[2]
fronta[3]
11
zacatek = 2
konec = 3
realizace v poli:
pom = Fronta[zacatek];
zacatek = (zacatek + 1) % velikost;
realizace v C#:
int pom = (int) fronta.Pop();
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vložení hodnoty 31 do Fronty
fronta[0]
© Květuše Sýkorová
24
fronta[1]
59
fronta[2]
11
fronta[3]
31
zacatek = 2
konec = 0
realizace v poli:
Fronta[konec] = 31;
konec = (konec + 1) % velikost;
realizace v C#:
fronta.Push(31);
16
20.05.2016
• fronta = způsob seskupení paměťových míst
– metoda FIFO (first in, first out)
• cyklická
Vložení hodnoty 47 do Fronty
fronta[0]
© Květuše Sýkorová
47
fronta[1]
fronta[2]
59
11
fronta[3]
31
zacatek = 2
konec = 1
realizace v poli:
Fronta[konec] = 47;
konec = (konec + 1) % velikost;
realizace v C#:
fronta.Push(47);
• používané metody / funkce:
– je fronta plná?
• ano, pokud • ne, pokud 1 %
1 %
– je fronta prázdná?
© Květuše Sýkorová
• ano, pokud • ne, pokud – vlož (push) hodnotu do fronty.
• otestuj, zda již není plná
– vyjmi (pop) hodnotu z fronty.
• otestuj, zda již není prázdná
17
20.05.2016
• seznam = způsob seskupení paměťových míst
• lineární spojový seznam, zřetězený seznam (list)
– dynamická datová struktura
» dynamická alokace paměti, tvorba struktur – pole, stromy, grafy
– náročnější na čas, paměť a zkušenost programátora
prvek
» přístup k prvkům složitější (nelze indexy)
– jednosměrný
data
© Květuše Sýkorová
• data + odkaz na další prvek
– jednodušší, horší procházení
– obousměrný (dvoucestný, dvousměrný)
• data + odkaz na předchozí a další prvek
– složitější, procházení oběma směry
dalsi
prvek
dalsi
data
predchozi
• seznam = způsob seskupení paměťových míst
– jednosměrný
• data + odkaz na další prvek
class Prvek{
private int data;
– jednodušší, horší procházení
• vkládání prvků
private Prvek dalsi;
© Květuše Sýkorová
– na začátek
– na konec
– na pozici v seznamu
public Prvek(int d) {
NastavData(d);
dalsi = null;
prvek
}
public int VratData() {…}
data
public void NastavData(int d) {…}
dalsi
};
jednosměrně zřetězený seznam
18
20.05.2016
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 24 do Seznamu
24
null
© Květuše Sýkorová
zacatek
…
zacatek = new Prvek(24);
…
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 59 do Seznamu
uzel
© Květuše Sýkorová
24
null
59
null
zacatek
…
uzel = new Prvek(59);
…
19
20.05.2016
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 59 do Seznamu
uzel
24
null
59
adr.24
© Květuše Sýkorová
zacatek
…
uzel.dalsi = zacatek;
…
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 59 do Seznamu
uzel
© Květuše Sýkorová
24
null
59
adr.24
zacatek
…
zacatek = uzel;
…
20
20.05.2016
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 11 do Seznamu
uzel
24
null
11
null
59
adr.24
© Květuše Sýkorová
zacatek
…
uzel = new Prvek(11);
…
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 11 do Seznamu
uzel
© Květuše Sýkorová
24
null
11
adr.59
59
adr.24
zacatek
…
uzel.dalsi = zacatek;
…
21
20.05.2016
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vložení hodnoty 11 do Seznamu
uzel
24
null
11
adr.59
59
adr.24
© Květuše Sýkorová
zacatek
…
zacatek = uzel;
…
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Seznam 11 59 24
uzel
© Květuše Sýkorová
24
null
11
adr.59
59
adr.24
zacatek
22
20.05.2016
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vyjmutí hodnoty 59 ze Seznamu
uzel
24
null
11
adr.59
pom
59
adr.24
© Květuše Sýkorová
zacatek
…
uzel = zacatek; pom = uzel.dalsi;
while (pom.data != 59)
uzel = pom; pom = uzel.dalsi;
…
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vyjmutí hodnoty 59 ze Seznamu
uzel
© Květuše Sýkorová
24
null
11
adr.59
pom
59
adr.24
zacatek
…
uzel.dalsi = pom.dalsi;
…
23
20.05.2016
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Vyjmutí hodnoty 59 ze Seznamu
uzel
24
null
11
adr.24
pom
59
adr.24
© Květuše Sýkorová
zacatek
…
// zpracuj pom;
…
• seznam = způsob seskupení paměťových míst
– jednosměrný, vkládání na začátek seznamu
Seznam 11 24
uzel
© Květuše Sýkorová
24
null
11
adr.24
zacatek
24
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný
• data + odkaz předchozí, další
class Prvek{
private int data;
– složitější
• vkládání prvků
© Květuše Sýkorová
– na začátek
– na konec
– na pozici v seznamu
prvek
private Prvek predchozi, dalsi;
public:
Prvek(int d) {
NastavData(d);
dalsi
predchozi = null; dalsi = null;
}
data
public int VratData() {…}
predchozi
obousměrně zřetězený seznam
public void NastavData(int d) {…}
};
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 24 do Seznamu
© Květuše Sýkorová
24
predch.
dalsi
null
null
zacatek
konec
…
zacatek = new Prvek(24);
konec = zacatek;
…
25
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 59 do Seznamu
uzel
24
predch.
dalsi
null
null
59
predch.
dalsi
null
null
© Květuše Sýkorová
zacatek
konec
…
uzel = new Prvek(59);
…
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 59 do Seznamu
uzel
© Květuše Sýkorová
24
predch.
dalsi
null
adr.59
59
predch.
dalsi
null
null
zacatek
konec
…
konec.dalsi = uzel;
…
26
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 59 do Seznamu
uzel
24
predch.
dalsi
null
adr.59
59
predch.
dalsi
adr.24
null
© Květuše Sýkorová
zacatek
konec
…
uzel.predchozi = konec;
…
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 59 do Seznamu
uzel
© Květuše Sýkorová
24
predch.
dalsi
null
adr.59
59
predch.
dalsi
adr.24
null
zacatek
konec
…
konec = uzel;
…
27
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 11 do Seznamu
uzel
24
predch.
dalsi
null
adr.59
11
predch.
dalsi
null
null
59
predch.
dalsi
adr.24
null
© Květuše Sýkorová
zacatek
konec
…
uzel = new Prvek(11);
…
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 11 do Seznamu
uzel
© Květuše Sýkorová
24
predch.
dalsi
null
adr.59
11
predch.
dalsi
null
null
predch.
59
dalsi
adr.24 adr.11
zacatek
konec
…
konec.dalsi = uzel;
…
28
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 11 do Seznamu
uzel
24
predch.
dalsi
null
adr.59
11
predch.
dalsi
adr.59
null
predch.
59
dalsi
adr.24 adr.11
© Květuše Sýkorová
zacatek
konec
…
uzel.predchozi = konec;
…
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vložení hodnoty 11 do Seznamu
uzel
© Květuše Sýkorová
24
predch.
dalsi
null
adr.59
11
predch.
dalsi
adr.59
null
predch.
59
dalsi
adr.24 adr.11
zacatek
konec
…
konec = uzel;
…
29
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Seznam 24 59 11
uzel
24
predch.
dalsi
null
adr.59
11
predch.
dalsi
adr.59
null
predch.
59
dalsi
adr.24 adr.11
© Květuše Sýkorová
zacatek
konec
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vyjmutí hodnoty 59 ze Seznamu
uzel
© Květuše Sýkorová
24
predch.
dalsi
null
adr.59
11
predch.
dalsi
adr.59
null
predch.
59
dalsi
adr.24 adr.11
zacatek
konec
…
uzel = zacatek;
while (uzel.data !=59)
uzel = uzel.dalsi;
…
30
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vyjmutí hodnoty 59 ze Seznamu
pom
24
uzel
predch.
dalsi
null
adr.59
11
predch.
dalsi
adr.59
null
predch.
59
dalsi
adr.24 adr.11
© Květuše Sýkorová
zacatek
konec
…
pom = uzel.predchozi;
pom.dalsi = uzel.dalsi;
…
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vyjmutí hodnoty 59 ze Seznamu
pom
© Květuše Sýkorová
24
predch.
dalsi
null
adr.11
11
uzel
predch.
dalsi
adr.59
null
predch.
59
dalsi
adr.24 adr.11
zacatek
konec
…
pom = uzel.dalsi;
pom.predchozi = uzel.predchozi;
…
31
20.05.2016
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Vyjmutí hodnoty 59 ze Seznamu
pom
24
predch.
dalsi
null
adr.11
11
uzel
predch.
dalsi
adr.24
null
predch.
59
dalsi
adr.24 adr.11
© Květuše Sýkorová
zacatek
konec
…
// zpracuj uzel;
…
• seznam = způsob seskupení paměťových míst
– obousměrný, vkládání na konec seznamu
Seznam 24 11
© Květuše Sýkorová
24
predch.
dalsi
null
adr.11
11
predch.
dalsi
adr.24
null
zacatek
konec
32

Podobné dokumenty

ZÁKLADY PROGRAMOVACÍHO JAZYKA TURBO PASCAL

ZÁKLADY PROGRAMOVACÍHO JAZYKA TURBO PASCAL 2) číslice 0 až 9, 3) speciální symboly + – . , ‘ ( ) / * <= >= <> = := .. [ ] { } a klíčová slova. Klíčová slova jsou: and, array, asm, end, case, const, constructor, destruktor, div, do, downto, ...

Více

Návod na vrátného CV

Návod na vrátného CV můžeme volit libovolné číslo jako při normálním telefonování. Nelze volit jen znaky * a #. Stiskem tlačítka * se linka zavěsí. Při použití této funkce nezavěšuje vrátný automaticky ale musí se vždy...

Více

Úvod

Úvod Délka EXPONENTU - tj. počet bitů na exponent - určuje rozsah Pozn. 1 exponent se zvlášt’ musı́ vyhradit pro 0, která nemá logaritmus, mantisy u tohoto exponentu lze využı́t pro vyznačenı́...

Více

Zobrazení čísel v počítači

Zobrazení čísel v počítači Reálná čísla Čísla v pevné řádové čárce ➢ používá se pouze pro speciální účely (finanční software) ➢ vhodné pro čísla se známou pevným formátem (např. měna) ➢ zobrazeny jako „přeškálovaná...

Více

rozbor zápočtové úlohy

rozbor zápočtové úlohy V sekci je popsán způsob, jakým protokol kóduje bity. Prefix „#“ resp. „_“ před číslem určuje, zda se jedná o puls nebo mezeru. Bezprostředně následující číslo udává délku takového pulsu n...

Více

Operační systémy

Operační systémy Cvičení 8: Komunikace mezi procesy (IPC)

Více

Instrukce a data

Instrukce a data zvýšení indexu do pole aby odkazoval na následující prvek, řídící proměnné cyklu, ... stávající instrukce umožňují pouze použití konstant uložených v paměti – např. přičtení 4 k registru $s3 lw $t0...

Více

Objektov↓ orientovan← programov£n

Objektov↓ orientovan← programov£n System.Windows.Forms.Application.Run(new PrvniOkno());

Více

Distribuované programování na platformě Microsoft .NET

Distribuované programování na platformě Microsoft .NET • Máte pevné číslo portu, tj. nemůžete spustit server dvakrát. • Nemůžete mít víc kanálů stejného typu (např. 2x „http server“ nejde) • Nemůžete přiřadit jen k některým kanálům – všechno ...

Více