Push ve Pop Örnekleriyle C# Yığını

⚡ Akıllı Özet

C# dilinde yığın (stack), System.Collections ad alanından gelen ve son giren ilk çıkar (LIFO) prensibini izleyen bir koleksiyondur; burada Push metodu bir öğeyi en üste ekler ve Pop metodu onu kaldırır.

  • 📚 LIFO kavramı: Bir yığın, kitap yığını gibi çalışır; bu nedenle en son itilen eleman, ilk çıkarılan elemandır.
  • İtme ve Çıkarma: `Push` metodu yığının en üstüne bir öğe ekler, `Pop` metodu ise en üstteki öğeyi kaldırır ve döndürür.
  • ???? Gözat, Say, İçerir: Peek metodu en üstteki öğeyi kaldırmadan okurken, Count ve Contains metotları boyut ve üyelik bilgilerini raporlar.
  • 🧪 Örnek çözümler: İki konsol programı, Count ve Contains fonksiyonlarıyla Push işlemini, ardından da Pop işlemini nasıl yapabileceğinizi gösteriyor. tracLIFO sırasına göre.
  • Genel yığın: Yığın System.Collections.Generic içindeki sınıf, derleme zamanı tür güvenliği sağlar ve yeni C# kodu için kutulama işleminden kaçınılmasını sağlar.
  • 🤖 Yapay zeka yardımı: GitHub Copilot, C# yığın işlemlerini destekler ve ML.NET, genel olmayan bir yığın yerine türlendirilmiş koleksiyonlar aracılığıyla veri okur.

C# Yığın

C#'ta Stack nedir?

Yığın, son giren ilk çıkar (LIFO) konseptini temsil eden özel bir durum koleksiyonudur. Öncelikle LIFO'yu anlamak için bir örnek verelim. Her kitabın üst üste tutulduğu bir kitap yığını hayal edin.

Kitaplar söz konusu olduğunda son giren ilk çıkar kavramı, kitap yığınından yalnızca en üstteki kitabın çıkarılabileceği anlamına gelir. Aradan kitap çıkarmak mümkün değil çünkü bu durum yığının ayarını bozar.

dolayısıyla C#yığın da aynı şekilde çalışır. Öğeler yığına üst üste gelecek şekilde eklenir. Yığına bir öğe ekleme işlemine itme işlemi denir. Bir öğeyi yığından kaldırmak için yığının en üstteki öğesini de kaldırabilirsiniz. Bu işleme pop denir.

Stack koleksiyonu için mevcut işlemlere daha ayrıntılı olarak bakalım.

Yığın beyanı

Yığın Veri türü yardımıyla bir yığın oluşturulur. Bir Yığın nesnesini oluşturmak için “yeni” anahtar sözcüğü kullanılır. Daha sonra nesne st değişkenine atanır.

Stack st = new Stack()

Yığına öğe ekleme

Push yöntemi, yığına bir öğe eklemek için kullanılır. İfadenin genel sözdizimi aşağıda verilmiştir.

Stack.push(element)

Yığından öğelerin çıkarılması

Pop yöntemi, bir öğeyi yığından kaldırmak için kullanılır. Pop işlemi yığının en üstteki öğesini döndürecektir. İfadenin genel sözdizimi aşağıda verilmiştir

 Stack.pop()

saymak

Bu özellik Yığındaki öğe sayısını almak için kullanılır. Aşağıda bu ifadenin genel sözdizimi verilmiştir.

Stack.Count

İçeren

Bu yöntem, Stack'te bir öğenin mevcut olup olmadığını görmek için kullanılır. Aşağıda bu ifadenin genel sözdizimi verilmiştir. Eğer eleman mevcutsa ifade true değerini döndürür, aksi halde false değerini döndürür.

Stack.Contains(element)

Şimdi bunun kod düzeyinde çalıştığını görelim. Aşağıda belirtilen kodların tamamı bizim adresimize yazılacaktır. Konsol uygulaması. Kod Program.cs dosyamıza yazılacaktır.

Aşağıdaki programda yukarıda bahsettiğimiz yöntemleri nasıl kullanabileceğimizi görmek için kod yazacağız.

Örnek 1: Stack.Push() Yöntemi

Bu örnekte göreceğimiz

  • Bir yığın nasıl oluşturulur?
  • Yığın öğelerinin nasıl görüntüleneceği ve Count ve Contain yöntemlerinin nasıl kullanılacağı.

C#'ta yığın

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 Açıklama:-

  1. İlk adım Stack'ı bildirmek için kullanılır. Burada, yığınımızın elemanlarını tutacak bir değişken olarak “st”yi bildiriyoruz.
  2. Daha sonra yığınımıza 3 element ekliyoruz. Her öğe Push yöntemiyle eklenir.
  3. Artık yığın elemanlarına aşağıdaki gibi indeks konumundan erişilemediğinden dizi listesiyığının elemanlarını görüntülemek için farklı bir yaklaşım kullanmamız gerekiyor. Object (obj), yığının her bir öğesini tutmak için bildirilen geçici bir değişkendir. Daha sonra yığının her bir elemanının üzerinden geçmek için foreach ifadesini kullanırız. Her yığın elemanı için değer obj değişkenine atanır. Daha sonra değeri konsola görüntülemek için Console.Writeline komutunu kullanırız.
  4. Count özelliğini kullanıyoruz (st.count) yığındaki öğe sayısını almak için. Bu özellik bir sayı döndürecektir. Daha sonra bu değeri konsola gösteriyoruz.
  5. Daha sonra yığınımızda 3 değerinin bulunup bulunmadığını görmek için Container yöntemini kullanırız. Bu, doğru veya yanlış bir değer döndürecektir. Daha sonra bu dönüş değerini konsola gösteriyoruz.

Yukarıdaki kod düzgün bir şekilde girilip program çalıştırıldığında aşağıdaki çıktı görüntülenecektir.

Çıktı:

C#'ta yığın

Çıktıdan yığının elemanlarının görüntülendiğini görebiliriz. Ayrıca yığında 3 değerinin tanımlandığını söylemek için True değeri görüntülenir.

not: Yığına en son eklenen öğenin ilk önce görüntülendiğini fark ettiniz. Bu yığının en üst öğesidir. Çıktıda yığın elemanlarının sayısı da gösterilir.

Örnek 2: Stack.Pop() Yöntemi

Şimdi “kaldır” işlevine bakalım. En üstteki öğeyi yığından kaldırmak için gereken kodu göreceğiz.

C#'ta yığın

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 Açıklama:-

  1. Burada sadece bir öğeyi yığından kaldırmak için kullanılan pop yöntemini yayınlıyoruz.

Yukarıdaki kod düzgün bir şekilde girilip program çalıştırıldığında aşağıdaki çıktı görüntülenecektir.

Çıktı:

C#'ta yığın

3. elemanın yığından kaldırıldığını görebiliriz.

C# Stack Peek() Metodu

Push ve Pop yöntemleri yığının en üstündeki öğeyle çalışır, ancak bazen yalnızca en üstteki öğeye bakmanız ve onu kaldırmamanız gerekir. Peek yöntemi tam olarak bunu yapar. Koleksiyonu değiştirmeden yığının en üstündeki değeri döndürür; bu, bir sonraki öğeyi kaldırmadan önce test etmek istediğinizde kullanışlıdır.

) 1 Adım Bir yığın oluşturun ve üzerine üç öğe ekleyin, böylece 3 değeri en üstte yer alsın.

) 2 Adım En üstteki öğeyi okumak için Peek yöntemini çağırın, ardından hiçbir şeyin kaldırılmadığını doğrulamak için Count özelliğini kontrol edin.

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 Açıklama:-

  1. st adında bir yığın tanımlanır ve 1, 2 ve 3 değerleri Push metodu ile toplanır, böylece 3 en üstteki eleman olur.
  2. Peek metodu, yığının en üstündeki öğeyi kaldırmadan döndürür ve Count özelliği yine de yığındaki öğelerin tam sayısını bildirir.

Program çalıştırıldığında, değeri yazdırır. 3 Peek'ten ve ardından sayım 3Bu, elemanın yığında kaldığını kanıtlar. Eğer yığın boşsa, Peek bir Geçersiz hatası fırlatır.OperationException hatası oluşabilir, bu nedenle çağırmadan önce Count'u kontrol etmek güvenlidir.

Genel Yığın C# dilinde

Yukarıdaki örneklerde, her öğeyi bir nesne olarak saklayan System.Collections'ın genel olmayan Stack sınıfı kullanılmıştır. Modern C# kodu genellikle genel Stack sınıfını tercih eder. System.Collections.Generic ad alanından bir sınıftır. Yığın belleğini tek bir tanımlanmış türe bağlar, böylece derleyici her Push ve Pop işlemini kontrol eder ve tür dönüştürme veya kutulama gerekmez.

Genel Stack'in temel faydaları Aşağıda listelenmiştir.

  • Tip güvenliği: Tür, tanımlama sırasında sabitlenir, bu nedenle yalnızca o türe ait değerler eklenebilir ve hatalar derleme zamanında yakalanır.
  • Boks yok: int gibi değer tipleri doğrudan saklanır, bu da genel olmayan Stack'in ödediği paketleme maliyetinden kaçınmayı sağlar.
  • Daha temiz okumalar: Pop ve Peek fonksiyonları, belirtilen türü doğrudan döndürür, bu nedenle sonucu nesneden geri dönüştürmenize gerek yoktur.
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();
  }
 }
}

Bu örnekte yığın, Stack olarak tanımlanmıştır. Bu nedenle yalnızca dize değerlerini kabul eder. Pop yöntemi doğrudan bir dize döndürür ve yazdırır. PythonEn son eklenen değer. Her yeni proje için, genel Stack kullanılır. Önerilen seçenek budur.

C#'da Stack ve Queue Arasındaki Fark

Bir yığın ve bir kuyruk Her ikisi de elemanların kaldırılma sırasını kontrol eden koleksiyonlardır, ancak zıt kurallar kullanırlar. Bir yığın (stack) son giren ilk çıkar (finite in first out) prensibiyle çalışırken, bir kuyruk (queue) ilk giren ilk çıkar (first in first out) prensibiyle çalışır. Doğru olanı seçmek, kodunuzun amacını diğer geliştiricilere açıkça gösterir.

Başlıca farklılıklar aşağıda listelenmiştir:

  • Sipariş: Bir yığın, en son eklenen öğeyi önce kaldırır (LIFO), bir kuyruk ise en eski öğeyi önce kaldırır (FIFO).
  • Yöntem: Bir yığın (stack) eklemek için Push ve Pop komutlarını kullanırken, bir kuyruk (queue) eklemek için Enqueue ve çıkarmak için Dequeue komutlarını kullanır.
  • Üst düzey erişim: Bir yığın, Peek komutuyla bir sonraki öğesini okurken, bir kuyruk da Peek komutuyla bir sonraki öğesini önden okur.
  • Tipik kullanımlar: Yığınlar, geri alma özelliklerine, ifade değerlendirmesine ve özyinelemeye uygundur. tracKuyruklar zamanlama, tamponlama ve genişlik öncelikli tarama için uygundur.

Her iki tür de genel biçimde Stack olarak mevcuttur. ve Kuyruk System.Collections.Generic içinde yer aldığından, her iki seçenekte de tür güvenliği elde edersiniz.

SSS

Boş bir yığın üzerinde Pop veya Peek çağrısı yapmak Invalid hatası fırlatır.OperationException hatası oluşuyorsa, öncelikle Count özelliğini kontrol edin veya yığında hiçbir eleman olmadığında hata fırlatmak yerine false döndüren genel Stack yöntemleri TryPop ve TryPeek'i kullanın.

Hem Push hem de Pop işlemleri, yalnızca yığının en üstüne dokundukları için sabit O(1) sürede çalışır. Dahili dizinin büyümesi gerektiğinde, ara sıra yapılan bir Push işlemi onu yeniden boyutlandırır, ancak işlem başına ortalama maliyet sabit kalır.

Hayır. Bir yığın, Peek ve Pop yöntemleriyle yalnızca en üstteki değerini gösterir, bu nedenle bir liste gibi indeks erişim yöntemi yoktur. Her değeri okumak için, yığını bir foreach döngüsüyle numaralandırın veya ToArray yöntemini kullanarak kopyalayın.

Clear metodu, yığındaki tüm öğeleri tek bir çağrıda kaldırır ve Count'u sıfırlar. Bunun yerine, üstten öğeleri tek tek kaldırmak için, Count sıfıra ulaşana kadar Pop metodunu bir döngü içinde çağırın.

Standart Stack sınıfı, birden fazla iş parçacığı aynı anda değiştirdiğinde yazma işlemleri için iş parçacığı güvenli değildir. Eş zamanlı erişim için, harici kilitler olmadan atomik TryPush ve TryPop yöntemleri sunan System.Collections.Concurrent'ten ConcurrentStack'i kullanın.

Yığın verilerini yukarıdan aşağıya doğru sıralayarak yeni bir diziye kopyalamak için ToArray yöntemini çağırın. Ayrıca, genel bir liste oluşturmak için yığını bir List yapıcıya da iletebilirsiniz.ping aynı sipariş.

Evet. GitHub Copilot, kısa bir yorum veya metot adından Stack bildirimleri, Push ve Pop çağrıları ve foreach döngüleri yazar. Genellikle yeni C# kodları için önerilen koleksiyon olduğu için genel Stack sürümünü önerir.

Yığınlar nadiren ML.NET eğitim verilerini depolar; bu veriler, türlendirilmiş koleksiyonlar ve IDataView işlem hattı üzerinden akar. Bununla birlikte, LIFO yığın kavramı, makine öğrenimi algoritmalarında geriye dönük uyumluluk için ortaya çıkar.tracKing algoritması, derinlemesine arama ve özyinelemeli metot çağrılarının yönetimi.

Bu yazıyı şu şekilde özetleyin: