podataka结构,Zadatak 3
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了podataka结构,Zadatak 3相关的知识,希望对你有一定的参考价值。
Programsko rješenje za zadatak 3 iz kolegija Strukture podataka.
--Biblioteka red_polje.h-- struct osoba { int a, x, y; }; struct qu { osoba el[10000]; int front, rear; }; qu red; int AddOne (int n) { return ((n+1)%10000); } osoba FrontQ (qu red) { return red.el[red.front]; } void EnQueueQ (osoba x, qu &red) { red.rear=AddOne(red.rear); red.el[red.rear]=x; } void DeQueueQ (qu &red) { red.front=AddOne(red.front); } bool IsEmptyQ (qu red) { if (AddOne(red.rear)==red.front) return true; return false; } void InitQ (qu &red) { red.front=0; red.rear=9999; } --Biblioteka red_pokazivac.h-- struct osoba { int a, x, y; }; struct qu { osoba el; qu *next; }; struct que { qu *front, *rear; }; que red; osoba FrontQ (que red) { return ((red.front)->next)->el;; } void EnQueueQ (osoba x, que &red) { qu *novi=new qu; novi->el=x; novi->next=NULL; (red.rear)->next=novi; red.rear=novi; } void DeQueueQ (que &red) { qu *brisi=red.front; red.front=(red.front)->next; delete brisi; } bool IsEmptyQ (que red) { if (red.rear==red.front) return true; return false; } void InitQ (que &red) { qu *novi=new qu; novi->next=NULL; red.rear=novi; red.front=novi; } --Programsko rje������¡enje-- #include <iostream> #include <ctime> #include "red_pokazivac.h" using namespace std; osoba polje[1000], gpolje[1000]; int broj=0; clock_t vrijeme1, vrijeme2; void gen () { cout << " Unesite broj generirajucih parova: "; do cin >> broj; while (broj<1 || broj>10000); osoba b; for (int i=0; i<broj; i++) { b.a=rand()%4+1; b.x=rand()%10000+1; b.y=rand()%10000+1; gpolje[i]=b; } cout << " Zapisi su uspjesno dodani u polje. "; system ("pause"); } int provjera (int a, int br) { if (!br) return -1; int broj=-1; for (int i=0; i<br; i++) { if (FrontQ(red).a>a && broj<0) broj=i; EnQueueQ(FrontQ(red), red); DeQueueQ(red); } if (broj>=0) return broj; return -1; } void sim (bool w) { for (int i=0; i<broj; i++) polje[i]=gpolje[i]; vrijeme1=clock(); if (!broj) { cout << " Polje je prazno! "; system ("pause"); return; } int a=0, br=0, mjesto; osoba ord; cout << endl; while (a<broj || !IsEmptyQ(red)) { if (!a) { ord=polje[a]; a++; cout << "Prva osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena."; if (w) cout << " Njezin prioritet je " << ord.a << "."; } else if (a<broj) { if (ord.y>polje[a].x) { ord.y-=polje[a].x; cout << "Nova osoba je usla u cekaonicu."; if (!w) EnQueueQ(polje[a], red); else { cout << " Njezin prioritet je " << polje[a].a << "."; mjesto=provjera(polje[a].a, br); if (mjesto>=0) { provjera(5, mjesto); EnQueueQ(polje[a], red); provjera(5, br-mjesto); if (mjesto) cout << " Osoba je preskocila " << br-mjesto << " osoba/e u redu jer ima veci prioritet."; else cout << " Osoba je dosla na celo reda jer ima najveci prioritet."; } else EnQueueQ(polje[a], red); } br++; a++; cout << " U cekaonici je trenutno " << br << " osoba."; cout << " Osoba u ordinaciji ce biti tamo jos " << ord.y << " jedinica vremena."; } else if (ord.y<polje[a].x) { polje[a].x-=ord.y; if (IsEmptyQ(red)) { ord=polje[a]; a++; } else { ord=FrontQ(red); DeQueueQ(red); br--; } cout << "Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena."; if (w) cout << " Njezin prioritet je " << ord.a << "."; cout << " U cekaonici je trenutno " << br << " osoba."; } else { cout << "Nova osoba je usla u cekaonicu."; if (!w) EnQueueQ(polje[a], red); else { cout << " Njezin prioritet je " << polje[a].a << "."; mjesto=provjera(polje[a].a, br); if (mjesto>=0) { provjera(5, mjesto); EnQueueQ(polje[a], red); provjera(5, br-mjesto); if (mjesto) cout << " Osoba je preskocila " << br-mjesto << " osoba/e u redu jer ima veci prioritet."; else cout << " Osoba je dosla na celo reda jer ima najveci prioritet."; } else EnQueueQ(polje[a], red); } a++; ord=FrontQ(red); DeQueueQ(red); cout << " Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena."; if (w) cout << " Njezin prioritet je " << ord.a << "."; cout << " U cekaonici je trenutno " << br << " osoba."; } } else { ord=FrontQ(red); DeQueueQ(red); cout << "Nova osoba je usla u ordinaciju. Bit ce tamo " << ord.y << " jedinica vremena."; br--; if (w) cout << " Njezin prioritet je " << ord.a << "."; cout << " U cekaonici je trenutno " << br << " osoba."; } cout << " ------------------ "; system ("pause"); cout << "------------------ "; } vrijeme2=clock(); cout << "-*-Simulacija je gotova.-*- "; system ("pause"); } void vrijeme () { cout << " Zadnja simulacija je trajala " << (float)(vrijeme2-vrijeme1)/1000 << " sekundi. "; system ("pause"); } int main () { InitQ(red); int a; srand(time(0)); rand(); do { system ("cls"); cout << "1. Generiranje niza parova "; cout << "2. Simulacija cekaonice ordinacije "; cout << "3. Simulacija cekaonice ordinacije sa prioritetom "; cout << "4. Ispis vremena trajanja zadnje simulacije "; cout << "0. Izlaz iz programa "; cout << "Unesite izbor: "; do cin >> a; while (a<0 || a>4); switch (a) { case 1: gen(); break; case 2: sim(false); break; case 3: sim(true); break; case 4: vrijeme(); } } while (a); return 0; }
以上是关于podataka结构,Zadatak 3的主要内容,如果未能解决你的问题,请参考以下文章
podataka-Zadatak U 1-Lista U polje结构
Evidencijaživotinja-ZadatakƏu 1,podataka结构
podataka-Zadatakïu 1-Listaïu pokazivaÄ结构
Evidencijaživotinja,lista pokazivaÄa-Zadatak_u1,podataka结构