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ă.

  • 📚 Conceptul LIFO: O stivă funcționează ca o grămadă de cărți, deci ultimul element împins este primul îndepărtat.
  • ➕ Împinge și Pocnește: Metoda Push adaugă un element în partea de sus a stivei, iar metoda Pop elimină și returnează elementul de deasupra.
  • 👀 Privește, Numără, Conține: Metoda Peek citește elementul de sus fără a-l elimina, în timp ce Count și Contains raportează dimensiunea și apartenența.
  • 🧪 Exemple lucrate: Două programe de consolă demonstrează Push cu Count și Contains, apoi Pop, astfel încât să puteți tracordinul LIFO.
  • 🛠️ Stivă generică: Stiva Clasa din System.Collections.Generic adaugă siguranța tipurilor la compilare și evită boxing-ul pentru codul C# nou.
  • 🤖 Asistență AI: GitHub Copilot schelează operațiunile C# Stack, iar ML.NET citește datele prin colecții tipizate în loc de o stivă non-generică.

Stiva C#

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.

Stiva în C#

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:-

  1. Primul pas este folosit pentru a declara Stiva. Aici declarăm „st” ca o variabilă pentru a păstra elementele stivei noastre.
  2. Apoi, adăugăm 3 elemente la stiva noastră. Fiecare element este adăugat prin metoda Push.
  3. 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ă.
  4. 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ă.
  5. 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:

Stiva în C#

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ă.

Stiva în C#

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:-

  1. 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:

Stiva în C#

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:-

  1. 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.
  2. 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.

Întrebări frecvente

Apelarea Pop sau Peek pe o stivă goală generează o eroare Invalid.OperationException. Verificați mai întâi proprietatea Count sau utilizați metodele generice Stack TryPop și TryPeek, care returnează o valoare falsă în loc să genereze o valoare atunci când stiva nu conține elemente.

Atât „Push”, cât și „Pop” rulează în timp constant O(1) deoarece ating doar partea superioară a stivei. Când matricea internă trebuie să crească, o comandă „Push” ocazională o redimensionează, dar costul mediu per operație rămâne constant.

Nu. O stivă își expune doar vârful prin Peek și Pop, deci nu are un accesor de index precum o listă. Pentru a citi fiecare valoare, enumerați stiva cu o buclă foreach sau copiați-o folosind metoda ToArray.

Metoda Clear elimină fiecare element din stivă într-un singur apel și resetează Count la zero. Pentru a elimina elementele pe rând de la început, apelați Pop într-o buclă până când Count ajunge la zero.

Clasa standard Stack nu este sigură pentru scrieri atunci când mai multe fire de execuție o modifică simultan. Pentru acces concurent, utilizați ConcurrentStack din System.Collections.Concurrent, care oferă metode atomice TryPush și TryPop fără blocări externe.

Apelați metoda ToArray pentru a copia stiva într-un nou array, ordonat de sus în jos. De asemenea, puteți transmite stiva unui constructor List pentru a construi o listă generică în timp ce păstrațiping aceeasi ordine.

Da. GitHub Copilot scrie declarații Stack, apeluri Push și Pop și bucle foreach dintr-un comentariu scurt sau un nume de metodă. Sugerează frecvent versiunea generică Stack, deoarece aceasta este colecția recomandată pentru codul C# nou.

Stivele stochează rareori date de antrenament ML.NET, care circulă prin colecții tipizate și canalul IDataView. Cu toate acestea, conceptul de stivă LIFO apare în algoritmii de învățare automată pentru back-end.tracrege, căutare în profunzime și gestionarea apelurilor recursive de metode.

Rezumați această postare cu: