You are on page 1of 7

Struktura liste

struct cv {
int element;
struct cv *sljed;
};
typedef struct cv cvor;
Cvor *trazi (cvor *glava, int element){
cvor *p;
for (p=glava; p!=NULL; p=p->slijedeci){
if (p->element==element) return p;
}
return NULL;
}

//pomocni cvor
//prolazi kroz elemente
//

void broj (cvor *glava, float cijenamin){


cvor *p;
int broj=0;
for (p=glava; p!=null; p=p->slijedeci){
if (p->cijena>cijenamin)
broj ++;
}
printf ("%d proizvoda ima vecu cijenu od zadane /n", broj);
}
ispisi elemente manje od zadanog elementa
void ispis(cvor *glava, int element){
cvor *p;
for (p=glava; p!=NULL;p=p->sljedeci)
if (p->element<element) cout<<p->element<<endl;
}
U jednostruko povezanu listu spremaju se zapisi sljedeeg tipa:
typedef struct s{
int pbr; // potanski broj
char mjesto[100+1]; // naziv mjesta
struct s *sljed;
} zapis;
Kako glasi funkcija koja pronalazi u listi zapis o mjestu sa zadanim potanskim brojem i
vraa taj zapis u glavni program. Ako takav zapis ne postoji u listi funkcija vraa NULL.
Lista nije sortirana.
zapis *funkcija(zapis *glava, int pbr){
zapis *p;
for (p=glava; p!=null; p=p->sljed)
if (p->pbr==pbr) return p;
return NULL
}

int dodaj (atom **glavap, int element) {


atom *novi;
if ((novi = (atom *) malloc(sizeof(atom))) == NULL)
// provjerava jeli lista prazna
return 0;
novi->element = element;
//element u listi stavljam da je == element iz argumenta
if (*glavap == NULL || (*glavap)->element >= element) {
//provjera jeli manji
novi->sljed = *glavap;
// Dodavanje na pocetak liste
*glavap = novi;
int brisi (cvor **glavap; int element){
atom *p;
for (; *glavap && (*glavap)->element !=element; glavap=&((*glavap)->sljedeci));
if (*glavap) {
p=*glavap;
*glavap = (*glavap)->sljed;
free (p);
return 1;
}
}
U C++
int brisi (atom **glavap, int element) {
atom *p;
for ( *glavap == NULL; (*glavap)->element != element; glavap = &(*glavap)->sljed);
if (*glavap) {
p = *glavap;
*glavap = (*glavap)->sljed;
delete(p);
return 1;
} else return 0;
}
napisati funkciju koja e svim elementima liste koliinu umanj9iti za umanjenje iz argumenta
void umanji (cvor *glava, int umanjenje) {
cvor *p;
for (p=glava; p!=null; p=p->slijedeci){
p->kolicina=p->kolicina-umanjenje
}
napisati funkciju koja e obrisati prva dva elementa liste
int brisi2 (cvor **glavap){
cvor *p, int i;
if (*glavap) {

for (i=0; i<2;i++){


p = *glavap;
*glavap = (*glavap)->sljed;
delete (p); }
return 1; }
else return 0;
}

//ponovi 2 puta
//postavi p da je jednak *glavap
//postavi *glavap na sljedei
//obrisi p

napisati funkciju koja iz zadane liste u koju se zapisuju cijeli brojevi int brie parne elemente
void brisiParne(cvor **glavap){
cvor *p;
while(*glavap)
if (*glavap%2==0){
p=*glavap;
*glavap=(*glavap)->sljed
delete (p);
}

funkcija koja e obrisati sve elemente iz liste


void brisiSve (cvor **glavap){
cvor *p;
while (p->sljed!=NULL){
p=*glavap;
*glavap=(*glavap)->sljed;
delete (p);
}
}
Zadana je jednostruko povezana lista iji zapis sadri ifru knjige (int), naziv knjige (80+1 znak) i
cijenu knjige (float). Potrebno je napisati funkciju koja e iz liste obrisati prvi zapis sa zadanom
cijenom. Funkcija vraa 1 ako je brisanje uspjelo, a 0 ako traena knjiga nije pronaena. Prototip
funkcije je:
int brisi (cvor **glava; int cijena){
cvor *p;
for (; *glava && (*glava)->cijena != cijena; glava=&((*glava)->sljedeci));
if (*glava) {
p=*glava;
*glavap = (*glava)->sljedeci;
delete (p);
return 1;
}
dodaj clan na kraj liste
void DodajUListu( ClanListe **Lista, ClanListe *Clan ) {
ClanListe *p;

Clan->Slijedeci = NULL;
//posto je zadnji clan->sljendeci postavljam na NULL
if( *Lista == NULL ) {
*Lista = Clan;
} else {
p = *ClanListe;
while( p->Slijedeci != NULL ) p = p->Slijedeci;
p->Slijedeci = Clan;
}
}
napisati funkciju koja e vratiti koliinu zapisanu u zadnjem lanu. Ako je prazna vraa -1
int kol_zadnji (atom *glava){
atom *p;
if (glava==null) return -1;
else {
while( p->Slijedeci != NULL )
p = p->Slijedeci;
if (p->sljedeci==NULL)
return p->kolicina;
}
}

BINARNA STABLA
Struktura stabla
struct cvor{
tip element;
struct cvor *lijevo;
struct cvor *desno;
}
izraunati broj neparnih vorova
int broj (cvor *korijen){
if (korijen==NULL) return 0;
if (korijen->element%2==1) return 1+broj(korijen->lijevo)+broj(korijen->desno);
return 0+broj(korijen->lijevo)+broj(korijen->desno);
}
izraunati broj elemenata koji nisu listovi

int broj (cvor *korijen){


if (korijen==NULL) return 0;
if (korijen->lijevo!=NULL || korijen->desno!=NULL) return 1+broj(korijen->lijevo)
+broj(korijen->desno);
return 0;
}
izraunati broj elemenata koji jesu listovi
int broj (cvor *korijen){
if (korijen==NULL) return 0;
if (korijen->lijevo==NULL && korijen->desno==NULL) return 1+broj(korijen->lijevo)
+broj(korijen->desno);
return 0;
}
napisati funkciju koja vraa jedan ako su sve cijene u stablu vee od n, a inae vraa nulu.
Int SviVeci(cvor *glava, int n){
if (!glava) return 0;
if (glava->cijena>n)
}
izraunati koliko prezimena poinje sa B
int broj (cvor *korijen) {
int brojac = 0;
if (korijen) {
if (korijen->prezime[0] == "B") brojac++;
if (korijen->lijevo) brojac += broj(korijen->lijevo);
if (korijen->desno) brojac += broj(korijen->desno);
}
return brojac;
}
vor binarnog stabla sadri prezime i ime(20+1znak), telefonski broj(20+1znak),broj primljenih
poziva(int).stablo je ureeno po broju primljenih poziva(lijevo manji ili jednak, desni vei).napisati
funkciju koja e u glavni program vratiti ime i prezime osobe s najveim brojem primljenih poziva,
te najvei brojj primljenih poziva
Struct cvor {
char ImePrezime[20+1];
char TelBr[20+1];
int brojPrimPoz;
cvor *lijevo;
cvor *desno;
}

cvor NBP (cvor *glava){


cvor *p;
for (p=glava; p->desni!=NULL; p=p->desni);
return p;
}
Napisati nerekurzivnu funkciju koja vraa razinu na kojoj se nalazi najvei element u stablu. Lijevo
manji desno vei
int funkcija (cvor *glava){
cvor *p, int brojac=0;
for (p=glava;p->desni!=NULL;p=p->desni) {
brojac++}
return brojac;
}
REKURZIVNO
int funkcija (cvor *glava){
if (!glava) return 0;
else return 1+funkcija (*glava->desni)
}

//ne ide deklaracija, jer je ovo poziv funkcije

STOG
STRUKTURA STOGA
#define MAXSTOG 5
typedef struct {
int vrh, polje[MAXSTOG];
} Stog;
//inicijalizacija stoga
void init_stog(Stog *stog){
stog->vrh = -1;
}
int dodaj (int element, Stog *stog) {
if (stog->vrh >= MAXSTOG-1) return 0;

//dodavanje elemenata na stog


//provjera jeli stog popunjen

stog->vrh++;
stog->polje[stog->vrh] = element;
return 1;
}
int skini (int *element, Stog *stog) {
if (stog->vrh < 0) return 0;
*element = stog->polje[stog->vrh];
stog->vrh--;
return 1;

//skidanje elemenata sa stoga


//provjera jeli stog prazan

}
REKURZIJA
Napisati rekurzivnu funkciju koja izraunava broj znamenki zadanog broja
(n.pr. bz(12329)= 5). Koristiti operator cjelobrojnog dijeljenja integera (/).
Prototip funkcije je:
intbz(inta){
if(a==0)return0;
else
return1+bz(a/10);
}
365>>1
36>>1
3>>1
0>>0
RED
Funkcija koja dodaje zapis u red te vraa 1 ako je uspjenop dodavanje, a 0 ako nije
struct zapisuRed {
sifra long;
char naziv[50+1];
float cijena;
} zapis;
int dodaj (zapis element, Red *red){
if(red->ulaz+1) % MAXRED == red->izlaz) return 0;
red->ulaz++;
red->ulaz %= MAXRED;
red->polje [red->ulaz] = element;
return 1;
}
n zapisa
sifra, opis procesa
funkcija koja do
int dodaj (proces element, proces red[], int n, int izlaz, int *ulaz)

You might also like