Está en la página 1de 6

ASP SKRIPTA

Ubacivanje -izbacivanje elemenata u/iz stek/a(sekvencijalna reprezentacija povezana reprezentacija):


(povezana reprezentacija)
void Push(infoTip y,stek * &S) infoTip Pop(Stek*&S) { { Stek* pom=new Stek; if(S=NULL) pom->link=S; return 0; pom->info=y; Stek*pom=S; S=pom; S=pom>link; } delete pom; return x; }

(sekvencijalna reprezentacija)
void PushS(TipS x) { if (VelS <= MaxVelS -1) { S[VelS] = x; VelS ++; } } TipS PopS() { if (VelS<=0) return 0; VelS--; return S[VelS]; }

Napomena : Push- ubacivanje elemenata,Pop izbacivanje elemenata.

Ubacivanje- izbacivanje elemenata u/iz prioritetnog reda ( sekvencijalna povezana reprezentacija):


(povezana reprezentacija)
void Push (InfoTip x,PRTip*PR)

(sekvencijalna reprezentacija)
void PushPQ(TipPQ x) TipPQ PopPQ()

if (!PunPQ()) { if (PrazanPQ()) { if(PR->PRbrojac<=maxsize-1) { return 0; { PR->PRbrojac++; NizPQ[VelPQ] = x; int MaxV=NizPQ[0];int MaxI=0; PR->prvi=sort_Push(x,PR->prvi)}} VelPQ ++; for (int i=1;i<VelPQ;i++) } { if (NizPQ[i] > MaxV) } { MaxV=NizPQ[i]; MaxI=i; } } Nastavak: izbacivanje elemenata iz prioritetnog reda povezana reprezentacije:

1) infoTip Pop(PRTip* PR) 2) { 3) if(PR->PRbrojac <= 0) 4) return 0; 5) CvorTip* pom = PR->prvi; 6) infoTip x = pom->info; 7) PR->prvi = pom->link; 8) PR->PRbrojac--; 9) delete pom; 10) return x; 11) }

Ubacivanje izbacivanje elemenata u/iz reda (sekvencijalna povezana reprezentacija)


(sekvencijalna reprezentacija izbacivanje)

(Sekvencijalna reprezentacija ubacivanje) 1) void PushQ(TipQ element)

1) TipQ PopQ() { TipQ temp=0;

2) 3) 4) 5) 6) 7) 8) 9)

{if(PunQ()) {cout<<"Greska, red je pun!!!"<<endl;} else{ NizQ[Rear] = element; ++Rear; if (Rear >= maxsize) Rear = 0; ++VelQ;

2) if (PrazanQ()) { cout<<Greska red je pun!<<endl; } { 3) else { temp=NizQ[Front]; 4)++Front; 5)if (Front>=maxsize) 6)Front=0; 7)VelQ; 8)cout<<Element uklonjen iz reda!<<endl;} 9)return temp}

10) cout<<"Elemenat dodat u red! "<<endl;}}

Ubacivanje elemenata u red(povezana reprezentacija)- Izbacivanje iz reda(povezana reprezentacija) 1) void Push(infoTip x, QTip* &Q) 1) infoTip Pop(QTip* Q) 2) { 2) { 3) CvorTip* p = new CvorTip; 3) if(Q->f==NULL) 4) p->info=x; 4) return 0; 5) p->link=NULL; 5) CvorTip* pom=Q->f; 6) if (Q->f==NULL) 6) infoTip x = pom->info; 7) { 7) Q->f=pom->link; 8) Q->f=p; 8) delete pom; 9) Q->r=p; 9) return x; 10) }else{ 10)} 11) Q->r->link=p; 12) Q->r=p; 13) } 14) }

Bubble sort
Bubble sort je jedan od prvih unapre enih algoritama za sortiranje, ali se i dalje smatra veoma sporim jer radi u vremenu O(n2). Slijedi c++ kod za ovaj algoritam:

1) void bubbleSort(int Niz[], int n) { 2) bool promjena = true; 3) int pom; 4) int j = 0; 5) while (promjena) { 6) promjena = false; 7) j++; 8) for (int i = 0; i < n - j; i++) { 9) if (Niz[i] > Niz[i + 1]) { 10) pom = Niz[i]; 11) Niz[i] = Niz[i + 1]; 12) Niz[i + 1] = pom; 13) promjena = true; 14) } 15) } 16) } 17) }

Insertion sort O(n2).

Insertion sort spada u umetni i odri sortiranim algoritme i radi u vremenu O(n2). U praksi se esto koristi za sortiranje malih nizova.Prosjena efikasnost algoritma InsertionSort je O(n2). Za nizove koji su skoro sortirani, efikasnost se blii O(n). Slijedi c++ kod za ovaj algoritam:

1) void insertionSort(int Niz[], int n) { 2) int i, j, pom; 3) for (i = 1; i < n; i++) { 4) j = i; 5) while (j > 0 && Niz[j - 1] > Niz[j]) { 6) pom = Niz[j]; 7) Niz[j] = Niz[j - 1]; 8) Niz[j - 1] = pom; 9) j--; 10) } 11) } 12) }

Selection sort O(n2)


Selection sort je jedan od algoritama koji za sortiranje koriste prioritetni red. U ovom sluaju, reprezentacija prioritetnog reda je nesortirani niz. Algoritam je veoma jednostavan, a u pojedinim situacijama moe biti i veoma efikasan. Slijedi c++ kod za ovaj algoritam:

1) void selectionSort(int Niz[], int n) 2) { 3) int i, j, minIndex, pom; 4) for (i = 0; i < n - 1; i++) { 5) minIndex = i; 6) for (j = i + 1; j < n; j++) 7) if (Niz[j] < Niz[minIndex]) 8) minIndex = j; 9) if (minIndex != i) { 10) pom = Niz[i]; 11) Niz[i] = Niz[minIndex]; 12) Niz[minIndex] = pom; 13) } 14) } 15) } Quick sort
Quick sort spada u podjeli-i-osvoji (divide et impera, divide-and-conquer) algoritme, u prosjenom sluaju radi u vremenu O(nlogn) i zbog toga se veoma esto koristi u praksi. Slijedi c++ kod za ovaj algoritam: 1) 2) 3) 4) 5) 6) 7) 8) int partition(int a[], int left, int right, int pivotIndex){ int pivot = a[pivotIndex]; do{ while (a[left] < pivot) left++; while (a[right] > pivot) right--; if (left < right && a[left] != a[right]){ swap(a[left], a[right]);} else{

9) 10) 11) 12) 13) 14) 15) 16) 17)

return right;}} while (left < right); return right;} void quicksort(int a[], int left, int right){ if (left < right){ int pivot = (left + right) / 2; // middle int pivotNew = partition(a, left, right, pivot); quicksort(a, left, pivotNew - 1); quicksort(a, pivotNew + 1, right);}}

Heap sort
Kada se binarno stablo koristi sa svojstvom Heap-a , onda se taj algoritam naziva Heap sort. Slijedi c++ kod za ovaj algoritam: 1. 2. 3. 4. 5. 6. 7. 8. 9. void heapSort (sales *arr, int num){ for (int node = num; node >=0; node--) makeHeap(node, num, arr);} void makeHeap(int node, int num, sales *arr){ int curr, child, temp; int numlast = (num-2)/2; curr = node; if (node <= numlast){ child = 2*node+1;

10. if (sales[node] < value[child]) 11. node = child; 12. child++; 13. if (child < num && sales[node] < sales[child]) 14. node = child;} 15. if (node != curr){ 16. temp = sales[node]; 17. sales[node] = sales[curr]; 18. sales[curr] = temp; 19. makeHeap(node, num, sales);}}

DFS I BFS Algoritmi (Algoritmi za pretrazivanje I obilazak vrhova grafova)


Kod algoritama za pretraivanje i obilazak vrhova grafa je korisno razlikovati dva sluaja. 1. Ukoliko se radi o neusmjerenom grafu sa jednom komponentom, ili o usmjerenom grafu sa jednom strogo povezanom komponentom, onda se sa pretragom ili obilaskom moe poeti od proizvoljnog vrha i nastaviti po putanjama. 2. Kada je u pitanju usmjereni graf sa jednom slabo povezanom komponentom, ili graf sa dvije ili vie komponenti, situacija je neto komplikovanija. Slijedi C++ kod (funkcija za DFS algoritam): 1. void dfs(){ 2. int i,j,k,cur=0;//current vertex is startting vertex 3. for(i=0;i<n;i++) 4. vertex[i]=0;//not visited 5. printf("DFS path => V%d ",cur+1); 6. push(cur); 7. vertex[cur]=1;//marking visited vertex 8. while(!visitall()){ 9. do{ 10. cur=adjvertex(peep()); 11. if(cur==n) pop();} 12. while(cur==n&&!stackempty()); 13. if(stackempty()){ 14. printf("7GRAPH IS DISCONNECTED"); 15. break;} 16. if(cur!=n){ 17. printf(" V%d ",cur+1); 18. push(cur); 19. vertex[cur]=1;//marking visited vertex}}} Slijedi C++ kod (funkcija za BFS algoritam): 1. void bfs(){ 2. int i,j,k,cur=0;//current vertex is startting vertex 3. for(i=0;i<n;i++) 4. vertex[i]=0;//not visited 5. printf("BFS path => V%d ",cur+1); 6. addq(cur); 7. vertex[cur]=1;//marking visited vertex 8. while(!visitall()){ 9. if(qempty()){ 10. printf("7GRAPH IS DISCONNECTED"); 11. break;} 12. cur=delq(); 13. for(j=0;j<n;j++){ 14. if(a[cur][j]==1&&vertex[j]==0){ 15. printf("V%d ",j+1); 16. addq(j); 17. vertex[j]=1;}}}}

Jednostruko povezana linearna lista Linearna povezana lista (ili skraeno povezana lista) je niz elemenata, vorova (node) u kome svaki od elemenata liste, osim posljednjeg, pokazuje na sljedei. Brisanje posljednjeg vora liste Poto je posljednji vor liste odre en time to je njegovo Link polje postavljeno na vrijednost NULL, na je zadatak da nekako prona emo pretposljednji vor liste i postavimo u njegovo Link polje NULL. Da bi brisanje posljednjeg cvora liste(sa parom pokazivaa) moglo da radi, lista mora sadrati barem dva vora. Dva specijalna sluaja su: ako je lista prazna, ne mora se nita raditi; ako se lista sastoji samo od jednog vora, mora se isprazniti.

Umetanje novog posljednjeg vora u listu


Neka nam je dat aerodromski kod A i adresa &L promijenljive L koja sadri pokaziva na prvi vor liste L. Treba da umetnemo novi vor koji sadri kod A na kraj liste. To znai da se mora doi do kraja liste (u while petlji) i da se treba nadovezati novi posljednji vor na ve postojeu listu (kao kod dodavanja u red). Specijalan sluaj je ako le lista prazna: tada se dodaje novi prvi vor.

Kod za dodavanje posljednjeg vora liste:


1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. void Dodaj_na_kraj(int v, cvor * &Lista, cvor * &temp){ temp=Lista; if (Lista==NULL) Lista=new cvor(); Lista->Info=v; Lista->Link=NULL;} else{ while(temp->Link!=NULL){ temp=temp->Link;} cvor * m; m=new cvor(); temp->Link=m; temp=m; temp->Info=v;}} int Ukloni_sa_kraja(cvor * &Lista){ cvor * pok=NULL; cvor * pok1=NULL; pok=Lista; if (Lista==NULL) cout<<"PRAZNO"<<endl; return 0;} else if(Lista->Link==NULL){ int x=Lista->Info; delete Lista; Lista=NULL; return x;} else{ pok1=pok->Link; while (pok1->Link!=NULL){ pok=pok1; pok1=pok->Link;} pok->Link=NULL; int x=pok1->Info; delete pok1; return x;}}

Kod za brisanje posljednjeg vora liste:

Stablo
Stablo (tree) je jedna od najznaajnijih struktura podataka u informatici. Stablo obezbje uju prirodnu reprezentaciju za razne vrste podataka koji se javljaju u aplikacijama. Ponekad je stablo statina struktura podataka jer ne mijenja oblik u toku izvravanja programa po datom algoritmu. U drugim sluajevima stablo je dinamino.Oblik stabla se moe mijenjati umetanjem ili uklanjanjem vora.

Binarno stablo
Binarno stablo je ono u kojem svaki vor ima tano dva djeteta. Binarno stablo je ili prazno stablo ili vor ije su lijevo i desno podstablo binarna stabla. Kod binarnoga stabla svaki vor uvijek ima i lijevo i desno djete. Za binarno stablo se kae da je kompletno ako : ima listove bilo na jednom nivou, bilo na dva susjedna nivoa, pri emu svi vrhovi osim onih u posljednjem nivou imaju svojstvo kompletnosti, listovi na najniem nivou su grupisani lijevo, koliko je god to mogue.

Obilazak binarnog stabla (traversing)


Jedan od primjera binarnog stabla je stablo kojim se predstavlja algebarski izraz sa binarnim operacijama. Kretanje po binarnom stablu je proces u kome se svaki vor stabla posjeti tano jednom, po nekom utvrenom redosljedu. Tri popularna redoslijeda kretanja po binarnom stablu su PreOrder, InOrder i PostOrder.

También podría gustarte