Professional Documents
Culture Documents
C++
Jasminka Tomljanovi, vii predava
Veleuilite u Rijeci
Sadraj
Zapisi (strukture)
11/12/16
Jasminka
Tomljanovi, vii predava
Veleuilite u Rijeci
Zapis
Struktura; slog; record
Sloeni tip podatka koji objedinjuje
razliite tipove podataka
Svaka komponenta zapisa ima svoje
ime preko koje joj se pristupa
Ime komponente:
ime_zapisa.ime_komponente
11/12/16
Jasminka
Tomljanovi, vii predava
Veleuilite u Rijeci
Deklaracija zapisa
struct identifikator {
deklaracija komponente_1;
deklaracija komponente_2;
deklaracija komponente_N;
} identifikator;
11/12/16
Jasminka
Tomljanovi, vii predava
Veleuilite u Rijeci
Primjer
struct student {
long int mat_br;
char prez_ime[35];
char adresa[40];
double pros_ocj;
}stud;
11/12/16
Jasminka
Tomljanovi, vii predava
Veleuilite u Rijeci
Komponente zapisa
stud.mat_br;
stud.prez_ime;
stud.adresa;
stud.pros_ocj;
11/12/16
Jasminka
Tomljanovi, vii predava
Veleuilite u Rijeci
Primjer
Napiite program u kojem je definiran
zapis ije su komponente: mat_br,
prez_ime, adresa i pros_ocj koja se
rauna nakon uitanih ocjena. Ispiite
komponente zapisa.
11/12/16
Jasminka
Tomljanovi, vii predava
Veleuilite u Rijeci
#include "stdafx.h"
#include <iostream>
using namespace std;
void main ()
{
int Ocjena=1, B=0, S=0;
struct student {
int mat_br;
char prez_ime[35];
char adresa[40];
double pros_ocj;
}
stud;
11/12/16
Veleuilite u Rijeci
Veleuilite u Rijeci
stud.pros_ocj=(float)S/(B-1);
cout << "Student: " << stud.mat_br << " " <<
stud.prez_ime;
cout<< endl;
cout<<" Adresa: "<<stud.adresa<<endl;
cout<<" Prosjek: " << stud.pros_ocj << endl;
system("pause");
}
11/12/16
Jasminka
Tomljanovi, vii predava
10
11
Veleuilite u Rijeci
Neimenovani zapis
je onaj zapis kojem se odmah
pridruuje varijabla i koristi se samo
tamo gdje je deklariran i nije mu
potrebno dodijeliti ime
Npr.: struct {
long int mat_br;
char prez_ime[35];
char adresa[40];
double pros_ocj;
11/12/16
Jasminka
Tomljanovi, vii predava
12
Veleuilite u Rijeci
struct student{
long int mat_br;
char prez_ime[35];
char adresa[40];
double pros_ocj;
};
int main(){
student stud;
11/12/16
Jasminka
Tomljanovi, vii predava
13
Veleuilite u Rijeci
Sadraj
Vezane liste
11/12/16
Jasminka
Tomljanovi, vii predava
14
Veleuilite u Rijeci
Vezana lista
Vezana lista je oblik dinamikog
uvanja podataka iji broj elemenata
nije unaprijed poznat. Predstavlja skup
elemenata povezanih pokazivaima u:
jednom smjeru => jednostavna
vezana lista
u dva smjera => dvostruko vezana
lista
Temelji se na uporabi struktura (zapisa,
slogova) i pokazivaa tj. osnovni
Jasminka Tomljanovi, vii predava
element liste je struktura koja sadri
11/12/16
15
Veleuilite u Rijeci
16
Veleuilite u Rijeci
(glava_liste)
pocetak_liste
podatak
podatak
podatak
slijedeci
slijedeci
NULL
...
11/12/16
Jasminka
Tomljanovi, vii predava
17
Veleuilite u Rijeci
pocetak_liste
11/12/16
Jasminka
Tomljanovi, vii predava
18
Veleuilite u Rijeci
novi=new element_liste;
novi
*novi
?
?
11/12/16
Jasminka
Tomljanovi, vii predava
19
Veleuilite u Rijeci
novi
*novi
11/12/16
Jasminka
Tomljanovi, vii predava
Prvi
NULL
20
Veleuilite u Rijeci
da bi varijabla pocetak_liste
pokazivala na poetak tj. na prvi
element liste treba joj pridruiti
vrijednost varijable novi naredbom:
pocetak_liste=novi;
dobili smo listu od jednog elementa
pocetak_liste
novi
*novi
11/12/16
Jasminka
Tomljanovi, vii predava
Prvi
NULL
21
Veleuilite u Rijeci
?
?
pocetak_liste
Prvi
NULL
11/12/16
Jasminka
Tomljanovi, vii predava
22
Veleuilite u Rijeci
11/12/16
Jasminka
Tomljanovi, vii predava
23
Veleuilite u Rijeci
Drugi
pocetak_liste
Prvi
NULL
11/12/16
Jasminka
Tomljanovi, vii predava
24
Veleuilite u Rijeci
da bi varijabla pocetak_liste
pokazivala na poetak ponavlja se
naredba pridruivanja:
pocetak_liste=novi;
novi
Drugi
*novi
Prvi
pocetak_liste
11/12/16
Jasminka
Tomljanovi, vii predava
NULL
25
Veleuilite u Rijeci
#include "stdafx.h"
#include <iostream>
using namespace std;
struct element_liste
{
char podatak[10];
element_liste *slijedeci;
};
11/12/16
Jasminka
Tomljanovi, vii predava
26
Veleuilite u Rijeci
27
void main()
{
element_liste *pocetak_liste,*novi;
pocetak_liste=NULL;
cout<<"Upisite sadrzaj liste:"<<endl;
novi=new element_liste;
cin.getline(novi->podatak,10);
while(strcmp(novi->podatak,"")!=0)
{
novi->slijedeci=pocetak_liste;
pocetak_liste=novi;
novi=new element_liste;
cin.getline(novi->podatak,10);
}
cout<<"Sadrzaj liste je:\n";
pisi(pocetak_liste);
}
Veleuilite u Rijeci
11/12/16
Jasminka
Tomljanovi, vii predava
28
Veleuilite u Rijeci
29
Veleuilite u Rijeci
30
kraj liste
NULL
podatkovni
dio
pokaziva na
slijedei element
u listi
glava
32
struct student{
int mat_br;
char prez_ime[35];
podatkovni dio elementa liste
int god_stu;
student *slijedeci;pokaziva na slijedei element u listi
};
33
struct student{
int mat_br;
char prez_ime[35]
int god_stu;
student *slijedeci;
};
34
Veleuilite u Rijeci
11/12/16
Jasminka
Tomljanovi, vii predava
35
36
NULL
NULL
lista
zadnji
novi
37
cout << "Maticni broj: "; cin >> novi -> mat_br;
cout << "Prezime i ime: "; cin >> novi -> prez_ime;
cout << "Godina studija: "; cin >> novi -> god_stu;
upis
podatkovnog
sadraja
38
while
cout << "Maticni broj: " << tekuci -> mat_br
<< endl;
cout << "Prezime i ime: " << tekuci ->
prez_ime << endl;
cout << "Godina studija: " << tekuci ->
god_stu << endl;
kretanje kroz listu
cout << "---------------------"
<< endl;
39
Jasminka Tomljanovi,
vii tekuci
predava
tekuci =
-> slijedeci;
40
mat_br=X
lista
prethodni
NULL
brisi
41
42
NULL
3
lista,
prethodni
tekuci
slijedeci
43
Postupak:
prolazi se ponavljaju dok ima zamjena
(indikator=1)
unutar prolaza koristi se pokaziva tekuci
za kretanje kroz listu
pokaziva slijedeci sadri adresu slijedeeg
elementa u listi
(tekuci -> slijedeci), a prethodni adresu
prethodno elementa
usporede se matini brojevi u tekuem i
slijedeem elementu
ako ima potrebe za zamjenom mjesta:
u tri koraka preusmjere se pokazivai
44
Jasminka Tomljanovi,
vii predava = 1 (indikator zamjene)
indikator
student *prethodni,*tekuci,*slijedeci;
int indikator,brojac=0;indikator zamjene; izlaz je ako ostane 0
do{
nakon prolaza
indikator = 0;
tekuci=lista->slijedeci; tekuci se kree do predzadnjeg
prethodni=lista;
elementa liste
while (tekuci->slijedeci){
uvjet za zamjenu mjesta
slijedeci=tekuci->slijedeci;
if (tekuci->mat_br > slijedeci->mat_br){
prethodni->slijedeci=slijedeci; preusmjeravanje pokazivaa
tekuci->slijedeci=slijedeci->slijedeci;
odgovara zamjeni mjesta
slijedeci->slijedeci=tekuci;
elemenata kod polja
indikator=1;
} //if
Voditi rauna o rasporedu pokazivaa
prethodni, tekuci i slijedeci na tri
prethodni=tekuci;
uzastopna elementa liste!
tekuci=tekuci->slijedeci;
} //while
} Tomljanovi,
while (indikator==1);
45
Jasminka
vii predava
46
lista=dealokacija_liste(lista);
47
Upis podataka
polje:
element polja ve je alociran i pristupa mu se
uz pomo indeksa
int polje[5];
polje[0] = 15;
vezana lista:
potrebno je najprije dinamiki alocirati
element liste i
upisati mu podatkovni sadraj
Ispis podataka
polje:
broj elemenata polja je poznat (zadat
dimenzijom polja),
pa se tipino koristi iteracija tipa for:
int polje[5]={2,5,7,8,4};
for (i=0;i<5;i++)
cout <<polje[i]<< ; // ispis svih
elemenata polja
vezana lista:
broj elemenata vezane liste
unaprijed
Izlaznije
iz petlje
osigurava
zadan,
NULL vrijednost u zadnjem
vezane liste!
tipino se koristi iteracijaelementu
tipa while
:
tekuci = glava -> slijedeci;
while (tekuci){
kretanje kroz listu
50
Jasminka Tomljanovi,
vii predava
cout<<tekuci->mat_br<<endl;
Dealokacija
polje:
statiko polje dealocira se pri zavretku programa
dinamiko polje dealocira se pomou operatora
delete []
51