strukture podataka i algoritmi - lnr.irb.hrlnr.irb.hr/soya/nastava/predavanje1.pdf · 3 osnovni...

41
Strukture podataka i algoritmi Strukture podataka i algoritmi Š Š kolska godina 2005/2006 kolska godina 2005/2006 Neven Neven Soi Soi ć ć Institut Ruñer Bo Institut Ruñer Bo š š kovi kovi ć ć Zavod za eksperimentalnu fiziku Zavod za eksperimentalnu fiziku 2. krilo, soba 129A 2. krilo, soba 129A Email Email : : [email protected] [email protected] Telefon 4561026 Telefon 4561026

Upload: others

Post on 29-Aug-2019

15 views

Category:

Documents


3 download

TRANSCRIPT

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

44

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..

ListeListe

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