Stiva C# cu exemple Push & Pop
⚡ Rezumat inteligent
În C#, stiva este o colecție din spațiul de nume System.Collections care urmează principiul LIFO (last in, first out), unde metoda Push adaugă un element în partea de sus, iar metoda Pop îl elimină.

Ce este Stack în C#?
Stiva este o colecție de cazuri speciale care reprezintă un concept LIFO (ultimul intrat, primul ieșit). Pentru a înțelege mai întâi LIFO, să luăm un exemplu. Imaginați-vă un teanc de cărți cu fiecare carte ținută una peste alta.
Conceptul de ultimul intrat, primul ieșit în cazul cărților înseamnă că doar cea mai mare carte poate fi eliminată din teancul de cărți. Nu este posibil să eliminați o carte din mijloc, pentru că atunci asta ar perturba setarea stivei.
Prin urmare, în C#, și stiva funcționează în același mod. Elementele sunt adăugate la stivă, una peste alta. Procesul de adăugare a unui element la stivă se numește operație push. Pentru a elimina un element dintr-o stivă, puteți, de asemenea, să eliminați elementul cel mai de sus al stivei. Această operație este cunoscută sub numele de pop.
Să ne uităm la operațiunile disponibile pentru colecția Stack mai detaliat.
Declarația stivei
O stivă este creată cu ajutorul tipului Stack Data. Cuvântul cheie „nou” este folosit pentru a crea un obiect al unei Stive. Obiectul este apoi atribuit variabilei st.
Stack st = new Stack()
Adăugarea de elemente la stivă
Metoda push este folosită pentru a adăuga un element pe stivă. Sintaxa generală a enunțului este dată mai jos.
Stack.push(element)
Scoaterea elementelor din stivă
Metoda pop este folosită pentru a elimina un element din stivă. Operația pop va returna elementul cel mai de sus al stivei. Sintaxa generală a enunțului este dată mai jos
Stack.pop()
Conta
Această proprietate este folosită pentru a obține numărul de articole din stivă. Mai jos este sintaxa generală a acestei declarații.
Stack.Count
conţine
Această metodă este folosită pentru a vedea dacă un element este prezent în stivă. Mai jos este sintaxa generală a acestei declarații. Declarația va returna true dacă elementul există, altfel va returna valoarea false.
Stack.Contains(element)
Acum să vedem asta funcționând la nivel de cod. Toate codurile menționate mai jos vor fi scrise pe adresa noastră Aplicație de consolă. Codul va fi scris în fișierul nostru Program.cs.
În programul de mai jos, vom scrie codul pentru a vedea cum putem folosi metodele menționate mai sus.
Exemplul 1: Metoda Stack.Push().
În acest exemplu, vom vedea
- Cum se creează o stivă.
- Cum să afișați elementele stivei și să utilizați metodele Count și Contain.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); foreach (Object obj in st) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the stack " +st.Count); Console.WriteLine("Does the stack contain the elements 3 "+st.Contains(3)); Console.ReadKey(); } } }
Code Explicaţie:-
- Primul pas este folosit pentru a declara Stiva. Aici declarăm „st” ca o variabilă pentru a păstra elementele stivei noastre.
- Apoi, adăugăm 3 elemente la stiva noastră. Fiecare element este adăugat prin metoda Push.
- Acum, deoarece elementele stivei nu pot fi accesate prin poziția indexului, cum ar fi lista de matrice, trebuie să folosim o abordare diferită pentru a afișa elementele stivei. Obiectul (obj) este o variabilă temporară, care este declarată pentru păstrarea fiecărui element al stivei. Apoi folosim instrucțiunea foreach pentru a parcurge fiecare element al stivei. Pentru fiecare element de stivă, valoarea este atribuită variabilei obj. Apoi folosim comanda Console.Writeline pentru a afișa valoarea în consolă.
- Folosim proprietatea Count (st.contele) pentru a obține numărul de articole din teanc. Această proprietate va returna un număr. Afișăm apoi această valoare pe consolă.
- Apoi folosim metoda Conține pentru a vedea dacă valoarea lui 3 este prezentă în stiva noastră. Aceasta va returna o valoare adevărată sau falsă. Afișăm apoi această valoare returnată pe consolă.
Dacă codul de mai sus este introdus corect și programul este rulat, va fi afișată următoarea ieșire.
ieșire:
Din rezultat, putem vedea că sunt afișate elementele stivei. De asemenea, valoarea lui True este afișată pentru a spune că valoarea lui 3 este definită pe stivă.
notițe: Ați observat că ultimul element împins pe stivă este afișat primul. Acesta este elementul cel mai de sus al stivei. Numărul de elemente ale stivei este, de asemenea, afișat în rezultat.
Exemplul 2: Metoda Stack.Pop().
Acum să ne uităm la funcționalitatea „eliminare”. Vom vedea codul necesar pentru a elimina elementul cel mai de sus din stivă.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); st.Pop(); foreach (Object obj in st) { Console.WriteLine(obj); } Console.ReadKey(); } } }
Code Explicaţie:-
- Aici lansăm doar metoda pop care este folosită pentru a elimina un element din stivă.
Dacă codul de mai sus este introdus corect și programul este rulat, va fi afișată următoarea ieșire.
ieșire:
Putem vedea că elementul 3 a fost scos din stivă.
Metoda C# Stack Peek()
Metodele Push și Pop funcționează cu partea de sus a stivei, dar uneori trebuie doar să te uiți la elementul de sus fără a-l elimina. Metoda Peek face exact asta. Returnează valoarea de sus a stivei, lăsând colecția neschimbată, ceea ce este util atunci când vrei să testezi următorul element înainte de a decide să-l extragi.
Pas 1) Creați o stivă și introduceți trei elemente în ea, astfel încât valoarea 3 să stea deasupra.
Pas 2) Apelați metoda Peek pentru a citi elementul de sus, apoi verificați proprietatea Count pentru a confirma că nu a fost eliminat nimic.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); Console.WriteLine(st.Peek()); Console.WriteLine(st.Count); Console.ReadKey(); } } }
Code Explicaţie:-
- Se declară o stivă numită st, iar valorile 1, 2 și 3 sunt adunate cu metoda Push, astfel încât 3 devine elementul de top.
- Metoda Peek returnează elementul de sus fără a-l elimina, iar proprietatea Count raportează în continuare numărul complet de elemente din stivă.
Când programul rulează, acesta afișează valoarea 3 de la Peek și apoi numărătoarea 3, ceea ce dovedește că elementul rămâne pe stivă. Dacă stiva este goală, Peek generează o eroare InvalidOperationException, deci este sigur să verificați Count înainte de a o apela.
Stiva generică în C#
Exemplele de mai sus utilizează clasa non-generică Stack din System.Collections, care stochează fiecare element ca obiect. Codul C# modern preferă de obicei clasa generică Stack. clasa din spațiul de nume System.Collections.Generic. Aceasta leagă stiva la un singur tip declarat, astfel încât compilatorul verifică fiecare Push și Pop și nu este necesară nicio conversie sau boxing.
Principalele beneficii ale stivei generice sunt enumerate mai jos.
- Tip de siguranță: Tipul este fixat la declarare, deci numai valorile acelui tip pot fi transmise, iar erorile sunt depistate la momentul compilării.
- Fără box: Tipurile de valori precum int sunt stocate direct, ceea ce evită costul de boxing pe care îl plătește stiva non-generică.
- Curățătorul citește: Funcțiile Pop și Peek returnează direct tipul declarat, deci nu se convertește rezultatul înapoi din obiect.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { Stack<string> st = new Stack<string>(); st.Push("Java"); st.Push("Python"); Console.WriteLine(st.Pop()); Console.ReadKey(); } } }
În acest exemplu, stiva este declarată ca Stack , deci acceptă doar valori de tip șir de caractere. Metoda Pop returnează direct un șir de caractere și afișează Python, ultima valoare introdusă. Pentru orice proiect nou, stiva generică este alegerea recomandată.
Diferența dintre stivă și coadă în C#
O stivă și o coadă ambele sunt colecții care controlează ordinea în care elementele sunt eliminate, dar folosesc reguli opuse. O stivă este ultima intrată, prima ieșită, în timp ce o coadă este prima intrată, prima ieșită. Alegerea celei potrivite face ca intenția codului dvs. să fie clară pentru ceilalți dezvoltatori.
Principalele diferențe sunt enumerate mai jos:
- Ordin: O stivă elimină primul element adăugat cel mai recent (LIFO), în timp ce o coadă elimină primul elementul cel mai vechi (FIFO).
- Metode: O stivă folosește Push și Pop, în timp ce o coadă folosește Enqueue pentru a adăuga și Dequeue pentru a elimina.
- Acces la elementul superior: O stivă citește următorul element cu Peek, iar o coadă citește următorul element cu Peek din față.
- Utilizări tipice: Stivele se potrivesc cu caracteristicile de anulare, evaluarea expresiilor și recursivitatea tracrege, în timp ce cozile se potrivesc planificării, buffering-ului și traversării pe lățime întâi.
Ambele tipuri sunt disponibile în formă generică sub denumirea de Stack și coadă în System.Collections.Generic, astfel încât să obțineți siguranță de tip cu oricare dintre opțiuni.




