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.

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ğı.
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:-
- İ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.
- Daha sonra yığınımıza 3 element ekliyoruz. Her öğe Push yöntemiyle eklenir.
- 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.
- 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.
- 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ı:
Çı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.
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:-
- 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ı:
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:-
- 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.
- 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.




