C# Stack med Push & Pop exempel

⚡ Smart sammanfattning

Stack i C# är en samling från namnrymden System.Collections som följer LIFO-principen (sist in, först ut), där Push-metoden lägger till ett element högst upp och Pop-metoden tar bort det.

  • 📚 LIFO-koncept: En trave fungerar som en hög med böcker, så det sista elementet som trycks ner är det första som tas bort.
  • Tryck och poppa: Push-metoden lägger till ett element högst upp i stacken, och Pop-metoden tar bort och returnerar det översta elementet.
  • ???? Titta, räkna, innehåller: Peek-metoden läser det översta elementet utan att ta bort det, medan Count och Contains rapporterar storlek och medlemskap.
  • 🧪 Utarbetade exempel: Två konsolprogram demonstrerar Push med Count och Contains, sedan Pop, så att du kan trace LIFO-ordern.
  • 🛠️ Generisk stack: Stacken Klassen i System.Collections.Generic lägger till typsäkerhet vid kompilering och undviker boxning för ny C#-kod.
  • 🤖 AI-hjälp: GitHub Copilot stöder C# Stack-operationer, och ML.NET läser data genom typade samlingar istället för en icke-generisk stack.

C# Stack

Vad är Stack i C#?

Stacken är en specialfallssamling som representerar ett sist in först ut-koncept (LIFO). För att först förstå LIFO, låt oss ta ett exempel. Föreställ dig en hög med böcker med varje bok ovanpå varandra.

Konceptet med sist in först ut när det gäller böcker innebär att endast den översta boken kan tas bort från bokhögen. Det går inte att ta bort en bok däremellan, för då skulle det störa inställningen av högen.

Därför i C#, stacken fungerar också på samma sätt. Element läggs till i stapeln, en ovanpå varandra. Processen att lägga till ett element i stacken kallas en push-operation. För att ta bort ett element från en stapel kan du också ta bort det översta elementet i stapeln. Denna operation kallas pop.

Låt oss titta på de funktioner som är tillgängliga för Stack-samlingen mer detaljerat.

Deklaration av stacken

En stack skapas med hjälp av typen Stack Data. Nyckelordet "ny" används för att skapa ett objekt av en stack. Objektet tilldelas sedan variabeln st.

Stack st = new Stack()

Lägga till element i stacken

Pushmetoden används för att lägga till ett element i stacken. Den allmänna syntaxen för uttalandet ges nedan.

Stack.push(element)

Ta bort element från stapeln

Popmetoden används för att ta bort ett element från stacken. Popoperationen returnerar det översta elementet i stacken. Den allmänna syntaxen för uttalandet ges nedan

 Stack.pop()

Att Räkna

Denna egenskap används för att få antalet objekt i stacken. Nedan är den allmänna syntaxen för detta uttalande.

Stack.Count

innehåller

Denna metod används för att se om ett element finns i stacken. Nedan är den allmänna syntaxen för detta uttalande. Uttrycket kommer att returnera sant om elementet finns, annars returnerar det värdet false.

Stack.Contains(element)

Låt oss nu se att detta fungerar på kodnivå. All nedan nämnda kod kommer att skrivas till vår Konsolapplikation. Koden kommer att skrivas till vår Program.cs-fil.

I programmet nedan kommer vi att skriva koden för att se hur vi kan använda de ovan nämnda metoderna.

Exempel 1: Stack.Push()-metoden

I det här exemplet kommer vi att se

  • Hur en stack skapas.
  • Hur man visar elementen i stacken och använder metoderna Räkna och Innehåll.

Stapla i 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 Förklaring:-

  1. Det första steget används för att deklarera Stacken. Här deklarerar vi "st" som en variabel för att hålla elementen i vår stack.
  2. Därefter lägger vi till 3 element till vår stack. Varje element läggs till via Push-metoden.
  3. Nu eftersom stackelementen inte kan nås via indexpositionen som arraylista, måste vi använda ett annat tillvägagångssätt för att visa elementen i stacken. Objektet (obj) är en temporär variabel, som deklareras för att hålla varje element i stacken. Vi använder sedan foreach-satsen för att gå igenom varje element i stacken. För varje stackelement tilldelas värdet till variabeln obj. Vi använder sedan kommandot Console.Writeline för att visa värdet för konsolen.
  4. Vi använder egenskapen Count (st.count) för att få antalet föremål i högen. Den här egenskapen returnerar ett nummer. Vi visar sedan detta värde till konsolen.
  5. Vi använder sedan Contains-metoden för att se om värdet 3 finns i vår stack. Detta kommer att returnera antingen ett sant eller falskt värde. Vi visar sedan detta returvärde till konsolen.

Om ovanstående kod anges korrekt och programmet körs kommer följande utdata att visas.

Produktion:

Stapla i C#

Från utgången kan vi se att elementen i stacken visas. Dessutom visas värdet på True för att säga att värdet 3 är definierat på stacken.

Anmärkningar: Du har märkt att det sista elementet som tryckts på stapeln visas först. Detta är det översta elementet i stacken. Antalet stackelement visas också i utgången.

Exempel 2: Metoden Stack.Pop()

Låt oss nu titta på "ta bort"-funktionen. Vi kommer att se koden som krävs för att ta bort det översta elementet från stacken.

Stapla i 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 Förklaring:-

  1. Här utfärdar vi bara popmetoden som används för att ta bort ett element från stacken.

Om ovanstående kod anges korrekt och programmet körs, kommer följande utdata att visas.

Produktion:

Stapla i C#

Vi kan se att elementet 3 togs bort från stapeln.

C# Stack Peek()-metoden

Push- och Pop-metoderna fungerar med toppen av stacken, men ibland behöver man bara titta på det översta elementet utan att ta bort det. Peek-metoden gör just det. Den returnerar det översta värdet i stacken medan samlingen lämnas oförändrad, vilket är användbart när man vill testa nästa element innan man bestämmer sig för att poppa det.

Steg 1) Skapa en stapel och tryck tre element på den, så att värdet 3 sitter överst.

Steg 2) Anropa Peek-metoden för att läsa det översta elementet och kontrollera sedan Count-egenskapen för att bekräfta att ingenting togs bort.

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 Förklaring:-

  1. En stack med namnet st deklareras, och värdena 1, 2 och 3 adderas med Push-metoden, så 3 blir det översta elementet.
  2. Peek-metoden returnerar det översta elementet utan att ta bort det, och egenskapen Count rapporterar fortfarande hela antalet objekt i stacken.

När programmet körs skriver det ut värdet 3 från Peek och sedan räkningen 3, vilket bevisar att elementet stannar kvar på stacken. Om stacken är tom, kastar Peek ett ogiltigt fel.OperationException, så det är säkert att kontrollera Count innan det anropas.

Generisk stack i C#

Exemplen ovan använder den icke-generiska Stack-klassen från System.Collections, som lagrar varje element som ett objekt. Modern C#-kod föredrar vanligtvis den generiska Stack. klassen från namnrymden System.Collections.Generic. Den binder stacken till en enda deklarerad typ, så kompilatorn kontrollerar varje Push och Pop och ingen casting eller boxing behövs.

De viktigaste fördelarna med den generiska Stacken listas nedan.

  • Typ säkerhet: Typen är fast vid deklarationen, så endast värden av den typen kan skickas, och fel upptäcks vid kompileringstillfället.
  • Ingen boxning: Värdetyper som int lagras direkt, vilket undviker den boxing-kostnad som den icke-generiska stacken betalar.
  • Rengöringsmedlet läser: Pop och Peek returnerar den deklarerade typen direkt, så du kastar inte tillbaka resultatet från objektet.
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();
  }
 }
}

I det här exemplet deklareras stacken som Stack , så den accepterar endast strängvärden. Pop-metoden returnerar en sträng direkt och skriver ut Python, det senast tryckta värdet. För alla nya projekt, den generiska Stack är det rekommenderade valet.

Skillnaden mellan stack och kö i C#

En stapel och en är båda samlingar som styr ordningen i vilka element tas bort, men de använder motsatta regler. En stack är sist in, först ut, medan en kö är först in, först ut. Att välja rätt typ gör avsikten med din kod tydlig för andra utvecklare.

De viktigaste skillnaderna listas nedan:

  • Beställa: En stack tar bort det senast tillagda elementet först (LIFO), medan en kö tar bort det äldsta elementet först (FIFO).
  • Metoder: En stack använder Push och Pop, medan en kö använder Enqueue för att lägga till och Dequeue för att ta bort.
  • Åtkomst till översta elementet: En stapel läser sitt nästa objekt med Peek, och en kö läser sitt nästa objekt med Peek framifrån.
  • Typiska användningsområden: Stackar anpassar ångra-funktioner, uttrycksutvärdering och rekursion trackung, medan köer passar schemaläggning, buffring och bredd-först-traversal.

Båda typerna finns tillgängliga i generisk form som Stack och kö i System.Collections.Generic, så du får typsäkerhet med båda alternativen.

Vanliga frågor

Att anropa Pop eller Peek på en tom stack ger ett ogiltigt resultat.OperationException. Kontrollera egenskapen Count först, eller använd de generiska Stack-metoderna TryPop och TryPeek, som returnerar falskt istället för att utlösa ett utlösande värde när stacken inte innehåller några element.

Push och Pop körs båda i konstant O(1)-tid eftersom de bara nuddar toppen av stacken. När den interna arrayen måste växa, ändrar en tillfällig Push storleken på den, men den genomsnittliga kostnaden per operation förblir konstant.

Nej. En stack exponerar bara sin topp genom Peek och Pop, så den har ingen indexåtkomst som en lista. För att läsa varje värde, räkna upp stacken med en foreach-loop eller kopiera den med ToArray-metoden.

Clear-metoden tar bort alla element från stacken i ett anrop och nollställer Count. För att istället ta bort objekt ett i taget från toppen, anropa Pop i en loop tills Count når noll.

Standardklassen Stack är inte trådsäker för skrivningar när flera trådar ändrar den samtidigt. För samtidig åtkomst, använd ConcurrentStack från System.Collections.Concurrent, som erbjuder atomära TryPush- och TryPop-metoder utan externa lås.

Anropa ToArray-metoden för att kopiera stacken till en ny array, ordnad uppifrån och ned. Du kan också skicka stacken till en List-konstruktor för att bygga en generisk lista medan keeping samma ordning.

Ja. GitHub Copilot skriver Stack-deklarationer, Push- och Pop-anrop och foreach-loopar från en kort kommentar eller ett metodnamn. Den föreslår ofta den generiska Stack-versionen, eftersom det är den rekommenderade samlingen för ny C#-kod.

Stackar lagrar sällan ML.NET-träningsdata, som flödar genom typade samlingar och IDataView-pipelinen. LIFO-stackkonceptet förekommer dock i maskininlärningsalgoritmer för bakåtriktade data.trackung, djup-först-sökning och hantering av rekursiva metodanrop.

Sammanfatta detta inlägg med: