Professional Documents
Culture Documents
02 Dinamicke Strukture
02 Dinamicke Strukture
strukture
STRUKTURE PODATAKA
Bruno Trstenjak
Meimursko veleuilite
Meimursko veleuilite, Bruno Trstenjak
2
Strukture podatka - osnove
to je podatak?
objekt kojim moemo upravljati
informacija koju daje program
informacija niz bitova
koristimo apstraktni opis podataka koji se koristi u
programu
enkapsulacija apstraktnih podataka (engl.
encapsulation) onemoguivanje pristupa podacima
razreda samo putem ugraenim metodama (funkcijama)
unutar razreda.
Meimursko veleuilite, Bruno Trstenjak
3
Strukture podatka - osnove
apstraktnim podacima pristupamo preko ugraenih
funkcija
apstraktni tip podatka (engl. abstract data type) ADT
engl. Data structure
skupine podataka povezane u logiku cjelinu
to predstavlja ADT
potrebno je odrediti nain pristupa elementima
strukture
svaka struktura moe biti ralanjena na osnovne
komponente (engl. decomposed)
Meimursko veleuilite, Bruno Trstenjak
4
Strukture podatka - definiranje
Primjer - knjinica
osmislimo podatkovnu strukturu za knjinicu
podatkovna struktura moe rastaviti na osnovne
elemente knjige (engl. decomposed)
kolekcija knjiga moemo logiki poredati na razne
naine (prema abecedi, prema autorima, prema
anru, )
pristup pojedinoj knjizi potrebne su posebne
instrukcije (enkapsulacija)
fizika struktura knjinice (u memoriji) i apstraktni
model knjinice (logiki) su razliiti
Meimursko veleuilite, Bruno Trstenjak
5
Strukture podatka - definiranje
razlika izmeu apstraktne strukture i podatkovne
strukture
uvodi se vii nivo opisa strukture podataka
(engl. high-level description)
osim opisa elemenata strukture uvode se i
operacije za manipuliranje podacima strukture
operacije nad strukturom podataka predstavljaju
algoritme
Meimursko veleuilite, Bruno Trstenjak
6
Strukture podatka - definiranje
Operacije za rad s strukturama podataka
dodavanje i brisanje novih knjiga u knjinicu
promjena podataka o knjigama
ispis knjiga prema zadanom uvjetu
rezervacija knjiga i sl.
U toku razvoja programa podatke promatramo na tri
razine:
Aplikacijska ili korisnika razina modeliranje
podataka koje koristimo u stvarnom ivotu
Logika razina apstraktni opis podataka
Implementacijska razina prikaz podataka i
operacija u odabranom programskom jeziku
Meimursko veleuilite, Bruno Trstenjak
7
Strukture podatka - definiranje
trea razina opisuje kako su ti podaci prezentirani u memoriji
raunala te kako se s njima manipulira
operacije nad podacima moemo grupirati:
konstruktori (engl. constructors)
operacije mijenjanja (engl. transformers)
operacije pregleda (engl. observers)
iteratore (engl. iterators)
Constructors slue za kreiranje objekata koji prikazuju
apstraktne podatke
Transformers predstavljaju operacije kojima se mijenjaju
podaci
Observers operacije koje omoguuju pregled stanja i
vrijednosti podataka
Iterators operacije koje omoguavaju sekvencijalan/direktan
pristup podacima
Meimursko veleuilite, Bruno Trstenjak
8
Strukture podatka - definiranje
Strukture podataka mogue je kreirati pomou:
zapis (engl. records structs)
klase (engl. classes)
nizovi/polja razliitih dimenzija
Meimursko veleuilite, Bruno Trstenjak
9
Strukture podatka - Zapis
Zapis (engl. record)
Primjer
struct KNJIGA {
char autor[60];
int godina;
char izdavac[20];
}
KNJIGA K1;
K1.autor=Miroslav Krlea;
K1.godina=2009;
K!.izdavac=kolska knjiga;
Meimursko veleuilite, Bruno Trstenjak
10
Strukture podatka - Zapis
Zapis (engl. record)
grafiki prikaz zapisa
K1
.autor Miroslav Krlaa
.godina 2009
.izadac kolska knjiga
Meimursko veleuilite, Bruno Trstenjak
11
Strukture podatka - Klasa
Klasa (engl. classes)
predstavlja viu razinu prikaza strukture podataka
struktura iji elementi mogu biti podatci i funkcije za
rad s podacima
element klase moe biti neka druga klasa
klasa podrava enkapsulaciju
klasa je definirana u dva dijela:
specifikacija - elementi klase
implementacija mehanizmi za rad s klasom i
podacima
Meimursko veleuilite, Bruno Trstenjak
12
Strukture podatka - Klasa
Specifikacija klase
// deklaracija klase i ADT podataka
class Knjiga
{
public:
void Inicialize(string naziv, int godina, string autor);
string getNaziv() const; // vraa naziv knjige
int getGodina() const; // vraa godinu izdavanja
string getAutor() const; // vraa naziv autora
private:
string naziv;
int godina;
string autor;
};
Meimursko veleuilite, Bruno Trstenjak
13
Strukture podatka - Klasa
Specifikacija klase
podatkovni elementi klase su: naziv, godina i autor
podaci su oznaeni kao privatni
podacima se moe prii samo preko funkcija klasa
funkcijski lanovi klase su: Initialize, getNaziv,
getGodina i getAutor
Initialize predstavlja konstruktora klase
const garantira da ne moe doi do promjena
podatkovnog elementa kada pristupamo podatku
specifikacija klase mogue staviti u datoteku
Knjiga.h
Meimursko veleuilite, Bruno Trstenjak
14
Strukture podatka - Klasa
Implementacija klase
detaljno se definiraju funkcijski lanovi
implementacija klase nalazi se u datoteci Knjiga.cpp
#include Knjiga.h // specifikacija klase
void Knjiga::Initialize
(string nazivNew, int godinaNew, string autorNew)
{
naziv=nazivNew;
godina=godinaNew;
autor=autorNew;
}
Meimursko veleuilite, Bruno Trstenjak
15
Strukture podatka - Klasa
Implementacija klase
string Knjiga::getNaziv() const
{
return naziv;
}
int Knjiga::getGodina() const
{
return godina;
}
string Knjiga::getAutor() const
{
return autor;
}
Meimursko veleuilite, Bruno Trstenjak
16
Strukture podatka - Klasa
Koritenje klase
u programu gdje koristimo klasu moramo imati
predprocesorsku naredbu koja ukljuuje specifikaciju klase
#include Knjiga.h
Knjiga K_1, K_2; // odreivanje objekta tipa Knjiga
K_1.Initialize(Zastave, 2009, M.Krlea);
cout << Naziv knjige: << K_1.getNaziv() << endl;
cout << Autor knjige: << K_1.getAutor() << endl;
cout << Godina izdavanja: << K_1.getGodina() << endl;
Meimursko veleuilite, Bruno Trstenjak
17
Razlike izmeu zapisa i klase
podatkovni tipovi po poetnoj vrijednosti (engl.
default)
javni (engl. public) kod zapisa
zatieni / privatni (engl. private) kod klase
zapis ima pasivnu strukturu podataka
zapis obino ima globalne funkcije za rad
klasa ima aktivnu strukturu podataka
klasa je objektno orijentirana i osnova je svakog
objekta
Meimursko veleuilite, Bruno Trstenjak
18
Primjer upotrjebe klase
Zadatak 1:
Kreiraj klasu student
omogui dodavanje, brisanje i izmjenu podataka o
studentu
omogui ispis popisa studenata
omogui ispis podatka o odabranom studentu
omogui ispis studenata prema odabranom mjestu
stanovanja
Meimursko veleuilite, Bruno Trstenjak
19
Primjer upotrjebe klase
Definiranje klase i funkcijskih lanova
class Student
{
public:
void Inicijalizacija(string OIB,string ime, string prezime, string adresa, int
godina);
void getStudent( string OIB); // ispis podataka o studentu
string getOIB() const; string getIme() const; string getPrezime() const;
void upisStudenta( Student data); // upis novog studenta
void brisiStudenta( string OIB); // brie studenta iz popisa
void popisStudenata(); // ispis svih upisanih studenata
vector <Student> studentiAdresa( string adresa);
private:
string OIB;
string ime;
string prezime;
string adresa;
int godina;
};
Meimursko veleuilite, Bruno Trstenjak
20
Primjer upotrjebe klase
Objanjenje:
specifikacija klase nalazi se u datoteci student.h
podatkovnu strukturu (ADT) ine sljedei podaci:
string OIB jedinstva oznaka studenta
string ime ime studenta
string prezime prezime studenta
string adresa adresa stanovanja
int godina godina roenja
svim podacima moe se pristupiti samo preko
funkcijskih lanova
Meimursko veleuilite, Bruno Trstenjak
21
Primjer upotrjebe klase
Funkcijski lanovi klase:
// inicijalizacija novog lana klase
void Inicijalizacija
(string OIB,string ime, string prezime, string adresa, int godina);
// pristup podacima o studentu prema zadanoj vrijednosti OIB-a
void getStudent( string OIB);
// funkcija vraa OIB studenta
string getOIB() const;
// funkcija kojom moemo upisati studenta u podatkovnu strukturu
void upisStudenta( Student data);
// funkcija brie podatke o studentu iz podatkovne strukture
void brisiStudenta( string OIB);
// funkcija ispisuje sve upisane studente
void popisStudenata();
// funkcija vraa vektor s podacima o studentima koji imaju istu adresu
stanovanja
vector <Student> studentiAdresa( string adresa);
Meimursko veleuilite, Bruno Trstenjak
22
Primjer upotrjebe klase
Implementacija funkcija u klasi:
svi podaci nalaze se u datoteci student.cpp
#include student.h // specifikacija klase
void Student::Inicijalizacija
(string OIBNew,string imeNew, string prezimeNew, string
adresaNew, int godinaNew);
{
OIB=OIBNew;
ime=imeNew;
prezime=prezimeNew;
adresa=adresaNew;
godina=godinaNew;
}
Meimursko veleuilite, Bruno Trstenjak
23
Primjer upotrjebe klase
Implementacija funkcija u klasi:
string Student::getOIB () const;
{
return OIB;
}
string Student::getIme () const;
{
return ime;
}
string Student::getPrezime () const;
{
return prezime;
}
string Student::getAdresa () const;
{
return adresa;
}
Meimursko veleuilite, Bruno Trstenjak
24
Primjer upotrjebe klase
Implementacija funkcija u klasi:
u programu svi podaci o studentima nalazit e se zapisani u vektoru
funkcija provjerava sadraj vektora i trai studenta koji ima OIB koji je
zadan kao argument funkcije
void Student:: getStudent (string OIB)
{
Student S;
for(int x=0; x<vec.length(); x++){
S=(Student)vec.at(x);
if( S.getOIB() == OIB)
break;
}
cout << Podatci o studentu: << endl;
cout << Ime i prezime << S.getIme()<< << S.getPrezime();
cout << endl;
}
Meimursko veleuilite, Bruno Trstenjak
25
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija upisuje podatke o studentu u vektor
void Student:: upisStudenta( Student S)
{
vec.push_back( S );
}
Meimursko veleuilite, Bruno Trstenjak
26
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija brie traenog studenta iz podatkovne strukture (vektora)
funkcija usporeuje OIB svakog studenta
void Student:: brisiStudenta(string OIB)
{
Student S;
for(int x=0; x<vec.length(); x++){
S=(Student)vec.at(x);
if( S.getOIB() == OIB){
vec.erase(x);
break;
}
}
}
Meimursko veleuilite, Bruno Trstenjak
27
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija ispisuje sve studente koji su zapisani u vektoru
void Student:: popisStudenata ()
{
Student S;
cout << Podatci o studentu: << endl;
for(int x=0; x<vec.length(); x++){
S=(Student)vec.at(x);
cout << Ime i prezime << S.getIme()<< << S.getPrezime();
cout << endl;
}
}
Meimursko veleuilite, Bruno Trstenjak
28
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija ispisuje sve studente koji su zapisani u vektoru
vector <Student> Student:: studentiAdresa ( string adresa)
{
Student S;
vector <Student> vv;
for(int x=0; x<vec.length(); x++){
S=(Student)vec.at(x);
if ( S.getAdresa() == adresa)
vv.push_back(S);
}
return vv;
}
Meimursko veleuilite, Bruno Trstenjak
29
Primjer upotrjebe klase
Zadatak 2:
Kreiraj klasu automobil
omogui dodavanje, brisanje podataka o
automobilima
omogui ispis automobila po odreenom kriteriju:
proizvoau
godini proizvodnje
zapremini
Meimursko veleuilite, Bruno Trstenjak
30
Definiranje klase i funkcijskih lanova
class Automobil
{
public:
void Inicijalizacija(string marka,string naziv, int godiste, int zapremina);
void getAuto( string marka);
string getMarka() const; string getNaziv() const; int getGodiste() const;
int getZapremina() const;
void upisAuta( Automobil data);
void popisGodista( int godiste);
void popisZapremina();
void popisMarka();
private:
string marka;
string naziv;
int godiste;
int zapremina;};
Meimursko veleuilite, Bruno Trstenjak
31
Primjer upotrjebe klase
Objanjenje:
specifikacija klase nalazi se u datoteci automobil.h
podatkovnu strukturu (ADT) ine sljedei podaci:
string marka marka automobila
string naziv naziv automobila
int godiste godina proizvodnje automobila
int zapremina obujam zapremine motora
svim podacima moe se pristupiti samo preko
funkcijskih lanova
Meimursko veleuilite, Bruno Trstenjak
32
Primjer upotrjebe klase
Funkcijski lanovi klase:
// inicijalizacija novog lana klase
void Inicijalizacija
(string marka,string naziv, int godiste, int zapremina);
// odreivanje marke odabranog automobila
void getMarka( ) const;
// odreivanje naziva odabranog automobila
void getNaziv( ) const;
// odreivanje godista odabranog automobila
void getGodiste( ) const;
// odreivanje zapemine odabranog automobila
void getZapremina( ) const;
Meimursko veleuilite, Bruno Trstenjak
33
Primjer upotrjebe klase
Funkcijski lanovi klase:
// funkcija ispie podatke o automobilu na osnovi naziva argumenta
funkcije
void getAuta( string naziv);
// funkcija zapisuje podatke u vektor gdje su zapisani svi podatci o
automobilima
void upisAuta( Automobil data);
// funkcija ispie podatke o automobilima koji su istog godita kao i
argument funkcije
void popisGodista( int godiste );
// funkcija ispie podatke o automobilima koji su iste zapremine kao
i argument funkcije
void popisZapremina( int zapremina );
// funkcija ispie podatke o automobilima koji su iste marke kao i
argument funkcije
void popisMarka( string marka );
Meimursko veleuilite, Bruno Trstenjak
34
Primjer upotrjebe klase
Implementacija funkcija u klasi:
svi podaci nalaze se u datoteci automobil.cpp
#include automobil.h // specifikacija klase
void Automobil::Inicijalizacija
(string markaNew, string nazivNew, int godisteNew, int
zapreminaNew);
{
marka = markaNew;
naziv = nazivNew;
godiste = godisteNew;
zapremina = zapreminaNew;
}
Meimursko veleuilite, Bruno Trstenjak
35
Primjer upotrjebe klase
Implementacija funkcija u klasi:
string Automobil ::getMarka () const;
{
return marka;
}
string Automobil ::getNaziv () const;
{
return naziv;
}
int Automobil ::getGodiste () const;
{
return godiste;
}
int Automobil ::getZapremina() const;
{
return zapremina;
}
Meimursko veleuilite, Bruno Trstenjak
36
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija ispisuje sve studente koji su zapisani u vektoru
void Automobil:: getAuto (string naziv)
{
Automobil A;
cout << Podatci o automobilu: << endl;
for(int x=0; x<vec.length(); x++){
A = ( Automobil )vec.at(x);
cout << Marka automobila: << A.getMarka()<< endl;
cout << Naziv automobila: << A.getNaziv()<< endl;
cout << Godite automobila: << A.getGodiste()<< endl;
cout << Zapremina automobila: << A.getZapremina()<< endl;
}
}
Meimursko veleuilite, Bruno Trstenjak
37
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija upie podatke o automobilu u vektor
void Automobil:: upisAuta (Automobil data)
{
vec.push_back( data );
}
Meimursko veleuilite, Bruno Trstenjak
38
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija ispie sve automobile koji su odreenog godita
void Automobil:: popisGodista (int godiste)
{
Automobil A;
cout << Podatci o automobilima koji su << godiste << godita ;
cout << endl;
for(int x=0; x<vec.length(); x++){
A=(Automobil )vec.at(x);
if ( A.getGodiste() == godiste)
cout << Naziv automobila: << A.getNaziv()<< << endl;
}
}
Meimursko veleuilite, Bruno Trstenjak
39
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija ispie sve automobile koji imaju traenu zapreminu
motora
void Automobil:: popisZapremina (int zap)
{
Automobil A;
cout << Podatci o automobilima zapremine << zap << endl;
for(int x=0; x<vec.length(); x++){
A=(Automobil )vec.at(x);
if ( A.getZapremina() == zap)
cout << Naziv automobila: << A.getNaziv()<< << endl;
}
}
Meimursko veleuilite, Bruno Trstenjak
40
Primjer upotrjebe klase
Implementacija funkcija u klasi:
funkcija ispie sve automobile koji imaju traenu zapreminu
motora
void Automobil:: popisMarka ( string marka)
{
Automobil A;
cout << Podatci o automobilima marke << marka << endl;
for(int x=0; x<vec.length(); x++){
A=(Automobil )vec.at(x);
if ( A.getMarka() == marka)
cout << Naziv automobila: << A.getNaziv()<< << endl;
}
}
Meimursko veleuilite, Bruno Trstenjak
41
Primjer upotrjebe klase
Zadatak:
Potrebno je kreirati klasu Racunalo koja e opisivati
entitete potrebne za opisivanje svojstava raunala
U klasi definirajte osnovne funkcijske lanove klase.