Kako koristiti C ++ red čekanja

How Use C Queue



Uvod

Red je zbirka stavki pri čemu prva stavka dodana na popis mora biti prva stavka koja će se zatim ukloniti. Dakle, kako se predmeti dodaju u zbirku, ona raste u veličini, tj. Raste u duljinu. Kad god želite ukloniti bilo koju stavku, ona mora biti prva dodana. Ako se stavke neprestano uklanjaju, tada je sljedeća uklonjena druga stavka; treći se nakon toga uklanja, itd.

Nakon što je prva stavka izvornog popisa uklonjena, druga postaje prva stavka. Nakon što je druga stavka uklonjena, treća postaje prva stavka itd.







Dobar primjer čekanja u stvarnom životu je kada ljudi stanu u red čekajući uslugu ili dobro. Prva osoba poslužuje se prva prije posljednje. Međutim, red o kojem se govori u ovom vodiču je red softvera, kako je dizajniran u C ++.



FIFO

FIFO znači First-In, First-Out. To je još jedan način da se cijeni red. To znači da je prva stavka koja uđe na popis prva stavka koju treba ukloniti kad god je potrebno uklanjanje. Početak popisa naziva se glava ili prednji dio; kraj popisa naziva se leđima ili repom.



Bitne operacije

Red softvera mora imati najmanje sljedeće operacije:





gurnuti

Ova operacija dodaje novi element na stražnjoj strani reda. Ova se operacija službeno naziva, enqueue.



smjena

Ova operacija uklanja prvi element reda, a drugi element postaje novi prvi element. Ova se operacija službeno naziva dequeue. To se u C ++ naziva pop.

U ovom se članku objašnjava kako se koristi struktura podataka o redu redova C ++. Da biste razumjeli ostatak ovog članka, trebali biste znati C ++ pokazivače i reference.

Klasa i objekti

Klasa je skup varijabli i funkcija koje rade zajedno, pri čemu varijablama nemaju dodijeljene vrijednosti. Kad se varijablama dodijele vrijednosti, klasa postaje objekt. Različite vrijednosti date istoj klasi rezultiraju različitim objektima; odnosno različiti objekti su ista klasa s različitim vrijednostima. Za stvaranje objekta iz klase kaže se da predstavlja instanciranje objekta.

Naziv, red, je klasa. Objekt kreiran iz klase reda ima ime koje je programer odabrao.

Funkcija koja pripada klasi potrebna je za instanciranje objekta iz klase. U C ++ ta funkcija ima isto ime kao i ime klase. Objekti stvoreni (instancirani) iz klase imaju različita imena koja im je dao programer.

Stvaranje objekta iz klase znači konstruiranje objekta; to također znači instanciranje.

C ++ program koji koristi klasu reda, počinje sljedećim redovima pri vrhu datoteke:

#uključi
#uključi
koristeći imenski prostor std;

Prvi redak služi za ulaz/izlaz. Drugi redak je omogućiti programu da koristi sve značajke klase reda. Treći redak omogućuje programu korištenje imena u standardnom prostoru imena.

Preopterećenje funkcije

Kada dva ili više potpisa različitih funkcija imaju isto ime, kaže se da je to ime preopterećeno. Kada se pozove jedna funkcija, broj i vrsta argumenata, određuju koja se funkcija zapravo izvršava.

Graditeljstvo

red<tip>Ime()

Sljedeća deklaracija instancira red s imenom, que tipa int.

red<int>da;

Red je prazan. Deklaracija počinje rezerviranom riječju, redom iza kojeg slijede kutne zagrade s tipom podataka. Tada programer ima ime za red.

Konstruiranje s popisom inicijalizatora

Sljedeća definicija pokazuje kako stvoriti red s popisom inicijalizatora:

red<plutati>da({1.1, 2.2, 3.3, 4.4});

Uništavanje reda

Da biste uništili red, samo ga ostavite izvan opsega.

Pristup elementu reda čekanja

push (vrijednost)

Red je popis First-In-First-Out lista. Dakle, svaka se vrijednost dodaje straga. Sljedeći segmentni kod stvara prazan red, nakon čega se sa stražnje strane dodaje pet plutajućih vrijednosti:

red<plutati>da;

da.gurnuti(1.1);
da.gurnuti(2.2);
da.gurnuti(3.3);
da.gurnuti(4.4);
da.gurnuti(5.5);

veličina () konst

Time se vraća broj elemenata u redu. Sljedeći kod ilustrira:

red<plutati>da;
da.gurnuti(1.1);da.gurnuti(2.2);da.gurnuti(3.3);da.gurnuti(4.4);da.gurnuti(5.5);
trošak<<da.veličina() << ' n';

Izlaz je 5.

ispred()

Ovo vraća referencu na prvi element reda, bez uklanjanja elementa. Izlaz sljedećeg koda je 1.1.

red<plutati>da;
da.gurnuti(1.1);da.gurnuti(2.2);da.gurnuti(3.3);da.gurnuti(4.4);da.gurnuti(5.5);
trošak<<da.ispred() << ' n';

Element se ne uklanja iz reda čekanja.

front () konst

Kad konstrukciji reda prethodi const, umjesto front () izvodi se izraz front () const. Koristi se u sljedećem kodu, na primjer.

konstred<plutati>da({1.1, 2.2, 3.3, 4.4, 5.5});
trošak<<da.ispred() << ' n';

Vraća se stalna referenca. Element se ne uklanja iz vektora. Elementi reda se ne mogu mijenjati.

leđa()

Ovo vraća referencu na posljednji element reda, bez uklanjanja elementa. Izlaz sljedećeg koda je 5.5.

red<plutati>da;
da.gurnuti(1.1);da.gurnuti(2.2);da.gurnuti(3.3);da.gurnuti(4.4);da.gurnuti(5.5);
trošak<<da.leđa() << ' n';

natrag () const

Kad konstrukciji reda prethodi const, umjesto back () izvršava se izraz back () const. Koristi se u sljedećem kodu, na primjer.

konstred<plutati>da({1.1, 2.2, 3.3, 4.4, 5.5});
trošak<<da.leđa() << ' n';

Vraća se stalna referenca. Element se ne uklanja iz reda čekanja. Uz prethodni const za izgradnju reda, elementi u redu se ne mogu mijenjati.

Kapacitet reda

veličina () konst

- vidi gore

prazno () const

Ovo vraća 1 za true ako nema elemenata u redu, ili 0 za false ako je red prazan. Sljedeći kod to ilustrira:

red<plutati>to1({1.1, 2.2, 3.3, 4.4, 5.5});
trošak<<to1.prazan() << ' n';
red<plutati>to 2;
trošak<<to 2.prazan() << ' n';

Izlaz je:

0
1

Modifikatori reda čekanja

pop ()

Red je FIFO, pa se svaki element koji se mora ukloniti mora ukloniti s vrha (glave) reda. Ova funkcija članica uklanja prvi element bez vraćanja. Sljedeći kod to ilustrira:

red<plutati>da({1.1, 2.2, 3.3, 4.4, 5.5});
trošak<<da.ispred() << ' n';
da.pop();
trošak<<da.veličina() << ' n';

Izlaz je:

1.1
4

a.swap (b)

Mogu se zamijeniti dva reda, kako je prikazano u ovom segmentu koda:

red<plutati>to1({1.1, 2.2, 3.3, 4.4, 5.5});
red<plutati>to 2({10, dvadeset});
to1.zamijeniti(to 2);
trošak<< 'Prvi element i veličina que1:
'
<<to1.ispred() <<','<<to1.veličina() << ' n';
trošak<< 'Prvi element i veličina que2'<<
to 2.ispred() <<','<<to 2.veličina() << ' n';

Izlaz je:

Prvi element i veličina que1: 10, 2

Prvi element i veličina que2: 1,1, 5

Imajte na umu da se duljina reda po potrebi povećava. Također, vrijednosti koje nisu imale zamjene, zamjenjuju se nekom zadanom vrijednošću. Vrste podataka moraju biti iste vrste.

Operatori jednakosti i odnosa za redove

Za obične znakove u C ++, u rastućem redoslijedu, brojevi dolaze ispred velikih slova, koji dolaze ispred malih slova. Znak za razmak dolazi ispred nule i svi oni.

Operatori jednakosti

Vraća 1 za true i 0 za false.

Operater ==

Vraća 1 ako dva reda čekanja imaju istu veličinu i odgovarajući elementi su jednaki; inače vraća 0. Primjer:

red<konst char*>to1({'ljubazan', 'nešto drugo'});
red<konst char*>to 2({'zao'});
intna jedan=to1==to 2;
trošak<<na jedan<< ' n';

Izlaz je: 0.

! = Operater

- suprotno od navedenog. Primjer:

red<konst char*>to1({'ljubazan', 'nešto drugo'});
red<konst char*>to 2({'zao'});
intna jedan=to1! =to 2;
trošak<<na jedan<< ' n';

Izlaz je: 1.

Relacijski operatori

Vraća 1 za true i 0 za false.

The

Vraća 1 ako je prvi red početni podskup drugog reda, pri čemu su elementi dva jednaka dijela isti i istim redoslijedom. Ako su oba reda iste veličine ili različitih veličina i kreću se slijeva nadesno, u prvom redu nailazi se na element koji je manji od odgovarajućeg elementa u drugom redu, tada će 1 ipak biti vraćen. U suprotnom se vraća 0. Primjer:

red<konst char*>to1({'ljubazan', 'nešto drugo'});
red<konst char*>to 2({'zao'});
intna jedan=to1<to 2;
trošak<<na jedan<< ' n';

Izlaz je 1.

> Operater

- suprotno od navedenog. Primjer:

red<konst char*>to1({'ljubazan', 'nešto drugo'});
red<konst char*>to 2({'zao'});
intna jedan=to1>to 2;
trošak<<na jedan<< ' n';

Izlaz: 0

The<= Operator

- isto kao red<konst char*>to1({'ljubazan', 'nešto drugo'});
red<konst char*>to 2({'zao'});
intna jedan=to1<=to 2;
trošak<<na jedan<< ' n';

Izlaz: 1

Operator> =

- suprotno od navedenog. Primjer:

red<konst char*>to1({'ljubazan', 'nešto drugo'});
red<konst char*>to 2({'zao'});
intna jedan=to1> =to 2;
trošak<<na jedan<< ' n';

Izlaz: 0

Klasa i njezini upečatljivi objekti

Vrijednost je za tip podataka, kao što je instancirani objekt za klasu. Konstrukcija reda može također prihvatiti klasu kao tip podataka. Sljedeći program to ilustrira:

#uključi
#uključi
koristeći imenski prostor std;
klase TheCla
{
javnost:
intna jedan;
statički charCH;
poništitifunkcija(charNe, konst char *str)
{
trošak<< 'Tamo su ' <<na jedan<< 'knjige vrijede' <<Ne<<str<< ' u trgovini.' << ' n';
}
statički poništitizabava(charCH)
{
ako (CH== 'do')
trošak<< 'Službena statička funkcija člana' << ' n';
}
};
intglavni()
{
TheCla obj1;TheCla obj2;TheCla obj3;TheCla obj4;TheCla obj5;
red<TheCla>da;
da.gurnuti(obj1);da.gurnuti(obj2);da.gurnuti(obj3);da.gurnuti(obj4);da.gurnuti(obj5);
trošak<<da.veličina() << ' n';
povratak 0;
}

Izlaz je 5.

Povezani popis

Popis redova tehnički se naziva povezan popis. Postoje dvije vrste povezanih popisa za red: pojedinačno povezan popis i dvostruko povezan popis.

Pojedinačno povezan element popisa može se implementirati strukturom od dva člana. Jedan član drži pokazivač na sljedeći element, a drugi član drži datum (jedinstveno za podatke).

Dvostruko povezani element popisa može se implementirati strukturom od tri člana. Srednji član drži datum, dok prvi i treći član drže pokazivače na susjedne elemente.

Prijave u redu

Red je struktura podataka prvi-u-prvi-van. Postoje situacije u računanju kada podaci stižu u obliku reda, pa je potrebno ponašanje prvi u prvi izlazi.

Dijeljenje računalnih resursa

Resurs u računalu je svaka fizička ili virtualna komponenta ograničene dostupnosti. Uključuju CPU, video karticu, tvrdi disk i memoriju. Za dijeljenje takvog resursa potreban je red.

Rukovanje prekidima

Računalna periferija s vremena na vrijeme mora prekidati rad računala. S prekidima se mora postupati na isti način na koji su stigli. Za ovo je potreban red.

Upravljajte informacijama.

Red se može koristiti, na primjer, za upravljanje aplikacijskim datotekama za posao, ako su datoteke pohranjene na računalu.

Zaključak

Red je struktura podataka popisa koja je ili pojedinačno povezana lista ili dvostruko povezana lista. U pravilu, prvi element koji uđe na popis prvi je element koji izlazi. C ++ pruža strukturu podataka o redu čekanja u svojoj standardnoj biblioteci. Kategorije funkcija članova i operatori dostupni za ovu strukturu su konstrukcija redova, pristup elementima reda, kapacitet reda, modifikatori reda i operatori preopterećeni redom.

Svaka struktura podataka o redu čekanja mora osigurati barem funkcije člana push () i pop (). push () znači slanje novog elementa na stražnjoj strani reda; i pop () znači uklanjanje elementa koji se nalazi ispred reda. Nažalost, u C ++ ove funkcije ne vraćaju vrijednost gurnutu ili iskočenu. Dakle, da biste znali zadnji element prije guranja, mora se koristiti funkcija extra back (); a da bi se znao prvi element prije iskakanja, mora se koristiti dodatna funkcija front ().

Vrijednost je za tip podataka, kao što je instancirani objekt za klasu. Dakle, određena klasa može se koristiti kao tip podataka za instalaciju predloška reda. Različiti objekti za klasu postaju poput različitih vrijednosti za klasu.

Red čekanja ima aplikacije na računalu. Može se koristiti, na primjer, za upravljanje datotekama aplikacija za posao, ako su datoteke pohranjene na računalu.

Chrys