Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(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]; }
(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) }
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}
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 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) }
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{
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);}}
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.
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.