Title: Diapozitiv 1
1DINAMICNE TABELE
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Dinamicne podatkovne strukture (tabele) med
izvajanjem programa spreminjajo zasedenost
pomnilnika narašcajo oz. se krcijo (zasegajo in
sprošcajo pomnilnik). Program uporablja samo
toliko pomnilniškega prostora, kot ga v resnici
potrebuje. Dinamicne tabele realiziramo kot
množice podatkovnih elementov, ki so med seboj
povezane s pomocjo kazalcev. Posamezni elementi
se ustvarjajo in brišejo med izvajanjem programa
spreminjamo pa lahko tudi njihove povezave. Z
uporabo kazalcev lahko tvorimo abstraktne
dinamicne podatkovne strukture kot so seznami
(enosmerni, dvosmerni), vrste, skladi, drevesa in
grafi. SEZNAM Seznam je zaporedje nic ali vec
elementov a1, a2, a3, an. Pri tem je a1 prvi
element seznama in an zadnji element. Elementi
seznama niso urejeni po velikosti ali kako
drugace. Posamezni elementi seznama se lahko
veckrat ponavljajo. Predpisan jim je le vrstni
red, kako si sledijo. Elementi seznama vsebujejo
vsaj dve komponenti element in kazalec na
naslednji element v seznamu.
Zaslon
2DINAMICNE TABELE
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Definicija strukture za enosmerni seznam celih
števil struct element_seznama int st
//element element_seznama nasl
//kazalec na naslednji element element_seznama
zacetek //kazalec na zacetek
seznama Na zacetku izvajanja programa elementi
seznama števil še ne obstajajo. Kazalec zacetek
ima nedefinirano vrednost pomnilniški prostor za
elemente pa je potrebno najprej ustvariti. Za to
uporabimo operator new element_seznama el
//deklaracija kazalca el new(element_seznama
) //zaseganje pomnilniškega prostora el-gtst
50 //dolocitev vrednosti elementa el-gtnasl
NULL //kazalec iz tega elementa kaže na
NULL zacetek el //kazalec zacetek bo
kazal na ta element
el
0x0012ff40
0x0012ffa4
el-gtnasl
NULL
el-gtst
50
0x0012ff40
Zaslon
element_seznama
st
nasl
NULL
zacetek
50
3ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
- Enosmerni seznam vsebuje vrednosti komponent
elementa in kazalec na naslednji element v
seznamu. - Osnovne operacije nad enosmernim seznamom so
- dodajanje elementa na zacetek seznama
- dodajanje novega elementa na konec
- vstavljanje v seznam pred ali za podanim
elementom - brisanje elementa iz seznama,
zacetek
0x0012ff40
0x0012ffa4
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
a1
a2
a3
a3.nasl
NULL
st
nasl
st
nasl
st
nasl
zacetek
NULL
50
110
32
a3.st
32
0x0012fc42
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
4ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Dodajanje novega elementa na zacetek seznama
a1
a2
a3
zacetek
0x0012ff40
0x0012ffa4
st
nasl
st
nasl
st
nasl
zacetek
NULL
50
110
32
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
a0
st
nasl
a3.nasl
NULL
99
a3.st
32
0x0012fc42
a0.nasl
a0.st
99
0x0012fb20
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
5ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Dodajanje novega elementa na zacetek seznama
a1
a2
a3
zacetek
0x0012fb20
0x0012ffa4
st
nasl
st
nasl
st
nasl
NULL
50
110
32
a1.nasl
0x0012fa36
zacetek
a1.st
50
0x0012ff40
a0
st
nasl
a3.nasl
NULL
99
a3.st
32
0x0012fc42
0x0012ff40
a0.nasl
int vstavi_zacetek(int podatek)
element_seznama el el new(element_seznama
) el-gtst podatek el-gtnasl zacetek
zacetek el return (1)
a0.st
99
0x0012fb20
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
6ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Dodajanje novega elementa na konec seznama
a1
a2
a3
zacetek
0x0012ff40
0x0012ffa4
st
nasl
st
nasl
st
nasl
zacetek
NULL
50
110
32
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
a4
st
nasl
a3.nasl
NULL
99
a3.st
32
0x0012fc42
a4.nasl
a4.st
99
0x0012fb20
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
7ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Dodajanje novega elementa na konec seznama
a1
a2
a3
zacetek
0x0012ff40
0x0012ffa4
st
nasl
st
nasl
st
nasl
zacetek
50
110
32
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
int vstavi_konec(int podatek)
element_seznama el element_seznama
seznam el new(element_seznama) el-gtst
podatek el-gtnasl NULL if(zacetek
NULL) zacetek el else
seznam zacetek
while(seznam-gtnasl ! NULL) seznam
seznam-gtnasl seznam-gtnasl el
return (1)
a4
st
nasl
NULL
a3.nasl
0x0012fb20
99
a3.st
32
0x0012fc42
NULL
a4.nasl
a4.st
99
0x0012fb20
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
8ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Vstavljanje v seznam pred ali za podanim
elementom
a1
a2
a3
zacetek
0x0012ff40
0x0012ffa4
st
nasl
st
nasl
st
nasl
zacetek
NULL
50
110
32
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
a4
st
nasl
a3.nasl
NULL
99
a3.st
32
0x0012fc42
a4.nasl
a4.st
99
0x0012fb20
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
9ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Vstavljanje v seznam pred ali za podanim
elementom
a1
a2
a3
zacetek
0x0012ff40
0x0012ffa4
st
nasl
st
nasl
st
nasl
zacetek
NULL
50
110
32
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
a4
st
nasl
a3.nasl
NULL
99
a3.st
32
0x0012fc42
0x0012fc42
a4.nasl
a4.st
99
0x0012fb20
a2.nasl
0x0012fb20
a2.st
110
0x0012fa36
Zaslon
10ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Brisanje elementa iz seznama
zacetek
0x0012ff40
0x0012ffa4
a1
a2
a3
st
nasl
st
nasl
st
nasl
zacetek
NULL
a1.nasl
0x0012fa36
50
110
32
a1.st
50
0x0012ff40
a3.nasl
NULL
a3.st
32
0x0012fc42
a2.nasl
0x0012fc42
a2.st
110
0x0012fa36
Zaslon
11ENOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Brisanje elementa iz seznama
(delete)
zacetek
0x0012ff40
0x0012ffa4
a1
a2
a3
st
nasl
st
nasl
st
nasl
zacetek
NULL
a1.nasl
0x0012fc42
50
110
32
a1.st
50
0x0012ff40
Pogosto je naloga obdelati vse elemente v
seznamu. Za to je potreben sprehod po seznamu.
Obhod elementov naredimo takole
a3.nasl
NULL
a3.st
32
0x0012fc42
int obdelavaSeznama( ) element_seznama
seznam seznam zacetek while(seznam !
NULL) //obdelava elementov
seznam seznam-gtnasl return (1)
Zaslon
12DVOSMERNI SEZNAM
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Dvosmerni seznam vsebuje vrednosti komponent
elementa in kazalec na naslednji element ter
kazalec na prejšnji element v seznamu. Definicija
strukture struct element_seznama int st
//element element_seznama nasl
//kazalec na naslednji element
element_seznama pred //kazalec na prejšnji
element element_seznama zacetek NULL
//kazalec na zacetek element_seznama konec
NULL //kazalec na konec
zacetek
0x0012ff40
0x0012ffa4
konec
0x0012fc42
0x0012ffa0
a1.pred
NULL
a1.nasl
0x0012fa36
a1.st
50
0x0012ff40
a3.pred
0x0012fa36
a3.nasl
NULL
a3.st
32
0x0012fc42
a2.pred
0x0012ff40
zacetek
konec
a2.nasl
0x0012fc42
a2
a1
a3
a2.st
110
0x0012fa36
nasl
NULL
st
pred
nasl
st
pred
nasl
st
pred
110
50
32
NULL
Zaslon
13SKLAD
POMNILNIK
Fizicni naslovi
Logicni naslovi
Vsebina
Sklad je podatkovna struktura, ki si jo najlaže
predstavljamo s skladom knjig. Novo knjigo vedno
dodamo na vrh sklada in ko jemljemo knjige s
sklada, jih vedno jemljemo z vrha. Na vrh sklada
kaže kazalec sklada. Ce na skladu ni nobenega
elementa, potem ima kazalec sklada vrednost NULL
(ne kaže nikamor). struct elem int st
elem predhodnik elem vrh_sklada
NULL void vstavi(int podatek) //operacija
vstavi (push) elem el new(elem)
el-gtst podatek el-gtpredhodnik
vrh_sklada vrh_sklada el void
vzami(int r_st) //operacija vzami (pop)
elem el_odstrani vrh_sklada r_st
el_odstrani-gtst vrh_sklada
vrh_sklada-gtpredhodnik delete el_odstrani
NALOGA Napiši funkcijo main(), ki bo
implementirala sklad.
Zaslon