/
PROGRAMIRANJE II A 10  – PROGRAMIRANJE II A 10  –

PROGRAMIRANJE II A 10 – - PowerPoint Presentation

blindnessinfluenced
blindnessinfluenced . @blindnessinfluenced
Follow
342 views
Uploaded On 2020-07-01

PROGRAMIRANJE II A 10 – - PPT Presentation

Stabla 1 dio dr Dra ž en Br đanin bdrazenetfblnet Goran Banjac goranbanjacetfblnet Danijela Zoran danijelazoranetfblnet Aleksandar Keleč aleksandarkelecetfblnet ID: 791276

cvor korijen sifra art korijen cvor art sifra lijevi podatak desni printf return definisati stabla koja funkciju pisi brisi

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "PROGRAMIRANJE II A 10 –" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

PROGRAMIRANJE II

A10 – Stabla (1. dio)

dr Dražen Brđanin (bdrazen@etfbl.net)Goran Banjac (goran.banjac@etfbl.net)Danijela Zoran (danijela.zoran@etfbl.net)Aleksandar Keleč (aleksandar.kelec@etfbl.net)

201

5

.

Slide2

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

2A10Napisati program u

kojem

treba

:

d

efinisati

tip

CVOR

kojim

se

reprezentuje

čvor stabla binarnog pretraživanja (informacioni sadržaj treba da bude cijeli broj),

definisati funkciju koja dodaje novi čvor u stablo,

definisati

funkciju

koja

pronalazi

najmanji

čvor u stablu,

definisati

funkciju

koja

pronalazi

naj

veći

čvor u stablu,

definisati funkciju koja briše zadati čvor iz stabla,

definisati funkciju koja briše stablo,

definisati funkciju koja omogućava pretraživanje stabla,

definisati funkciju koja ispisuje sadržaj stabla u

preorder

redoslijedu obilaska,

definisati funkciju koja ispisuje sadržaj stabla u

inorder

redoslijedu obilaska,

definisati funkciju koja ispisuje sadržaj stabla u

postorder

redoslijedu obilaska,

u glavnom programu ilustrovati rad sa

stablom binarnog pretraživanja

tj. definisanim funkcijama.

Slide3

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

3A10#include

<

stdio.h

>

#include

<

stdlib.h

>

typedef

struct cvor { int podatak; struct cvor *lijevi, *desni; } CVOR;CVOR *formiraj_cvor(int podatak){ CVOR *novi = (CVOR*)malloc(sizeof(CVOR)); novi->lijevi = novi->desni = 0; novi->podatak = podatak; return novi;}

void brisi_stablo(CVOR* korijen){ if (korijen != 0) { brisi_stablo(korijen->lijevi); brisi_stablo(korijen->desni); free(korijen); }}

CVOR

*dodaj_cvor(

CVOR

*

korijen

,

int

podatak

)

{

if

(

korijen

== 0)

return

formiraj_cvor(

podatak

);

if

(

podatak

<=

korijen

->podatak)

korijen

->lijevi = dodaj_cvor(

korijen

->lijevi,

podatak

);

else

korijen

->desni = dodaj_cvor(

korijen

->desni,

podatak

);

return

korijen

;

}

Slide4

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

4A10CVOR

* trazi(

CVOR

*

korijen

,

int

podatak

)

{

if (korijen == 0) return 0; else if (podatak == korijen->podatak) return korijen; else if (podatak <= korijen->podatak) return trazi(korijen->lijevi, podatak); else return trazi(korijen

->desni, podatak);}void pisi_inorder(CVOR* korijen){ if (korijen != 0) { pisi_inorder(korijen->lijevi); printf("%d ", korijen->podatak);

pisi_inorder(

korijen

->desni);

}

}

void

pisi_preorder(CVOR* korijen){ if (korijen != 0) { printf("%d ", korijen->podatak); pisi_preorder(korijen->lijevi); pisi_preorder(korijen->desni); }}

void pisi_postorder(CVOR* korijen){ if (korijen != 0) { pisi_postorder(korijen->lijevi); pisi_postorder(korijen->desni); printf("%d ", korijen->podatak); }}

CVOR* trazi_najveci(CVOR* korijen){ while (korijen->desni != 0) korijen = korijen->desni; return korijen;}

CVOR

* trazi_najmanji(

CVOR

*

korijen

)

{

while

(

korijen

->lijevi != 0)

korijen

=

korijen

->lijevi;

return

korijen

;

}

Slide5

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

5A10CVOR

* brisi_cvor(

CVOR

*

korijen

,

int

podatak

)

{ if (korijen == 0) return 0; else if (podatak < korijen->podatak) korijen->lijevi = brisi_cvor(korijen->lijevi, podatak); else if (podatak > korijen->podatak) korijen->desni = brisi_cvor(korijen->desni, podatak); else if (korijen->lijevi == 0)

{ CVOR *p = korijen->desni; free(korijen); return p; } else if (korijen->desni == 0) { CVOR *p = korijen->lijevi; free(

korijen

);

return

p;

}

else { CVOR *p = trazi_najveci(korijen->lijevi); korijen->podatak = p->podatak; korijen->lijevi = brisi_cvor(korijen->lijevi, korijen->podatak); } return korijen;}

Slide6

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

6A10int

main()

{

CVOR

*korijen = 0;

int

br, i;

int

niz[] = { 50, 30, 40, 20, 10, 70, 60, 80, 90 }; for (i=0; i<9; i++) korijen = dodaj_cvor(korijen, niz[i]); printf("Preorder: "); pisi_preorder(korijen); printf("\nInorder: "); pisi_inorder(korijen); printf("\nPostorder: "); pisi_postorder(korijen); printf("\nUnesite broj za pretragu: "); scanf("%d", &br); printf("Broj %d %spostoji u stablu.\n", br, trazi(korijen, br) ? "" : "ne ");

printf("Unesite broj za brisanje: "); scanf("%d", &br); korijen = brisi_cvor(korijen, br); printf("Inorder (nakon brisanja): "); pisi_inorder(korijen); brisi_stablo(korijen); return 0;

}

Preorder: 50 30 20 10 40 70 60 80 90

Inorder

: 10 20 30 40 50 60 70 80 90

Postorder

: 10 20 40 30 60 90 80 70 50

Unesite

broj za pretragu: 20Broj 20 postoji u stablu.Unesite broj za brisanje: 30Inorder (nakon brisanja): 10 20 40 50 60 70 80 90

Slide7

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

7A10Napisati program u

kojem

treba

:

definisati tip ARTIKAL kojim se reprezentuje artikal čiji su atributi: šifra (cijeli broj u opsegu 00000-99999, koji se uvijek ispisuje kao 5-cifreni podatak), naziv, količina i cijena,

definisati tip CVOR kojim se reprezentuje čvor

stabla

binarnog

pretraživanja,definisati funkciju koja dodaje podatke o novom artiklu u stablo tako da je kriterijum pri dodavanju novog čvora u stablo šifra artikla,definisati funkciju koja omogućava pretraživanje stabla po šifri artikla,definisati funkciju koja formatirano ispisuje podatke o svim artiklima,definisati funkciju koja omogućava brisanje podataka o artiklu po šifri,definisati funkciju koja briše stablo,definisati funkciju koja omogućava učitavanje podataka o artiklu,u glavnom programu prikazivati meni prema kojem korisnik može da vrši:dodavanje podataka o novom artiklu,ažuriranje podataka,brisanje podataka,prikaz podataka o svim artiklima,pretraživanje podataka po šifri.

Slide8

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

8A10#include

<

stdio.h

>

#include

<

stdlib.h

>

typedef

struct { int sifra; char naziv[21]; double kol, cijena; } ARTIKAL;typedef struct cvor {ARTIKAL art; struct cvor *lijevi, *desni; } CVOR;static

int rb = 1;CVOR *formiraj_cvor(ARTIKAL *art) { CVOR *novi = (CVOR*)malloc(sizeof(CVOR)); novi->lijevi = novi->desni = 0; novi->art = *art; return novi;}

void

brisi_stablo(

CVOR

*

korijen

)

{ if (korijen != 0) { brisi_stablo(korijen->lijevi); brisi_stablo(korijen->desni); free(korijen); }}void citaj(ARTIKAL *art)

{ printf(" Sifra: "); scanf("%d", &art->sifra); printf(" Naziv: "); scanf("%s", art->naziv); printf(" Kolicina: "); scanf("%lf", &art->kol); printf(

" Cijena: "); scanf("%lf", &art->cijena);}CVOR *dodaj_cvor(CVOR *korijen, ARTIKAL *art){ if (

korijen

== 0)

return

formiraj_cvor(

art

);

if

(

art

->sifra <=

korijen

->art.sifra)

korijen

->lijevi = dodaj_cvor(

korijen

->lijevi,

art

);

else

korijen

->desni = dodaj_cvor(

korijen

->desni,

art

);

return

korijen

;

}

Slide9

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

9A10CVOR

* trazi(

CVOR

*

korijen

,

int

sifra

)

{ if (korijen == 0) return 0; else if (sifra == korijen->art.sifra) return korijen; else if (sifra <= korijen->art.sifra) return trazi(korijen->lijevi, sifra); else return trazi(korijen->desni, sifra

);}void pisi_inorder(CVOR* korijen) { if (korijen != 0) { pisi_inorder(korijen->lijevi); printf("%2d. %05d %-20s %6.2lf %6.2lf %6.2lf\n", rb++, korijen

->art.sifra,

korijen

->art.naziv,

korijen

->art.kol,

korijen

->art.cijena,

korijen->art.kol*korijen->art.cijena); pisi_inorder(korijen->desni); }}void pisi(CVOR *korijen) { printf("--- ----- -------------------- ------ ------ ------\n"); printf("RB. SIFRA NAZIV KOL. CIJENA UKUPNO\n");

printf("--- ----- -------------------- ------ ------ ------\n"); rb = 1; pisi_inorder(korijen);}

Slide10

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

10A10CVOR

* brisi_cvor(

CVOR

*

korijen

,

int

sifra

)

{ if (korijen == 0) return 0; else if (sifra < korijen->art.sifra) korijen->lijevi = brisi_cvor(korijen->lijevi, sifra); else if (sifra > korijen->art.sifra) korijen->desni = brisi_cvor(korijen->desni, sifra); else if (korijen->lijevi == 0) {

CVOR *p = korijen->desni; free(korijen); return p; } else if (korijen->desni == 0) { CVOR *p = korijen->lijevi; free(korijen);

return

p;

}

else

{ CVOR *p = trazi_najveci(korijen->lijevi); korijen->art = p->art; korijen->lijevi = brisi_cvor(korijen->lijevi, korijen->art.sifra); } return korijen;}

CVOR* trazi_najveci(CVOR* korijen){ while (korijen->desni != 0) korijen = korijen->desni; return korijen;}

Slide11

STABLA BINARNOG PRETRA

ŽIVANJAStabla (1. dio)

11A10int

main()

{

CVOR

*korijen = 0;

char

c;

int sifra; ARTIKAL art; do { printf("======================================================================\n"); printf("Dodavanje/azur. [D], brisanje [B], prikaz [P], pretr. [T], kraj [0]? "); scanf("\n%c", &c); if (c == 'D') { printf(" Unesite podatke:\n"); citaj(&art); CVOR *p = trazi(korijen, art.sifra); if (p) p->art = art; else korijen = dodaj_cvor(korijen, &art);

} else if (c == 'B') { printf(" Sifra: "); scanf("%d", &sifra); korijen = brisi_cvor(korijen, sifra); } else if (c == 'P') pisi(korijen);

else

if

(c ==

'T'

)

{ printf(" Sifra: "); scanf("%d", &sifra); CVOR *p = trazi(korijen, sifra); if (p) printf(" Artikal %s ima cijenu %.2lf\n", p->art.naziv, p->art.cijena); else printf(" Nema podataka o artiklu sa sifrom %d.\n", sifra); } else if (c != '0') printf(

" Nepoznata opcija - '%c'.\n", c); } while (c != '0'); brisi_stablo(korijen); printf("KRAJ!\n"); return 0;}======================================================================Dodavanje/azur. [D], brisanje [B], prikaz [P], pretr. [T], kraj [0]? D Unesite podatke: Sifra: 10

Naziv: Banane Kolicina: 2 Cijena: 1.5======================================================================Dodavanje/azur. [D], brisanje [B], prikaz [P], pretr. [T], kraj [0]? D Unesite podatke: Sifra: 20

Naziv

:

Jabuke

Kolicina

:

3

Cijena

:

1.2

======================================================================

Dodavanje/azur. [D], brisanje [B], prikaz [P], pretr. [T], kraj [0]?

P

--- ----- -------------------- ------ ------ ------

RB. SIFRA NAZIV KOL. CIJENA UKUPNO

--- ----- -------------------- ------ ------ ------

1. 00010 Banane 2.00 1.50 3.00

2. 00020 Jabuke 3.00 1.20 3.60

======================================================================

Dodavanje/azur. [D], brisanje [B], prikaz [P], pretr. [T], kraj [0]?

0

KRAJ!

Slide12

ZADACI ZA VJEŽBU

Stabla (1. dio)

12A10Napisati

program

koji simulira pretragu rječnika. Rječnik je potre

b

no realizovati u vidu stabla binarnog pretraživanja, pri čemu informacioni sadržaj čvora treba da bude jedna riječ. Pored toga, u programu treba

:

definisati

tip

CVOR

kojim

se reprezentuje čvor stabla binarnog pretraživanja,definisati funkciju koja dodaje novu riječ u rječnik,definisati funkciju koja omogućava pretraživanje stabla po unesenoj riječi,definisati funkciju koja formatirano ispisuje sve riječi iz rječnika,definisati funkciju

koja omogućava brisanje riječi iz rječnika,definisati funkciju koja briše stablo,u glavnom programu prikazivati meni prema kojem korisnik može da

vrši

:

dodavanje

nove riječi u rječnik

,

ažuriranje rječnika,brisanje riječi iz rječnika,prikaz rječnika,pretraživanje rječnika.

Related Contents


Next Show more