Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

14.04.2009. 1. Zadatak /* Implementirati funkciju int Fibonacci(int poz), koja vraca element iz Fibonacci-jevog niza prema prosljedjenoj poziciji.

Primjer Fibonacci-jevog niza je 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,..., pa ukoliko proslijedimo vrijednost argumenta poz 5 funkcija ce nam vratiti 3. */ Rjesenje: int Fibonacci(int poz) { int br1=0, br2=1; for(int i=1;i<poz;i++) { br2+=br1; br1=br2-br1; } return br1; } 14.04.2009. 2. Zadatak /* Implementirati funkciju void umetni(int *nizA, int *nizB, int duzA, int duzB, int pozicija) koja ce nizB umetnuti u nizA na zadanoj poziciji (umetnuti ispred prvog elementa ukoliko je pozicija manja od 2, odnosno iza zadnjeg ako je pozicija veca od duzine nizA). nizA : 1 4 7 4 2 8 8 5 3 nizB : 2 6 3 1 8 pozicija : 3 nizA : 1 4 2 6 3 1 8 7 4 2 8 8 5 3 */ Rjesenje: void umetni(int *nizA, int *nizB, int duzA,int duzB, int pozicija) { if(pozicija<0) pozicija=1; else if(pozicija>duzA+1) pozicija=duzA+1; int *noviA = new int[duzA+duzB]; for(int i=0;i<pozicija-1;i++) noviA[i] = nizA[i]; for(int i=0;i<duzB;i++) noviA[i+pozicija-1] = nizB[i]; for(int i=pozicija-1;i<duzA;i++) noviA[i+duzB]=nizA[i]; delete [] nizA; nizA = noviA; }

18.01.2012. 2. Zadatak /* Implementirati funkciju int* umetniBroj(int *niz, int duz, int broj) koja ce umetnuti broj u prosljedjeni sortirani niz, tako da niz ostane sortiran. U funkciji nije dozvoljeno koristenje algoritma za sortiranje niza. Npr. Ulazni argumenti niz:[1 3 3 4 5 7 9] broj:6 */ Rjesenje: int* umetniBroj(int *niz, int duz, int broj) { int *noviNiz = new int[duz+1]; int br = 0; while(broj>niz[br] && br<duz) { noviNiz[br] = niz[br]; br++; } noviNiz[br] = broj; for(int i = br+1;i<duz+1;i++) noviNiz[i] = niz[i-1]; delete [] niz; return noviNiz; } 14.04.2009. 3. Zadatak /* Implementirati funkciju dodajCvorNaPocetak(Cvor *noviCvor) koja ce novi cvor dodati na pocetak dvostruko spregnute liste. U zadatku se koristi struktura cvora: struct Cvor{ int broj; Cvor *sljedeci; Cvor *prethodni; }; i globalni pokazivac: Cvor *glava = NULL; */ Rjesenje: void dodajCvorNaPocetak(Cvor *noviCvor) { if(glava==NULL) glava = noviCvor; else { noviCvor->sljedeci = glava; glava->prethodni = noviCvor; glava = noviCvor; } } Povratna vrijednost: NoviNiz[1 3 3 4 5 6 7 9]

14.04.2009. 4. Zadatak /* 1.4 Implementirati funkciju void spoji(Cvor *glava1, Cvor *glava2) koja ce elemente liste2 nadovezati na elemente liste1. Struktura cvora je: struct Cvor { int broj; Cvor *sljedeci; }; */ Rjesenje: void spoji(Cvor *glava1, Cvor *glava2) { Cvor *temp = glava1; while(temp->sljedeci != NULL) temp = temp->sljedeci; temp->sljedeci = glava2; }

14.04.2009. 5. Zadatak /* Implementirati funkciju Cvor *kreirajRed(int *niz, int duzina) koja e od proslijedjenog niza kreirati strukturu steka, te vratiti pokazivac na prvi element steka. Struktura elementa reda je: struct Cvor { int broj; Cvor *sljedeci; }; */ Rjesenje: Cvor *kreirajRed(int *niz, int duzina) { Cvor *vrh; for(int i=0;i<duzina;i++) { Cvor *novi = new Cvor(); novi->broj=niz[i]; novi->sljedeci = vrh; vrh = novi; } return vrh; }

18.01.2012. II kolokvij 3. Zadatak /* Implementirati funkciju Cvor* generisiStek(int* niz, int duzina) koja ce napuniti stek sa brojevima iz prosljedjenog niza. Stek ima maksimalno 30 lokacija te za implementaciju steka koristiti listu. U zadatku neophodno je implementirati pomocnu funkciju void push(Cvor* &glava, int broj) za dodavanje cvora na stek. Struktura cvora je: struct Cvor { int broj; Cvor* sljedeci; }; */ Rjesenje: int dno(Cvor* glava) { Cvor *temp = glava; int dno = 0; while(temp!=NULL) { temp = temp->sljedeci; dno++; } return dno; } void push(Cvor* &glava, int broj) { Cvor *novi = new Cvor(); novi->broj = broj; novi->sljedeci = glava; glava = novi; } Cvor* generisiStek(int* niz, int duzina) { Cvor *glava = NULL; for(int i=0;i<duzina;i++) { if(dno(glava)<30) push(glava, niz[i]); else { cout<<"\nStek popunjen. Nisu ubaceni svi brojevi iz niza.\n\n"; return glava; } } return glava; }

/* Implementirati funkciju void brisiZadnjiCvor(Cvor* &glava) koja ce obrisati zadnji cvor iz dvostruko vezane liste. Struktura cvora je sljedeca: struct Cvor { int broj; Cvor *sljedeci; Cvor *prethodni; }; */ Rjesenje: void brisiZadnjiCvor(Cvor* &glava) { if(glava!=NULL) { if(glava->sljedeci!=NULL) { Cvor *temp = glava; while(temp->sljedeci != NULL) temp = temp->sljedeci; temp->prethodni->sljedeci = NULL; delete [] temp; } else { delete [] glava; glava = NULL; } } else cout<<"Nema cvorova za obrisati.\n"; }

/* Napisati program koji ce generisati strukturu s sljedece slike. Struktura cvora je sljedeca: struct Cvor { int broj; Cvor* lijevi; Cvor* desni; }; */ Rjesenje : #include<iostream> #include<conio.h> using namespace std; struct Cvor { int broj; Cvor* lijevi; Cvor* desni; Cvor() { desni = lijevi = NULL; } }; void povezi(Cvor* gornji, Cvor* lijevi, Cvor* desni) { gornji->lijevi = lijevi; gornji->desni = desni; } void generisiCvor(Cvor* &novi, int broj) { novi->broj = broj; novi->lijevi = novi->desni = NULL; } int main() { Cvor *glava = new Cvor(); generisiCvor(glava, 5); Cvor *lijevi = new Cvor(); Cvor *desni = new Cvor(); generisiCvor(lijevi, 1); generisiCvor(desni, 7); povezi(glava, lijevi, desni); lijevi = new Cvor(); desni = new Cvor(); generisiCvor(lijevi, 4); generisiCvor(desni, 2); povezi(glava->lijevi, lijevi, desni); desni = new Cvor(); generisiCvor(desni, 9); povezi(glava->desni, glava->lijevi->desni, desni); lijevi = new Cvor(); desni = new Cvor(); generisiCvor(lijevi, 6); generisiCvor(desni, 3); povezi(glava->lijevi->lijevi, NULL, lijevi); povezi(glava->lijevi->desni, lijevi, desni); povezi(glava->desni->desni, desni, NULL); lijevi = new Cvor(); generisiCvor(lijevi, 8); povezi(glava->lijevi->lijevi->desni, NULL, lijevi); povezi(glava->desni->desni->lijevi, lijevi, NULL); return 0; } 1 4 6

5 7 2 3 8 9

/* Napisati program koji ce generisati strukturu s sljedece slike. Struktura cvora je sljedeca: 3 struct Cvor { int broj; Cvor* donji; 0 Cvor* sljedeci; }; */ Rjesenje: 8 struct Cvor { int broj; Cvor *donji; Cvor *sljedeci; }; #include<iostream> #include<conio.h> using namespace std;

void povezi(Cvor* gornji, Cvor* donji, Cvor* sljedeci) { gornji->donji = donji; gornji->sljedeci = sljedeci; } void generisiCvor(Cvor* &novi, int broj) { novi->broj = broj; novi->donji = novi->sljedeci = NULL; } int main() { Cvor *glava = new Cvor(); Cvor *donji = new Cvor(); Cvor *sljedeci = new Cvor(); generisiCvor(glava, 3); generisiCvor(donji, 0); generisiCvor(sljedeci, 5); povezi(glava, donji, sljedeci); donji = new Cvor(); sljedeci = new Cvor(); generisiCvor(donji, 4); generisiCvor(sljedeci, 2); povezi(glava->sljedeci, donji, sljedeci); donji = new Cvor(); generisiCvor(donji, 8); povezi(glava->donji, donji, glava->sljedeci->donji); donji = new Cvor(); sljedeci = new Cvor(); generisiCvor(donji, 6); generisiCvor(sljedeci, 9); povezi(glava->donji->sljedeci, donji, sljedeci); povezi(glava->donji->donji, NULL, glava->donji->sljedeci->donji); povezi(glava->sljedeci->sljedeci, glava->donji->sljedeci->sljedeci, NULL); donji = new Cvor(); generisiCvor(donji,1); povezi(glava->donji->donji->sljedeci, NULL, donji); povezi(glava->sljedeci->sljedeci->donji, donji, NULL); return 0; }

/* Implementirati funkciju void brisiSrednjiCvor(Cvor* &glava) koja ce obrisati srednji cvor u listi. Za odabir srednjeg cvora koristiti logiku za odabir pivota u binarnoj pretrazi. */ Rjsesnje: void brisiSrednjiCvor(Cvor* &glava) { if(glava!=NULL) { int duzina = 0; Cvor *temp = glava; while(temp != NULL) { duzina++; temp = temp->sljedeci; } Cvor *zaBrisati; if(duzina>2) { temp = glava; for(int i=0;i<(duzina-1)/2-1;i++) temp = temp->sljedeci; zaBrisati = temp->sljedeci; temp->sljedeci = zaBrisati->sljedeci; delete [] zaBrisati; } else { zaBrisati = glava; glava=glava->sljedeci; delete [] zaBrisati; } } else cout<<"\nNema cvorova za obrisati.\n"; }

You might also like