Eilė (duomenų struktūra): Skirtumas tarp puslapio versijų

Ištrintas turinys Pridėtas turinys
Taksonomas (aptarimas | indėlis)
S Pusiau automatinis skydelių datavimas
Šaltinis, papildyta
 
Eilutė 1:
{{Šaltiniai|neturi_nuo=2005 m. kovo|nuo=2020 m. rugpjūčio}}
[[Vaizdas:Data Queue.svg|thumb|Eilės veikimo principas]]
[[Vaizdas:Fifo queue.png|thumb|Eilės veikimo pavyzdįs, kai į ją pirma įdedami skaičiai 1, 2, 3, 4, 5, 6, o tada jie paimami]]
[[Vaizdas:Ring buffer LT.svg|thumb|Žiedinis buferis|]]
'''Eilė''' – duomenų struktūra, veikianti [[FIFO]] principu. Į ''eilę'' elementai dedami ta pačia tvarka, kuria yra iš jos imami. Savo veikimu primena eilę parduotuvėje: pirmas prie kasos atėjęs žmogus aptarnaujamas pirmiausiai, o paskutinis į eilę atsistojęs – paskiausiai.<ref>Eilė (std::queue) [[C++]]. [https://www.cplusplus.com/reference/queue/queue/]</ref>
<ref>Eilė (java.util.Queue) [[Java (programavimo kalba)|Java]]. [https://docs.oracle.com/javase/8/docs/api/java/util/Queue.html]</ref>
 
Eilės plačiai naudojamos [[Programavimas|programavime]], kai reikia [[Buferizacija|buferizuoti]] duomenis arba tiesiog vykdyti asinchroninį duomenų apdirbimą (pvz., tinklo programose).
eilutė 14 ⟶ 15:
Įprastinė eilė paprastai gali veikti tik jei ja vienu metu manipuliuoja viena gija. Sinchronizuota eilė pati užtikrina, jog visomis esminėmis jos duomenų stuktūromis vienu metu manipuliuos tik viena gija (kol vienoje gijoje vykdomas tokios eilės metodas, kitos gijos, besikreipiančios į eilės metodus, pristabdomos). Konkurentinės eilės algoritmas yra toks, jog duomenų struktūromis gali vienu metu saugiai manipuliuoti ir daug gijų.
 
Eilės neretai realizuojamos [[Tiesinis sąrašas|tiesinių sąrašų]] pagrindu. Fiksuotos didžiausios talpos eilės taip pat kuriamos žiedinio buferio pagrindu, kurį galima įsivaizduoti kaip žiedo pavidalo duomenų struktūrą kur yra duomenų turinti sritis.<ref>Žiedinio buferio pagrindai. [https://www.embedded.com/ring-buffer-basics/ embedded.com]</ref> Nauji elementai pridedami viename srities gale, jau perskaitytų (ir iš eilės pašalintų) elementų vietos kitame gale laikomos laisvais. Naudojama sritis nuolat juda žiediniame buferyje ratu.
Kartais eilės realizuojamos [[Tiesinis sąrašas|tiesinių sąrašų]] pagrindu.
 
== Realizacija naudojant masyvą ==
Tai gana paprasta realizacija. Dažniausiai naudojamas fiksuoto dydžio [[masyvas]]. Tuo atveju atminties naudojimas yra gana neefektyvus. Reikalingi šie kintamieji:
* masyvas <tt>M</tt>, bei jo dydis <tt>N</tt>
* eilės pradžios indeksas <tt>H</tt> bei pabaigos indeksas <tt>T</tt>
 
Pradžia:
 
H ← 0
T ← 0
 
Tikrinimas ar eilė tuščia:
 
if T = H then
eilė tuščia
 
Reikšmės <tt>V</tt> įdėjimas į eilę:
 
M[T] ← V
T ← T+1
if T = N then
T ← 0
 
Reikšmės V išėmimas iš eilės:
 
V ← M[H]
H ← H+1
if H = N then
H ← 0
 
Naudojant <tt>T</tt> ir <tt>H</tt> saugoma atmintis, leidžiant eilės pabaigai atsidurti prieš pradžią. Taip pat reikėtų tikrinti ar eilė nepersipildo, t. y. ar po <tt>T</tt> padidinimo, <tt>T</tt> "neperlipa" <tt>H</tt>.
 
== Šaltiniai ==
{{išn}}
 
{{Kompiuteriniai terminai}}