Strukture podataka i algoritmi - lnr.irb.hrlnr.irb.hr/soya/nastava/predavanje1.pdf · 3 Osnovni...
Transcript of Strukture podataka i algoritmi - lnr.irb.hrlnr.irb.hr/soya/nastava/predavanje1.pdf · 3 Osnovni...
Strukture podataka i algoritmiStrukture podataka i algoritmi
ŠŠkolska godina 2005/2006kolska godina 2005/2006
Neven Neven SoiSoiććInstitut Ruñer BoInstitut Ruñer Bošškovikovićć
Zavod za eksperimentalnu fizikuZavod za eksperimentalnu fiziku2. krilo, soba 129A2. krilo, soba 129A
EmailEmail: : [email protected]@lnr.irb.hrTelefon 4561026Telefon 4561026
22
OpOpććenitoenito o o predmetupredmetu�� SadrSadržžajaj kolegijakolegija: :
�� UvodUvod:: PojamPojam tipatipa, , apstraktnogapstraktnog tipatipa i i strukturestrukture podatakapodataka. . ElementiElementi odod kojihkojih se se gradigradistrukturastruktura: : poljepolje, , zapiszapis, , pokazivapokazivačč ((pointerpointer)), , kursorkursor. . PojamPojam algoritmaalgoritma, , zapisivanjezapisivanje i i analiziranjeanaliziranje algoritamaalgoritama. .
�� PregledPregled raznihraznih apstraktnihapstraktnih tipovatipova:: ListaLista, , stogstog (stack), red, (stack), red, ureñenoureñeno i i binarnobinarnostablostablo, , skupskup, , rjerječčniknik, , prioritetniprioritetni red, red, preslikavanjepreslikavanje. .
�� PregledPregled raznihraznih strukturastruktura podatakapodataka:: VezanaVezana listalista i i drugedruge vezanevezane strukturestrukture, hash , hash tablicatablica, , binarnobinarno stablostablo tratražženjaenja, , gomilagomila (heap). (heap).
�� AlgoritmiAlgoritmi zaza obavljanjeobavljanje osnovnihosnovnih operacijaoperacija nadnad strukturamastrukturama:: UbacivanjeUbacivanje i i izbacivanjeizbacivanje podatakapodataka, , tratražženjeenje, , ispisispis sadrsadržžajaaja i i slsl. .
�� PrimjenaPrimjena opisanihopisanih strukturastruktura u u slosložženijimenijim algoritmimaalgoritmima:: SortiranjeSortiranje i i sasažžimanjeimanjenizovanizova podatakapodataka, , izvrednjavanjeizvrednjavanje aritmetiaritmetiččkihkih izrazaizraza, , raznirazni rekurzivnirekurzivni postupcipostupci. .
�� OpOpććeniteenite tehniketehnike ((strategijestrategije) ) zaza konstrukcijukonstrukciju algoritamaalgoritama:: ""PodijeliPodijeli pa pa vladajvladaj", ", dinamidinamiččkoko programiranjeprogramiranje, ", "pohlepnipohlepni" " pristuppristup, "backtracking", , "backtracking", lokalnolokalno pretrapretražživanjeivanje. .
33
Osnovni pojmoviOsnovni pojmovi
�� Strukture podataka Strukture podataka –– statistatiččki aspekt programa ki aspekt programa –– ono sa ono sa ččime se radiime se radi�� Algoritmi Algoritmi –– dinamidinamiččki aspekt programa ki aspekt programa –– ono ono ššto se radito se radi�� meñusobno su vezani i utjemeñusobno su vezani i utječču jedno na drugou jedno na drugo�� Pojmovi koji se Pojmovi koji se ččesto koriste:esto koriste:�� tip podataka: skup vrijednosti koje neki podatak motip podataka: skup vrijednosti koje neki podatak možže poprimitie poprimiti�� apstraktni tip podatka: zadan jedan ili viapstraktni tip podatka: zadan jedan ili višše tipova podataka, te jedne ili vie tipova podataka, te jedne ili višše e
operacija (funkcija) operacija (funkcija) –– operandi i rezultati operacija su podaci danog tipaoperandi i rezultati operacija su podaci danog tipa�� Struktura podataka: skupinaStruktura podataka: skupina varijabli u programu i veza meñu njima varijabli u programu i veza meñu njima�� Algoritam: konaAlgoritam: konaččni niz instrukcija od kojih svaka ima jasno znani niz instrukcija od kojih svaka ima jasno značčenje i moenje i možže biti e biti
izvrizvrššena u konaena u konaččnom vremenunom vremenu�� Implementacija apstraktnog tipa podataka: konkretna realizacija Implementacija apstraktnog tipa podataka: konkretna realizacija ATP u ATP u
programu, sastoji se od definicije za strukturu podataka i od poprogramu, sastoji se od definicije za strukturu podataka i od potprogramatprograma
55
AlgoritamAlgoritam
�� PreciznoPrecizno opisanopisan nanaččinin rjerješšenjaenja nekognekog problemaproblema�� JednoznaJednoznaččnono odreñodreñujeuje šštoto trebatreba napravitinapraviti�� MorajuMoraju bitibiti definiranidefinirani popoččetnietni objektiobjekti kojikoji pripadajupripadaju nekojnekoj klasiklasi objekataobjekata nana
kojimakojima se se obavljajuobavljaju operacijeoperacije�� Kao Kao ishodishod algoritmaalgoritma pojavepojave se se zavrzavrššnini objekt(iobjekt(i) ) iliili rezultat(irezultat(i).).�� KonaKonaččnini brojbroj korakakoraka; ; svakisvaki korakkorak opisanopisan instrukcijominstrukcijom�� ObavljanjeObavljanje jeje algoritamskialgoritamski procesproces�� UporabljivUporabljiv, , akoako se se dobijedobije rezultatrezultat u u konakonaččnomnom vremenuvremenu
�� PrimjeriPrimjeri zaza nedopunedopušštenetene instrukcijeinstrukcije::�� izraizraččunajunaj 5/05/0�� uveuveććajaj x x zaza 6 6 iliili 77
66
ProceduraProcedura
�� PostupakPostupak kojikoji imaima svasva svojstvasvojstva kaokao i i algoritamalgoritam, , aliali nene moramora zavrzavrššitiiti u u konakonaččnomnom brojubroju korakakoraka jest jest raraččunaunalnalna proceduraprocedura. U . U jezikujeziku C to C to momožžee bitibiti voidvoid
funkcijafunkcija�� PrimjeriPrimjeri zaza proceduruproceduru: :
�� OperacijskiOperacijski sustavsustav raraččunalaunala�� UreñivaUreñivačč tekstateksta
�� VrijemeVrijeme izvoñenjaizvoñenja moramora bitibiti ""razumnorazumno""�� PrimjerPrimjer::
�� AlgoritamAlgoritam kojikoji bi bi izabiraoizabirao potezpotez igraigraččaa ššahaaha takotako dada ispitaispita svesve mogumoguććee posljediceposljedicepotezapoteza, , zahtijevaozahtijevao bi bi milijardemilijarde godinagodina nana najbrnajbržžemem zamislivomzamislivom raraččunaluunalu..
Algoritam
Procedura
77
AlgoritmiAlgoritmi i i programiprogrami
�� ProgramProgram -- OpisOpis algoritmaalgoritma kojikoji u u nekomnekom programskomprogramskom jezikujeziku jednoznajednoznaččnonoodreñujeodreñuje šštoto raraččunalounalo trebatreba napravitinapraviti..
�� ProgramiranjeProgramiranje -- naunauččitiiti sintaksusintaksu nekognekog proceduralnogproceduralnog jezikajezika i i stesteććii osnovnaosnovnaintuitivnaintuitivna znanjaznanja gledeglede algoritmizacijealgoritmizacije problemaproblema opisanogopisanog rijeriječčimaima..
�� AlgoritmiAlgoritmi + + strukturestrukture podatakapodataka = PROGRAMI= PROGRAMI
�� kakokako osmislitiosmisliti algoritmealgoritme�� kakokako strukturiratistrukturirati podatkepodatke�� kakokako formuliratiformulirati algoritmealgoritme�� kakokako verificirativerificirati korektnostkorektnost algoritamaalgoritama�� kakokako analiziratianalizirati algoritmealgoritme�� kakokako provjeritiprovjeriti ((testiratitestirati) program) program
�� PostupciPostupci izradeizrade algoritamaalgoritama nisunisu jednoznajednoznaččnini tete zahtijevajuzahtijevaju i i kreativnostkreativnost. . InaInaččee bi bi vevećć postojalipostojali generatorigeneratori algoritamaalgoritama. . ZnaZnaččii dada se (se (zaza sadasada?) ?) gradivogradivoovogovog predmetapredmeta nene momožžee u u potpunostipotpunosti algoritmiziratialgoritmizirati. . KoristitKoristit ććee se se programskiprogramski jezikjezik C. C. ZaZa sasažžetieti opisopis slosložženijihenijih algoritamaalgoritama momožžee se se koristitikoristitipseudokodpseudokod..
88
Elementi od kojih se grade strukture podatakaElementi od kojih se grade strukture podataka
�� Manje cjeline se udruManje cjeline se udružžuju u veuju u većće i meñusobno su vezanee i meñusobno su vezane�� Uvode se posebni nazivi za cjeline, naUvode se posebni nazivi za cjeline, naččine udruine udružživanja i naivanja i naččine povezivanjaine povezivanja�� ĆĆelija (elija (cellcell): varijabla koju promatramo kao zasebnu cjelinu; svaka ima svoj): varijabla koju promatramo kao zasebnu cjelinu; svaka ima svoj tip tip
i adresui adresu�� Polje (Polje (arrayarray): mehanizam udru): mehanizam udružživanja manjih dijelova strukture u veivanja manjih dijelova strukture u većće. Polje e. Polje
ččini viini višše e ććelija istog tipa (element polja) pohranjeno na uzastopnim adresaelija istog tipa (element polja) pohranjeno na uzastopnim adresama; ma; broj broj ććelija zadan i nepromjenljivelija zadan i nepromjenljiv
�� Zapis Zapis –– slog: mehanizam udruslog: mehanizam udružživanja manjih dijelova strukture u veivanja manjih dijelova strukture u većće. e. ĆĆelije elije (komponente zapisa) ne moraju biti istog tipa, ali su pohranjene(komponente zapisa) ne moraju biti istog tipa, ali su pohranjene na na uzastopnim adresama. Broj, redoslijed i tip uzastopnim adresama. Broj, redoslijed i tip ććelija su zadani i nepromjenljivi.elija su zadani i nepromjenljivi.
�� PokazivaPokazivačč ((pointerpointer): us): uspostavlja vezu izmeñu dijelova strukturapostavlja vezu izmeñu dijelova struktura, , ććelija koja elija koja pokazuje neku drugu pokazuje neku drugu ććeliju; njen sadreliju; njen sadržžaj je adresa druge aj je adresa druge ććelijeelije
�� Kursor: usposKursor: uspostavlja vezu izmeñu dijelova strukturatavlja vezu izmeñu dijelova struktura, , ććelija koja pokazuje na elija koja pokazuje na element nekog poljaelement nekog polja
99
StatiStatiččkeke strukture podatakastrukture podataka
OsnovniOsnovni tipovitipovi
�� charchar -- znakovniznakovni tip (1 By)tip (1 By)�� intint -- cjelobrojnicjelobrojni tip (tip (standardno standardno 4 By)4 By)�� floatfloat -- realnirealni tip (4 By)tip (4 By)�� doubledouble -- realnirealni tip u tip u dvostrukojdvostrukoj preciznostipreciznosti (8 By)(8 By)
�� RazlikaRazlika jeje izmeñuizmeñu preciznostipreciznosti ((precisionprecision) i ) i totoččnostinosti ((accuracyaccuracy). ). �� PreciznostPreciznost se se iskazujeiskazuje brojembrojem prvihprvih vavažžeeććihih totoččnihnih znamenkiznamenki, a , a totoččnostnost jeje bliskostbliskost
stvarnojstvarnoj ((nepoznatojnepoznatoj) ) vrijednostivrijednosti. . �� ZaZa dovoljnudovoljnu totoččnostnost potrebnapotrebna jeje adekvatnaadekvatna preciznostpreciznost, , aliali preciznostpreciznost nene impliciraimplicira
automatskiautomatski totoččnostnost jerjer susu iskazaneiskazane znamenkeznamenke moglemogle nastatinastati nana temeljutemelju nprnpr. . pogrepogreššnognog mjerenjamjerenja..
1010
PrefiksiPrefiksi iliili kvalifikatorikvalifikatori
�� OdnoseOdnose se se nana cijelecijele brojevbrojevee. . DuljinaDuljina ovisiovisi o o procesoruprocesoru..�� shortshort -- smanujesmanuje rasponraspon vrijednostivrijednosti ((2 By)2 By)�� longlong -- eskplicitnoeskplicitno definira duljinu od definira duljinu od 4 By4 By�� signedsigned -- dozvoljavadozvoljava pridrupridružživanjeivanje pozitivnihpozitivnih i i negativnihnegativnih vrijednostivrijednosti�� unsignedunsigned -- dozvoljavadozvoljava pridrupridružživanjeivanje samosamo pozitivnihpozitivnih vrijednostivrijednosti
1111
MemorijskeMemorijske klaseklase
�� memorijska_klasamemorijska_klasa utvrñujeutvrñuje postojanostpostojanost ((trajnosttrajnost) i ) i podrupodruččjeje vavažženjaenjavarijablevarijable iliili poljapolja u u memorijimemoriji ovisnoovisno o o mjestumjestu deklaracijedeklaracije u u programuprogramu..
�� PostojePostoje 4 4 memorijskememorijske klaseklase::�� autoauto automatskaautomatska ((vrijedivrijedi lokalnolokalno unutarunutar funkcijefunkcije))�� externextern vanjskavanjska ((vrijedivrijedi globalnoglobalno unutarunutar programaprograma))�� staticstatic statistatiččkaka ((vrijedivrijedi lokalnolokalno unutarunutar funkcijefunkcije iliili modulamodula))�� registerregister registarskaregistarska ((vrijedivrijedi lokalnolokalno unutarunutar funkcijefunkcije, , aliali koristikoristi CPU CPU
registreregistre))
�� ObiObiččnono se se kljuključčnana rijeriječč autoauto nene navodinavodi, , tete susu svesve lokalnelokalne varijablevarijable i i poljapoljadefiniranidefinirani unutarunutar nekeneke funkcijefunkcije automatskeautomatske klaseklase. . VanjskaVanjska klasaklasa ukazujeukazuje nanavarijablevarijable i i poljapolja kojikoji susu globalniglobalni ((zajednizajedniččkiki) ) zaza svesve funkcijefunkcije unutarunutar programaprograma i i obiobiččnono sese externextern nene navodinavodi jerjer polopoložžajaj izvanizvan funkcijefunkcije ukazujeukazuje nana to.to.
�� StatiStatiččkaka klasaklasa se se koristikoristi ondaonda kadakada se se vrijednostvrijednost varijablevarijable iliili ččlanovalanova poljapolja trebatrebazadrzadržžatiati nakonnakon izlaskaizlaska i i ponovnogponovnog povratkapovratka u u nekuneku funkcijufunkciju..
�� U U opisuopisu algoritamaalgoritama izbjegavatizbjegavat ććee se se globalneglobalne varijablevarijable dada bi se bi se eksplicitnoeksplicitnoukazaloukazalo nana razmjenurazmjenu informacijainformacija meñumeñu funkcijamafunkcijama..
1212
NizNiz znakovaznakova; ; LogiLogiččkaka vrijednostvrijednost
�� NizNiz znakovaznakova
�� NumeriNumeriččkaka vrijednostvrijednost 0 0 oznakaoznaka jeje krajakraja znakovnogznakovnog nizaniza..char ime_niza[duljina_niza+1];char ime_niza[duljina_niza+1];
�� LogiLogiččkaka vrijednostvrijednost�� U U nekimnekim jezicimajezicima postojipostoji posebanposeban tip tip podatakapodataka LOGICALLOGICAL..
�� U CU C--u se u se svakisvaki tip tip podatkapodatka momožžee koristitikoristiti kaokao logilogiččkiki..#define TRUE#define TRUE 11
#define FALSE 0
Z a g r e b \o
1313
PoljePolje
�� PoljePolje jeje podatkovnapodatkovna strukturastruktura gdjegdje istoisto imeime dijelidijeli viviššee podatakapodataka�� SviSvi podacipodaci u u nekomnekom poljupolju morajumoraju bitibiti istogistog tipatipa i i isteiste memorijskememorijske klaseklase�� ElementiElementi ((ččlanovilanovi) ) poljapolja se se identificirajuidentificiraju popo indeksomindeksom�� IndeksIndeks momožžee bitibiti nenegativninenegativni cijelicijeli brojbroj ((konstantakonstanta, , varijablavarijabla, , cjelobrojnicjelobrojni izrazizraz))
x[0] x[9] x[0] x[9] x[nx[n] ] x[MAXx[MAX] x[n+1] x[k/m+5]] x[n+1] x[k/m+5]
�� PoljePolje momožžee bitibiti�� jednodimenzionalnojednodimenzionalno ((vektorvektor))#define N 100#define N 100
float float x[Nx[N];];
x[0] x[1] x[2] ... x[nx[0] x[1] x[2] ... x[n--2] x[n2] x[n--1] 1]
1414
PoljePolje
�� dvodimenzionalnodvodimenzionalno ((matricamatrica, , tablicatablica))#define N 100#define N 100
#define M 50#define M 50
float float y[M][Ny[M][N];];
redakredak 11 y[0][0] y[0][1] y[0][2] y[0][ny[0][0] y[0][1] y[0][2] y[0][n--2] y[0][n2] y[0][n--1]1]
redakredak 22 y[1][0] y[1][1] y[1][2] y[1][ny[1][0] y[1][1] y[1][2] y[1][n--2] y[1][n2] y[1][n--1]1]
. . .. . .
redakredak mm y[my[m--1][0] y[m1][0] y[m--1][1] y[m1][1] y[m--1][2] y[m1][2] y[m--1][n1][n--2] y[m2] y[m--1][n1][n--1] 1]
1515
PoljePolje
�� trodimenzionalnotrodimenzionalno i i viviššedimenzionalnoedimenzionalno# define N 100define N 100
# define M 50# define M 50
float z[3][M][N];float z[3][M][N];
z[2][0][0] z[2][0][nz[2][0][0] z[2][0][n--1]1]
z[1][0][0]z[1][0][0]
z[0][0][0]z[0][0][0]
z[2][mz[2][m--1][n1][n--1]1]
z[1][mz[1][m--1][n1][n--1]1]
z[0][mz[0][m--1][0] 1][0] z[0][mz[0][m--1][n1][n--1]1]
�� OpOpććii oblikoblik naredbenaredbe zaza deklaracijudeklaraciju poljapolja::memorijska_klasamemorijska_klasa tip_podatkatip_podatka polje[izraz1][izraz2]...polje[izraz1][izraz2]...
1616
PokazivaPokazivačč (Pointer)(Pointer)
MemorijaMemorija raraččunalaunala::
zapravozapravo jeje kontinuiranikontinuirani nizniz bajtovabajtova::
00 11 22 33 4...4... 4 G4 GBB
SvakiSvaki bajtbajt imaima svojsvoj redniredni brojbroj: : adresuadresu
1717
DeklaracijaDeklaracija ""obiobiččnihnih" " varijablivarijabli i i pokazivapokazivaččaa
�� DeklaracijomDeklaracijom varijablivarijabli rezervirarezervira se se prostorprostor u u memorijimemoriji nana slobodnimslobodnim adresamaadresama, , nprnpr.:.:short a, b;short a, b;
a ba b
82560 8256282560 82562
�� DeklaracijomDeklaracijom pokazivapokazivaččaa rezervirarezervira se se prostorprostor u u memorijimemoriji u u duljiniduljini 4 4 byteabytea kakokako bi se bi se pohranilapohranila bilobilo kojakoja adresaadresa u u adresnomadresnom prostoruprostoru dodo 4GB, 4GB, nprnpr.:.:
short *p;short *p;
a b p a b p
82560 82562 8256482560 82562 82564
�� VaVažžnono je primijetiti da deklaracijom niti jednoj od varijabli nije inje primijetiti da deklaracijom niti jednoj od varijabli nije inicijalizirana icijalizirana vrijednostvrijednost
1818
VarijableVarijable i i pokazivapokazivaččii
�� VrijednostVrijednost pokazivapokazivaččaa svakakosvakako trebatreba postavitipostaviti prijeprije uporabeuporabep p = &a= &a;;
a b p a b p
8256082560
82560 82562 8256482560 82562 82564
�� OvimeOvime jeje ostvarenoostvareno pokazivanjepokazivanje pokazivapokazivačča a pp na varijablu na varijablu aa
a b p a b p
8256082560
82560 82562 8256482560 82562 82564
�� SadaSada jeje mogumoguććee indirektnoindirektno postavitipostaviti vrijednostvrijednost varijablevarijable aa*p = 7;*p = 7;
a b p a b p
7 7 8256082560
82560 82562 8256482560 82562 82564
1919
VarijableVarijable i i pokazivapokazivaččii
�� IndirektnoIndirektno se mose možžee i koristiti vrijednost varijable i koristiti vrijednost varijable aab b = *p= *p;;
a b p a b p
7 7 7 7 8256082560
82560 82562 8256482560 82562 82564
�� VrijednostVrijednost pokazivapokazivačča moa možže se postaviti i rezervacijom slobodne memorijee se postaviti i rezervacijom slobodne memorijemain () {main () {
short short intint *p;*p;
p = (short p = (short intint *) *) mallocmalloc ((sizeofsizeof (short (short intint));));
*p = 7;*p = 7;
}}
�� ValjaValja razlikovatirazlikovati::–– pp pokazivapokazivačč veliveliččine 4 bajta na broj tipa ine 4 bajta na broj tipa shortshort intint
–– **pp brojbroj tipatipa short short intint veliveliččineine 2 2 bajtabajta. . NeNe moramora postojatipostojati!!
2020
AritmetikaAritmetika s s pokazivapokazivaččimaima
�� AritmetikaAritmetika s s pokazivapokazivaččimaima podrazumijevapodrazumijeva korikorišštenjetenje jedinicajedinica kojekoje odgovarajuodgovarajuduljiniduljini (By) (By) podatkovnepodatkovne strukturestrukture nana kojukoju pokazivapokazivačč pokazujepokazuje..
�� UveUveććanjeanje zaza 1 1 pokazivapokazivaččaa nana strukturustrukturu dugadugaččkuku 4 By 4 By znaznaččii dada se se njegovanjegovavrijednostvrijednost uveuveććavaava zaza 4. 4. AkoAko jeje strukturastruktura dugadugaččkaka 8 By, 8 By, uveuveććanjeanje pokazivapokazivaččaa zaza1 1 povepoveććavaava vrijednostvrijednost pokazivapokazivaččaa zaza 8 8 itditd..
�� PrimjerPrimjer: : ((longlong = 4 By, = 4 By, doubledouble = 8 By)= 8 By)
VrijednostiVrijednostilong long dugidugi; double ; double duplidupli;; pdugipdugi pduplipdupli
long *long *pdugipdugi; double *; double *pduplipdupli;; ?? ??
pdugipdugi = &= &dugidugi;; 128560128560 ??
pduplipdupli = &= &duplidupli;; 128560128560 128564128564
++++pdugipdugi;; 128564128564 128564128564
pduplipdupli = = pduplipdupli + 2;+ 2; 128564128564 128580128580
2121
PoljaPolja i i pokazivapokazivaččii
#include <#include <stdio.hstdio.h>>
main () {main () {
intint x[4] = {1,2,3,4};x[4] = {1,2,3,4};
printfprintf ("%d %("%d %dd\\nn", *x, *(x+1));", *x, *(x+1));
f (x);f (x);
}}
void f (void f (intint *x) { *x) { iliili void f (void f (intint x[]) {x[]) {
printfprintf ("%d %("%d %dd\\nn", *x, x[0]);", *x, x[0]);
++x;++x;
printfprintf ("%d %d %("%d %d %dd\\nn", *x, x[0], *(x", *x, x[0], *(x--1));1));
}}
IspisIspis nana zaslonuzaslonu::
1 21 2
1 1 x1 1 x[0] x[1] x[2] x[3][0] x[1] x[2] x[3]
2 2 12 2 1 11 22 33 44
2222
ZapisiZapisi ((strukturestrukture))�� TypedefTypedef deklaracijadeklaracija
typedeftypedef stari_tipstari_tip novi_tipnovi_tip;;
nprnpr..typedeftypedef unsigned unsigned size_tsize_t;;
typedeftypedef intint redni_brojredni_broj;;
typedeftypedef short logical;short logical;
redni_brojredni_broj i, j;i, j;
size_tsize_t velicinavelicina;;
logical da_ne;
�� DefiniranjeDefiniranje strukturestrukture�� StruktureStrukture podatakapodataka ččijiiji se se elementielementi razlikujurazlikuju popo tiputipu::structstruct ime_struktureime_strukture {{
tip_elementa_1 ime_elementa_1;tip_elementa_1 ime_elementa_1;tip_elementa_2 ime_elementa_2;tip_elementa_2 ime_elementa_2;
......
tip_elementa_ntip_elementa_n ime_elementa_nime_elementa_n;;};};
2323
ZapisiZapisi ((strukturestrukture))�� PrimjerPrimjerstructstruct osobaosoba {{
char jmbg[13+1];char jmbg[13+1];
char prezime[40+1];char prezime[40+1];
char ime[40+1];char ime[40+1];
intint visinavisina;;
float float tezinatezina;;
};};
OvimeOvime nijenije deklarirandeklariran konkretankonkretan zapiszapis, , vevećć jeje samosamo definiranadefinirana strukturastruktura zapisazapisa..DeklaracijaDeklaracija konkretnihkonkretnih zapisazapisa::structstruct ime_struktureime_strukture zapis1, zapis2, ... , zapis1, zapis2, ... , zapisNzapisN;;nprnpr..structstruct osobaosoba o1, o2, zaposleni[500];o1, o2, zaposleni[500];
2424
ZapisiZapisi ((strukturestrukture))�� MoguMoguććee jeje definiranjedefiniranje statistatiččkeke podatkovnepodatkovne strukturestrukture proizvoljneproizvoljne slosložženostienosti jerjer pojedinipojedini
element element momožžee takoñertakoñer bitibiti structstruct::structstruct student {student {
intint maticni_brojmaticni_broj;;
structstruct osobaosoba osobni_podaciosobni_podaci;;
structstruct adresaadresa adresa_roditeljaadresa_roditelja;;
structstruct adresaadresa adresa_u_Zagrebuadresa_u_Zagrebu;;
structstruct osobaosoba otacotac;;
structstruct osobaosoba majkamajka;;
};};
AlternativnoAlternativno, , korikorišštenjemtenjem naredbenaredbe typedeftypedef::
typedeftypedef structstruct {{
char jmbg[13+1];char jmbg[13+1];
char prezime[40+1];char prezime[40+1];
char ime[40+1];char ime[40+1];
intint visinavisina;;
float float tezinatezina;;
} } osobaosoba;;
osobaosoba o1, o2, zaposleni[500];o1, o2, zaposleni[500];
2525
ZapisiZapisi ((strukturestrukture))typedeftypedef structstruct {{
intint maticni_brojmaticni_broj;;
osobaosoba osobni_podaciosobni_podaci;;
adresaadresa adresa_roditeljaadresa_roditelja;;
adresaadresa adresa_u_Zagrebuadresa_u_Zagrebu;;
osobaosoba otacotac;;
osobaosoba majkamajka;;
} student;} student;
�� ReferenciranjeReferenciranje elemenataelemenata zapisazapisa
zapis.elementzapis.element = = vrijednostvrijednost;;
vrijednostvrijednost = = zapis.elementzapis.element;;
nprnpr::student student peropero;;
pero.majka.tezinapero.majka.tezina = 92.5;= 92.5;
2626
ZapisiZapisi ((strukturestrukture))
�� PokazivaPokazivačč nana strukturustrukturu
structstruct osobaosoba *p;*p;
*p*p -- zapiszapis o o osobiosobipp -- adresaadresa zapisazapisa o o osobiosobi
�� ReferenciranjeReferenciranje nana element element strukturestrukture prekopreko pokazivapokazivaččaapp-->>prezimeprezime iliili (*(*p).prezimep).prezime
2727
ProcedureProcedure
�� ProgramiProgrami se se sastojesastoje odod proceduraprocedura. . PrvaPrva pozvanapozvana proceduraprocedura jeje glavniglavni program. program. KadKadglavniglavni program program zavrzavrššii, , slijedislijedi povratakpovratak u u operacijskioperacijski sustavsustav. . InaInaččee, , povratakpovratak izizprocedure procedure jeje uvijekuvijek nana onuonu proceduruproceduru kojakoja juju jeje pozvalapozvala. . UobiUobiččajenaajena jeje podjelapodjela nanafunkcijefunkcije ((functionfunction) ) kojekoje imajuimaju odod nulanula do do viviššee ulaznihulaznih argumenataargumenata i i vravraććajuaju jedanjedanrezultatrezultat, , tete nana opopććeniteenite potprogramepotprograme ((subroutinesubroutine) ) kojekoje rezultatrezultat predajupredajuargumentimaargumentima..
�� U U jezikujeziku C C svesve procedure procedure susu funkcijefunkcije kojekoje dajudaju rezultatrezultat nekognekog odod tipovatipova podatakapodataka, , aliali mogumogu mijenjatimijenjati i i vrijednostvrijednost argumenataargumenata..
�� PosebniPosebni slusluččajeviajevi::�� GlavniGlavni program:program: mainmain
�� PotprogramPotprogram kojikoji u u imenuimenu nene vravraććaa vrijednostvrijednost:: voidvoid
2828
RazmjenaRazmjena podatakapodataka izmeñuizmeñu funkcijafunkcija
�� globalneglobalne varijablevarijable�� argumentiargumenti navedeninavedeni u u zagradizagradi, , prenoseprenose se se vrijednostivrijednosti ((call by valuecall by value))�� zaza prijenosprijenos vrijednostivrijednosti u u pozivajupozivajućću funkcijuu funkciju koristekoriste se se kodkod pozivapoziva funkcijefunkcije kaokao
argumentiargumenti adreseadrese, a u , a u definicijidefiniciji funkcijefunkcije argumentiargumenti susu pokazivapokazivaččii ((call by call by referencereference).).
�� AkoAko funkcijafunkcija moramora predatipredati rezultatrezultat prekopreko argumenataargumenata, , nunužžnono se se koristikoristi call by call by referencereference..
2929
UlaznoUlazno--izlazneizlazne operacijeoperacije
�� ZaZa slijednoslijedno ččitanje/pisanjeitanje/pisanje prekopreko standardnihstandardnih ulaznoulazno--izlaznihizlaznih jedinicajedinica koristitkoristit ććee se se odgovarajuodgovarajuććee C C funkcijefunkcije iliili naredbenaredbe pseudokodapseudokoda::�� ulazulaz ((listalista adresaadresa argumenataargumenata))�� izlazizlaz ((listalista argumenataargumenata))
�� KodKod ččitanjaitanja jeje dakledakle nunužžanan call by referencecall by reference, , dokdok kodkod ispisaispisa momožžee posluposlužžitiiti i i call by call by value.value.
3030
PisanjePisanje strukturiranihstrukturiranih programaprograma�� OsnovniOsnovni naputcinaputci
�� specifikacijaspecifikacija ulaznihulaznih i i izlaznihizlaznih varijablivarijabli ( u C ( u C obvezatnoobvezatno!)!)�� definicijadefinicija lokalnihlokalnih varijablivarijabli�� toktok programaprograma premaprema doljedolje, , osimosim petljipetlji i i neizbjeneizbježžnene gotogoto naredbenaredbe�� poravnatiporavnati naredbenaredbe isteiste razinerazine zaza povepoveććanjeanje ččitkostiitkosti�� dokumentacijadokumentacija kratkakratka aliali smislenasmislena�� koristitikoristiti potprogramepotprograme gdjegdje jeje to to mogumoguććee
�� IzborIzbor vrstevrste petljepetlje
�� PrimjerPrimjer: : ČČitatiitati ččlanovelanove nekognekog skupaskupa nenegativnihnenegativnih brojevabrojeva svesve dokdok njihovanjihova sumasuma nenepremapremaššii nekineki predviñenipredviñeni iznosiznos nn..y = 0;y = 0;
do {do {
ulaz(&xulaz(&x););
y += x;y += x;
} while (y <= n);} while (y <= n);
ProgramiProgrami nisunisu funkcionalnofunkcionalno identiidentiččnini jerjer u u prvomprvom slusluččajuaju se se uvijekuvijek obavljaobavlja barembarem jednojednoččitanjeitanje, pa program , pa program ispravnoispravno radiradi samosamo zaza nn≥≥00. U . U drugomdrugom slusluččajuaju, , akoako jeje n<0n<0, , smatrasmatrase se dada jeje bezbez ččitanjaitanja ijednogijednog podatkapodatka postupakpostupak zavrzavrššenen..
y = 0;y = 0;
while (y <= n){while (y <= n){
ulaz(&xulaz(&x););
y += x;y += x;
}}
3131
PisanjePisanje strukturiranihstrukturiranih programaprograma�� PrimjerPrimjer: : ProProččitatiitati n n vrijednostivrijednosti i i obraditiobraditi ihih proceduromprocedurom PROCES. PROCES. KoriKorišštenjemtenjem petljepetlje
while:while:
i = 0;i = 0;
while (i < n) {while (i < n) {
ulaz(&xulaz(&x););
PROCES(xPROCES(x););
i++;i++;
}}
S S obziromobzirom dada jeje unaprijedunaprijed poznatpoznat brojbroj ponavljanjaponavljanja, , primjerenijeprimjerenije jeje koristitikoristiti petljupetlju s s poznatimpoznatim brojembrojem ponavljanjaponavljanja::for (i = 0; i < n; i++) {for (i = 0; i < n; i++) {
ulaz(&xulaz(&x););
PROCES(xPROCES(x););
}}
NeNe radiradi se se samosamo o o manjemmanjem brojubroju naredbinaredbi, , negonego se se smanjujesmanjuje i i mogumoguććnostnost pogrepogrešškeke u u pisanjupisanju programaprograma..
3232
PisanjePisanje strukturiranihstrukturiranih programaprograma�� PrimjerPrimjer: : TrebaTreba proproččitatiitati i i obraditiobraditi skupskup podatakapodataka svesve dokdok nene naiñenaiñe oznakaoznaka krajakraja
podatakapodataka (EOF)(EOF). . RealizacijaRealizacija petljompetljom whilewhile::ulaz(&xulaz(&x););
while (x != EOF) {while (x != EOF) {
PROCES(xPROCES(x););
ulaz(&xulaz(&x););
}}
TrebaTreba dakledakle proproččitatiitati prviprvi podatakpodatak, , obrañujeobrañuje gaga se se samosamo akoako postojipostoji, a , a nakonnakon obradeobradeččitaita se se sljedesljedeććii podatakpodatak kojikoji se se obradiobradi u u iduiduććemem prolaskuprolasku krozkroz petljupetlju..BoljeBolje jeje rjerješšenjeenje skokomskokom iziz petljepetlje::while (1) {while (1) {
ulaz(&xulaz(&x););
if (x == EOF) break;if (x == EOF) break;
PROCES(xPROCES(x););
}}
NeNe narunaruššavaava se se žželjenieljeni principprincip dada iziz jednogjednog programskogprogramskog blokabloka postojipostoji samosamo jedanjedan izlazizlaz..
3333
PisanjePisanje strukturiranihstrukturiranih programaprograma� AkoAko imaima dvadva kriterijakriterija zaza zavrzavrššetaketak petljepetlje: : krajkraj podatakapodataka iliili dada rezultatrezultat procedureprocedure
PROCESPROCES, , pohranjenpohranjen u u varijablivarijabli y y budebude nulanula::do {do {
ulaz(&xulaz(&x););
if (x == EOF) break;if (x == EOF) break;
PROCES(xPROCES(x, &y);, &y);
} while (y != 0);} while (y != 0);
if (x != EOF) {if (x != EOF) {
......
} else {} else {
......
}}
Na Na izlaskuizlasku iziz programskogprogramskog segmentasegmenta nene znazna se se zbogzbog ččegaega jeje petljapetlja zavrzavrššilaila pa se to pa se to moramora ispitivatiispitivati..
�� KoriKorišštenjetenje naredbenaredbe casecase
�� UvijekUvijek se se momožžee upupoorabitirabiti elementarnijaelementarnija naredbanaredba ifif--elseelse. . NaredbaNaredba casecase jeje u u prednostiprednostikadkad imaima mnogomnogo ravnopravnihravnopravnih grananjagrananja..
3535
OpOpććenita listaenita lista
�� Lista je konaLista je konaččni niz (od nula ili vini niz (od nula ili višše) podataka istog tipa: (ae) podataka istog tipa: (a11, a, a22, , …… , a, ann))�� podaci koji je podaci koji je ččine nazivaju se elementiine nazivaju se elementi�� n je duljina liste, za n=0 prazna listan je duljina liste, za n=0 prazna lista�� identitet elementa je odreñen pozicijomidentitet elementa je odreñen pozicijom, a ne njegovom vrijedno, a ne njegovom vrijednoššććuu�� vavažžno svojstvo liste: no svojstvo liste: elementi su linearno ureñeni s obzirom na svoju pozicijuelementi su linearno ureñeni s obzirom na svoju poziciju�� broj elemenata liste nije fiksiran: elementi se mogu ubacivati ibroj elemenata liste nije fiksiran: elementi se mogu ubacivati i izbacivati na bilo izbacivati na bilo
kojem mjestukojem mjestu�� primjeri lista: primjeri lista: �� rijeriječč je lista znakova ; redak teksta je lista znakovaje lista znakova ; redak teksta je lista znakova�� tekst je lista redakatekst je lista redaka�� Polinom P(x)=aPolinom P(x)=a11xxee1 1 + a+ a22xxee2 2 + + …… + + aannxxeenn je lista ((aje lista ((a11,e,e11), (a), (a22,e,e22), ), …… (a(ann,e,enn))))�� za definiranje apstraktnog tipa podataka liste treba definirati za definiranje apstraktnog tipa podataka liste treba definirati operacije na listamaoperacije na listama�� slijedi jedan moguslijedi jedan mogućći primjeri primjer
3636
Apstraktni tip podataka LISTApstraktni tip podataka LIST�� elementtypeelementtype …… bilo koji tip (int, bilo koji tip (int, floatfloat, , charchar))�� LIST LIST …… podatak tipa LIST je konapodatak tipa LIST je konaččni niz podataka tipa ni niz podataka tipa elementtypeelementtype�� positionposition …… podatak ovog tipa identificira element u listi; za listu od n podatak ovog tipa identificira element u listi; za listu od n
elemenata definirano je n+1 pozicija (1 neposredno iza nelemenata definirano je n+1 pozicija (1 neposredno iza n--tog)tog)�� END(L) END(L) …… funkcija koja vrafunkcija koja vraćća poziciju na kraju liste La poziciju na kraju liste L�� MAKE_NULL(&L) MAKE_NULL(&L) …… funkcija pretvara listu L u praznu i vrafunkcija pretvara listu L u praznu i vraćća poziciju END(L)a poziciju END(L)�� INSERT(x,p,&L) INSERT(x,p,&L) …… funkcija ubacuje podatak x na poziciju p u listu L; elementi funkcija ubacuje podatak x na poziciju p u listu L; elementi
od pod p--tog do ntog do n--tog se pomitog se pomičču za jedno mjesto; ako ne postoji pozicija p, u za jedno mjesto; ako ne postoji pozicija p, rezultat je nedefiniranrezultat je nedefiniran
�� DELETE(p,&L) DELETE(p,&L) …… funkcija izbacuje element na poziciji p iz liste L; rezultat funkcija izbacuje element na poziciji p iz liste L; rezultat nedefiniran ako L nema poziciju p ili je p==END(L)nedefiniran ako L nema poziciju p ili je p==END(L)
�� FIRST(L) FIRST(L) ……funkcija vrafunkcija vraćća prvu poziciju u listi L; za praznu vraa prvu poziciju u listi L; za praznu vraćća END(L)a END(L)�� NEXT(p,L), PREVIOUS(p,L) NEXT(p,L), PREVIOUS(p,L) …… funkcije koje vrafunkcije koje vraććaju poziciju iza/ispred p u L; aju poziciju iza/ispred p u L;
nedefinirane ako p ne postoji u L, NEXT() nedefinirana za p==ENDnedefinirane ako p ne postoji u L, NEXT() nedefinirana za p==END(L), (L), PREVIOUS() nedefinirana za p==FIRST(L)PREVIOUS() nedefinirana za p==FIRST(L)
�� RETRIEVE(p,L) RETRIEVE(p,L) …… funkcija vrafunkcija vraćća element na poziciji p u L; nedefinirana ako p a element na poziciji p u L; nedefinirana ako p ne postoji ili za p==END(L)ne postoji ili za p==END(L)
3737
�� Postoje dva osnovna pristupa u realizaciji prikaza u uporabe lisPostoje dva osnovna pristupa u realizaciji prikaza u uporabe liste:te:�� kada se logikada se logiččki redoslijed elemenata u listi poklapa s fiziki redoslijed elemenata u listi poklapa s fiziččkim redoslijedom u kim redoslijedom u
memoriji memoriji --> koristi se implementacija pomo> koristi se implementacija pomoćću poljau polja�� kada se logikada se logiččki i fiziki i fiziččki redoslijed ne poklapaju, pa se mora eksplicitno zapisati ki redoslijed ne poklapaju, pa se mora eksplicitno zapisati
--> koristi se implementacija pomo> koristi se implementacija pomoćću pokazivau pokazivačča ili kursoraa ili kursora�� Oba pristupa dozvoljavaju razne varijanteOba pristupa dozvoljavaju razne varijante
3838
StogStog
�� Specijalna vrsta liste u kojoj se sva ubacivanja i izbacivanja eSpecijalna vrsta liste u kojoj se sva ubacivanja i izbacivanja elemenata obavljaju na lemenata obavljaju na jednom kraju koji zovemo vrhjednom kraju koji zovemo vrh
�� StrukturaStruktura podatakapodataka kodkod kojekoje se se posljednjiposljednji pohranjenipohranjeni podatakpodatak prviprvi uzimauzima u u obradobradu u (zadnji(zadnji--unutraunutra--prviprvi--van)van)
�� Primjeri stoga:Primjeri stoga:�� hrpa tanjura, hrpa knjigahrpa tanjura, hrpa knjiga�� Glavni program poziva potprograme koji pozivaju druge potprogramGlavni program poziva potprograme koji pozivaju druge potprograme: e: potrebno je potrebno je
da potprogrami pamte adresu povratka u nadreñenu proceduruda potprogrami pamte adresu povratka u nadreñenu proceduru�� RaRaččunanje na kalkulatoru: unanje na kalkulatoru: postfixpostfix notacija: (a+b)*cnotacija: (a+b)*c--d = d = abab+c*d+c*d--�� Stog je takoñer i posebni apstraktni tip podatkaStog je takoñer i posebni apstraktni tip podatka�� Jedna moguJedna mogućća izvedba:a izvedba:
3939
Apstraktni tip podataka STACKApstraktni tip podataka STACK
�� elementtypeelementtype …… bilo koji tipbilo koji tip�� STACK STACK …… podatak tipa STACK je konapodatak tipa STACK je konaččni niz podataka tipa ni niz podataka tipa elementtypeelementtype�� MAKE_NULL(&S) MAKE_NULL(&S) …… funkcija pretvara stog S u praznifunkcija pretvara stog S u prazni�� EMPTY(S) EMPTY(S) …… funkcija koja vrafunkcija koja vraćća a ““istinuistinu”” ako je S prazan, inaako je S prazan, inačče e ““lalažž””�� PUSH(x,&S) PUSH(x,&S) …… funkcija ubacuje element x na vrh stoga S; u terminu lista to funkcija ubacuje element x na vrh stoga S; u terminu lista to
odgovara funkciji INSERT(x,FIRST(S),&S)odgovara funkciji INSERT(x,FIRST(S),&S)�� POP(S) POP(S) …… funkcija izbacuje element s vrha stoga S; ekvivalentno funkcijifunkcija izbacuje element s vrha stoga S; ekvivalentno funkciji za za
liste DELETE(FIRST(S),&S)liste DELETE(FIRST(S),&S)�� TOP(S) TOP(S) …… funkcija vrafunkcija vraćća element koji je na vrhu stoga S; ekvivalentno a element koji je na vrhu stoga S; ekvivalentno
RETRIEVE(FIRST(S),S)RETRIEVE(FIRST(S),S)
�� svaka implementacija liste mosvaka implementacija liste možže se upotrijebiti kao implementacija stogae se upotrijebiti kao implementacija stoga�� operacije na stogu su jednostavnije nego operacije s opoperacije na stogu su jednostavnije nego operacije s opććenitom listom, pa se i enitom listom, pa se i
implementacije mogu pojednostavitiimplementacije mogu pojednostaviti�� implementacije pomoimplementacije pomoćću polja i pomou polja i pomoćću pokazivau pokazivaččaa
4040
RedRed
�� specijalna vrsta liste: elementi se ubacuju na jednom kraju listspecijalna vrsta liste: elementi se ubacuju na jednom kraju liste (zae (začčelje), a elje), a izbacuju na suprotnom kraju (izbacuju na suprotnom kraju (ččelo)elo)
�� prviprvi--unutraunutra--prviprvi--van listavan lista�� primjeri za red:primjeri za red:�� ljudi koji ljudi koji ččekaju na blagajni u duekaju na blagajni u duććanuanu�� stampastampačč na lokalnoj mrena lokalnoj mrežži rai raččunalaunala�� Izvoñenje programa u Izvoñenje programa u batchbatch modu modu�� Takoñer se moTakoñer se možže definirati kao posebni apstraktni tip podatkae definirati kao posebni apstraktni tip podatka
4141
Apstraktni tip podatka QUEUEApstraktni tip podatka QUEUE
�� elementtypeelementtype …… bilo koji tipbilo koji tip�� QUEUE QUEUE …… podatak tipa QUEUE je konapodatak tipa QUEUE je konaččni niz podataka tipa ni niz podataka tipa elementtypeelementtype�� MAKE_NULL(&Q) MAKE_NULL(&Q) …… funkcija pretvara red Q u prazanfunkcija pretvara red Q u prazan�� EMPTY(Q) EMPTY(Q) …… funkcija vrafunkcija vraćća a ““istinuistinu”” ako je red Q prazan, inaako je red Q prazan, inačče e ““lalažž””�� ENQUEUE(x,&Q) ENQUEUE(x,&Q) …… funkcija ubacuje element x na zafunkcija ubacuje element x na začčelje reda Q; u terminima elje reda Q; u terminima
operacija na listama to je INSERT(x,END(Q),&Q)operacija na listama to je INSERT(x,END(Q),&Q)�� DEQUEUE(&Q) DEQUEUE(&Q) …… funkcija izbacuje element na funkcija izbacuje element na ččelu reda Q; odgovara operaciji elu reda Q; odgovara operaciji
na listama DELETE(FIRST(Q),&Q)na listama DELETE(FIRST(Q),&Q)�� FRONT(Q) funkcija vraFRONT(Q) funkcija vraćća element na a element na ččelu reda Q; ekvivalent operaciji na elu reda Q; ekvivalent operaciji na
listama RETRIEVE(FIRST(listama RETRIEVE(FIRST(Q),Q)Q),Q)
�� Implementacije reda se takoñer mogu dobiti iz implementacija lisImplementacije reda se takoñer mogu dobiti iz implementacija liste uz te uz odgovarajuodgovarajućća pojednostavljenjaa pojednostavljenja