LIFO: ultimul intrat este primul ieșit.
FIFO: primul intrat este primul ieșit.
Stivele (Stack) și cozile (Queue) nu sunt doar concepte abstracte de programare; ele reflectă perfect modul în care interacționăm cu obiectele și informațiile în viața de zi cu zi.
Iată o colecție bogată de exemple reale, împărțite pe categorii, pentru a înțelege exact unde și cum sunt folosite (atât separat, cât și împreună).
1. Stiva (Stack) – Principiul LIFO (Last In, First Out)
În cazul stivei, ultimul obiect adăugat este primul care va fi scos. Gândește-te la o stivă ca la un tub vertical blocat la bază.
În viața de zi cu zi:
- Setul de farfurii spălate: Când speli vasele, le pui una peste alta. Când ai nevoie de o farfurie pentru a mânca, o iei mereu pe cea de deasupra (cea mai recent pusă), nu pe cea de la fundul grămezii.
- Un pachet de cărți de joc: Tragi mereu prima carte de sus, adică ultima care a fost așezată pe pachet.
- Tubul de chipsuri Pringles: Primul chips introdus în fabrică va fi ultimul pe care îl mănânci (cel de la fundul tubului).
- Hainele într-un troller: Când îți împachetezi hainele una peste alta, cele de deasupra (puse ultimele) sunt primele pe care le scoți când ajungi la hotel.
În tehnologie și software:
- Butonul "Undo" (Ctrl + Z): Editorul de text (sau Photoshop) salvează fiecare acțiune a ta într-o stivă. Când apeși Undo, sistemul anulează ultima acțiune făcută (cea din vârful stivei).
- Istoricul browserului (Butonul "Back"): Când navighezi de pe pagina A pe pagina B, și apoi pe C, browserul le pune într-o stivă. Când apeși pe săgeata înapoi, te întoarce la C, apoi la B.
- Apelurile de funcții în programare (Call Stack): Când o funcție A() apelează o funcție B(), calculatorul trebuie să „țină minte” unde a rămas în A. Pune A în stivă, execută B, iar când B se termină, revine la ce era în vârful stivei (A).
2. Coada (Queue) – Principiul FIFO (First Come, First Served / First In, First Out)
În cazul cozii, primul sosit este primul servit. Este structura ideală pentru corectitudine și ordine.
În viața de zi cu zi:
- Coada de la supermarket / bancă: Persoana care s-a așezat prima la rând este prima care plătește și pleacă. Nimeni nu are voie să se bage în față (teoretic).
- Drive-thru la fast-food: Prima mașină care intră pe bandă este prima care comandă, prima care plătește și prima care pleacă cu mâncarea.
- Spălătoria auto automată: Mașinile intră una câte una pe bandă. Cea care a intrat prima iese prima, curată, la celălalt capăt.
- Banda de bagaje de la aeroport: Bagajele ies din tunel și merg pe bandă în ordinea în care au fost descărcate din container.
În tehnologie și software:
- Imprimanta de la birou (Print Queue): Dacă 5 colegi trimit documente la printat în același timp, imprimanta le pune într-o coadă. Documentul trimis cu o secundă mai devreme va fi listat primul.
- Sistemele de ticketing la suport tehnic: Când trimiți un e-mail la eMAG sau la bancă pentru o problemă, cererea ta intră într-o coadă. Operatorii preiau tichetele în ordinea sosirii.
- Streaming-ul video (Buffering): Când te uiți la un film pe Netflix, pachetele de date video descărcate de pe internet sunt puse într-o coadă (buffer). Player-ul video redă cadrele exact în ordinea în care au sosit.
3. Folosite ÎMPREUNĂ (Sisteme complexe)
Multe sisteme din lumea reală combină aceste două structuri pentru a gestiona fluxuri logice de date sau acțiuni.
A. Managementul unui restaurant (Bucătărie + Ospătari)
- Coada (Comenzile clienților): Clienții se așază la mese și comandă. Ospătarii trimit comenzile la bucătărie. Bucătarii le preiau în sistem FIFO (Coadă): prima comandă primită este prima gătită, pentru ca oamenii să nu aștepte prea mult.
- Stiva (Spălarea și folosirea farfuriilor): În spatele restaurantului, vasele murdare sunt spălate și puse într-o stivă (LIFO). Bucătarul, când termină de gătit, ia farfuria de deasupra stivei de vase curate pentru a monta mâncarea.
B. Depozitele Amazon sau de curierat
- Coada (Livrarea comenzilor): Comenzile cumpărătorilor intră într-o coadă. Algoritmul le procesează în ordinea primirii pentru a genera etichetele de transport.
- Stiva (Încărcarea în duba de curierat): Când curierul încarcă coletele în mașină pentru o anumită stradă, le pune în ordine inversă (în stivă). Ultimele colete încărcate (cele dinspre ușă) sunt primele pe care le va livra fizic când oprește mașina.
C. Algoritmul de căutare pe hărți (GPS / Google Maps)
- Când GPS-ul caută cel mai scurt drum de la București la Cluj, folosește algoritmi de parcurgere a grafurilor (orașelor):
- Folosește o coadă (Breadth-First Search) pentru a analiza orașele vecine strat cu strat (egal depărtate).
- Folosește o stivă (Depth-First Search) dacă vrea să meargă pe o singură rută până la capăt (să exploreze în adâncime) și să facă backtracking (să se întoarcă înapoi dacă dă de un drum blocat).
D. Aplicațiile de muzică (Spotify / YouTube Music)
- Coada (The Play Queue): Melodiile pe care le adaugi tu manual să ruleze în continuare ("Add to queue") sunt redate în ordinea în care le-ai pus.
- Stiva (Butonul "Previous"): Player-ul salvează melodiile pe care tocmai le-ai ascultat într-o stivă. Când apeși pe butonul de melodie anterioară, sistemul face pop din stivă pentru a-ți reda ultima melodie ascultată.