You are on page 1of 41

Algoritmi i podatkovne

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.

You might also like