Úvod
Fronta je kolekce položek, kde první položka přidaná do seznamu musí být první položkou, která má být následně odstraněna. Jak se do sbírky přidávají položky, zvětšuje se její velikost, tj.E. roste do délky. Kdykoli má být některá položka odstraněna, musí být přidána první. Pokud jsou položky odebírány nepřetržitě, pak další odebraná, je druhá položka; třetí je poté odstraněn atd.
Po odebrání první položky z původního seznamu se druhá stane první položkou. Po odebrání druhé položky se třetí stane první položkou atd.
Dobrým příkladem fronty v reálném životě je, když se lidé seřadí, aby počkali na službu nebo dobro. První osobě se podává první před poslední. Fronta, o které se v tomto kurzu hovoří, je softwarová fronta navržená v C++.
FIFO
FIFO znamená First-In, First-Out. Je to další způsob, jak ocenit frontu. To znamená, že první položka, která vstoupí do seznamu, je první položkou, která má být odstraněna, kdykoli má dojít k odstranění. Začátek seznamu se nazývá hlava nebo přední strana; konec seznamu se nazývá zadní nebo zadní část.
Základní operace
Softwarová fronta musí mít alespoň následující operace:
tam
Tato operace přidá nový prvek do zadní části fronty. Tato operace se oficiálně nazývá, zařadit do fronty.
posun
Tato operace odebere první prvek fronty a druhý prvek se stane novým prvním prvkem. Tato operace se oficiálně nazývá dequeue. Říká se tomu pop v C++.
Tento článek vysvětluje, jak používat datovou strukturu fronty C ++. Měli byste znát C ++ ukazatele a odkazy, abyste pochopili zbytek tohoto článku.
Třída a objekty
Třída je sada proměnných a funkcí, které pracují společně, kde proměnné nemají přiřazené hodnoty. Když jsou proměnným přiřazeny hodnoty, třída se stane objektem. Různé hodnoty dané stejné třídě vedou k různým objektům; to znamená, že různé objekty jsou stejné třídy s různými hodnotami. Vytváření objektu z třídy se říká, že vytváří instanci objektu.
Název, fronta, je třída. Objekt vytvořený ze třídy fronty má název vybraný programátorem.
Funkce, která patří do třídy, je nutná k vytvoření instance objektu z třídy. V C ++ má tato funkce stejný název jako název třídy. Objekty vytvořené (instancované) ze třídy mají programátorům pojmenovaná různá jména.
Vytvoření objektu z třídy znamená konstrukci objektu; to také znamená instanci.
Program C ++, který používá třídu fronty, začíná následujícími řádky v horní části souboru:
#zahrnout#zahrnout
pomocí jmenného prostoru std;
První řádek je pro vstup / výstup. Druhým řádkem je umožnit programu využívat všechny funkce třídy fronty. Třetí řádek umožňuje programu používat názvy ve standardním jmenném prostoru.
Přetížení funkce
Když mají dva nebo více různých podpisů funkcí stejný název, říká se, že je přetížený. Když je volána jedna funkce, počet a typ argumentů určuje, která funkce je skutečně provedena.
Konstrukce
frontaNásledující deklarace vytvoří instanci fronty s názvem que typu int.
frontaFronta je prázdná. Deklarace začíná vyhrazeným slovem, frontou následovanou lomenými závorkami s datovým typem. Pak máte programátor pojmenovaný do fronty.
Vytváření se seznamem inicializátorů
Následující definice ukazuje, jak vytvořit frontu se seznamem inicializátorů:
frontaZničení fronty
Chcete-li zničit frontu, nechte ji jít mimo rozsah.
Přístup k prvku fronty
push (hodnota)
Fronta je seznam First-In-First-Out. Každá hodnota je tedy přidána zezadu. Následující segment kódu vytvoří prázdnou frontu, po které se zezadu přidá pět float hodnot:
frontaque.tlačit (1.1);
que.tlačit (2.2);
que.tlačit (3.3);
que.tlačit (4.4);
que.tlačit (5.5);
velikost () konst
Tím se vrátí počet prvků ve frontě. Následující kód ukazuje:
frontaque.tlačit (1.1); que.tlačit (2.2); que.tlačit (3.3); que.tlačit (4.4); que.tlačit (5.5);
cout << que.size() << '\n';
Výstup je 5.
přední()
Tím se vrátí odkaz na první prvek ve frontě, aniž byste prvek odstranili. Výstup následujícího kódu je 1.1.
frontaque.tlačit (1.1); que.tlačit (2.2); que.tlačit (3.3); que.tlačit (4.4); que.tlačit (5.5);
cout << que.front() << '\n';
Prvek není odebrán z fronty.
přední () konst
Když před konstrukcí fronty předchází const, provede se výraz „front () const“ místo „front ()“. Používá se například v následujícím kódu.
konstantní frontacout << que.front() << '\n';
Je vrácena konstantní reference. Prvek není odstraněn z vektoru. Prvky fronty nelze změnit.
zadní()
Tím se vrátí odkaz na poslední prvek fronty bez odebrání prvku. Výstup následujícího kódu je 5.5.
frontaque.tlačit (1.1); que.tlačit (2.2); que.tlačit (3.3); que.tlačit (4.4); que.tlačit (5.5);
cout << que.back() << '\n';
zpět () konst
Když před konstrukcí fronty předchází const, provede se výraz „back () const“ místo „back ()“. Používá se například v následujícím kódu.
konstantní frontacout << que.back() << '\n';
Je vrácena konstantní reference. Prvek není odebrán z fronty. S předchozím const pro konstrukci fronty nelze prvky ve frontě změnit.
Kapacita fronty
velikost () konst
- viz výše
prázdná () konst
To vrátí 1 pro true, pokud ve frontě nejsou žádné prvky, nebo 0 pro false, pokud je fronta prázdná. Následující kód to ilustruje:
frontacout << que1.empty() << '\n';
fronta
cout << que2.empty() << '\n';
Výstupem je:
01
Modifikátory front
pop ()
Fronta je FIFO, takže jakýkoli prvek, který má být odstraněn, musí být odstraněn z horní části (hlavy) fronty. Tato členská funkce odebere první prvek bez vrácení. Následující kód to ilustruje:
frontacout << que.front() << '\n';
que.pop ();
cout << que.size() << '\n';
Výstupem je:
1.14
A.vyměnit (b)
Lze zaměnit dvě fronty, jak je znázorněno v tomto segmentu kódu:
frontafronta
que1.swap (que2);
cout << "First element and size of que1:
"<< que1.front() <<", "<< que1.size() << '\n';
cout << "First element and size of que2 "<<
que2.přední() <<", "<< que2.size() << '\n';
Výstupem je:
První prvek a velikost que1: 10, 2
První prvek a velikost que2: 1.1, 5
Upozorňujeme, že v případě potřeby se délka fronty zvýší. Také hodnoty, které neměly nahrazení, jsou nahrazeny nějakou výchozí hodnotou. Datové typy musí být stejného typu.
Rovnost a relační operátoři pro fronty
U běžných znaků v C ++ ve vzestupném pořadí jsou čísla před velkými písmeny, která jsou před malými písmeny. Vesmírná postava přichází před nulu a všechny.
Provozovatelé rovnosti
Vrátí 1 pro true a 0 pro false.
Operátor ==
Vrátí 1, pokud mají dvě fronty stejnou velikost a odpovídající prvky jsou stejné; jinak vrátí 0. Příklad:
frontafronta
int num = que1 == que2;
cout << num << '\n';
Výstup je: 0.
The != Operátor
- opak výše uvedeného. Příklad:
frontafronta
int num = que1 != que2;
cout << num << '\n';
Výstup je: 1.
Relační operátoři
Vrátí 1 pro true a 0 pro false.
The < Operator
Vrátí 1, pokud je první fronta počáteční podmnožinou druhé fronty, přičemž prvky dvou stejných částí jsou stejné a ve stejném pořadí. Pokud mají obě fronty stejnou velikost nebo různé velikosti a pohybují se zleva doprava, v první frontě se setká s prvkem, který je menší než odpovídající prvek ve druhé frontě, pak se 1 vrátí. Jinak se vrátí 0. Příklad:
frontafronta
int num = que1 < que2;
cout << num << '\n';
Výstup je 1. < does not include the case when the size and order are the same.
Provozovatel
- opak výše uvedeného. Příklad:
frontafronta
int num = que1> que2;
cout << num << '\n';
Výstup: 0
The <= Operator
- stejný jako < but includes the case when the size and order are the same. Example:
frontafronta
int num = que1 <= que2;
cout << num << '\n';
Výstup: 1
Operátor> =
- opak výše uvedeného. Příklad:
frontafronta
int num = que1> = que2;
cout << num << '\n';
Výstup: 0
Třída a její instance objekty
Hodnota je pro datový typ, protože instanční objekt je pro třídu. Konstrukce fronty může také přijmout třídu jako datový typ. Ilustruje to následující program:
#zahrnout#zahrnout
pomocí jmenného prostoru std;
třída TheCla
veřejnost:
int num;
statický znak ch;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
static void fun (char ch)
if (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
fronta
que.tlačit (obj1); que.tlačit (obj2); que.tlačit (obj3); que.tlačit (obj4); que.tlačit (obj5);
cout << que.size() << '\n';
návrat 0;
Výstup je 5.
Spojový seznam
Seznam front se odborně nazývá propojený seznam. Existují dva typy propojených seznamů pro frontu: jednotlivě propojený seznam a dvojnásobně propojený seznam.
Jednotlivě propojený prvek seznamu může být implementován strukturou dvou členů. Jeden člen drží ukazatel na další prvek a druhý člen drží vztažný bod (singulární pro data).
Dvojitě propojený prvek seznamu může být implementován strukturou tří členů. Střední člen drží vztažný bod, zatímco první a třetí člen drží ukazatele na své sousední prvky.
Aplikace fronty
Fronta je datová struktura první-první-první. Existují situace ve výpočetní technice, kdy data přicházejí ve formě fronty, což vyžaduje chování typu „první do první“.
Sdílení počítačových zdrojů
Prostředek v počítači je jakákoli fyzická nebo virtuální součást s omezenou dostupností. Zahrnují CPU, grafickou kartu, pevný disk a paměť. Sdílení takového prostředku vyžaduje frontu.
Řešení přerušení
Počítačové periferie musí počítač občas přerušit. S přerušením je třeba zacházet stejným způsobem, jakým dorazili. To potřebuje frontu.
Spravovat informace.
Frontu lze použít například ke správě souborů aplikace pro úlohu, pokud jsou soubory uloženy v počítači.
Závěr
Fronta je datová struktura seznamu, což je buď jednotlivě propojený seznam, nebo dvojnásobně propojený seznam. První prvek, který vstoupí do seznamu, je zpravidla prvním prvkem, který vyjde. C ++ poskytuje strukturu dat fronty ve své standardní knihovně. Kategorie členských funkcí a operátorů dostupných pro tuto strukturu jsou konstrukce fronty, přístup k prvku fronty, kapacita fronty, modifikátory front a operátory přetížené fronty.
Jakákoli datová struktura fronty musí poskytovat alespoň členské funkce push () a pop (). push () znamená, odeslání nového prvku na konec fronty; a pop () znamená odebrání prvku, který je v přední části fronty. Bohužel v C ++ tyto funkce nevracejí hodnotu tlačenou nebo vyskočenou. Abychom tedy poznali poslední prvek před tlačením, musí být použita funkce extra back (); a znát první prvek před vyskakováním, musí být použita funkce extra front ().
Hodnota je pro datový typ, protože instanční objekt je pro třídu. Konkrétní třídu lze tedy použít jako datový typ pro instanci šablony fronty. Různé objekty pro třídu se stanou jako různé hodnoty pro třídu.
Fronta obsahuje aplikace v počítači. Lze jej použít například ke správě souborů aplikace pro úlohu, pokud jsou soubory uloženy v počítači.
Chrys