Merhaba, bu yazımda OOP için önemli bir yapı olan yığın(stack)dan bahsedeceğim. Yığın, bir veri yapısıdır. “Veri yapısı nedir?” diye sorarsak şu cevabı verebiliriz: “Verilerin saklandığı ve formatlandığı yapılardır.” Algoritmalarda dizi olarak tanımlanan verilerin değişik şekillerde düzenlenmesi gerekebilir. bunun için veri yapıları tanımlanmıştır. Birkaç tane veri yapısı bulunmaktadır. Bunlar; Yığın (Stack), Kuyruk (Queue), Bağlı listeler (Linked lists) ve Ağaç (Tree)’tır. Bizim için önemli olan şu an için yığın(stack) olduğu için ben bu yapıya değineceğim.
Yığınlar, ilk giren son çıkar mantığı ile çalışan bir yapıdır. Örneğin, elinizde bir kutu var ve bu kutuya kitapları üst üste koymaya başlıyorsunuz. Tekrar kutuyu boşaltmak isteğinizde en son koyduğunuz kitaptan ilk kitaba doğru çıkartmaya başlarsınız. İşte yığının veriyi düzenleme mantğı tam olarak budur. Yığın bir veri motoru(data engine) olarak da adlandırılır. Yığın sınıfının C#’ta tanımlı yapısında iki temel işlem bulunmaktadır; ekleme(push) ve çıkarma(pop).
Bunun dışında;
empty: yığıtın boş olup olmadığını belirleyen işlem)
stacktop: yığından çıkarılmaksızın en üstteki elemanın değerini döndüren işlem) işlemleri de bulunmaktadır. Önemli bir not; yığının en üstüne eklenen bir veri çıkarılırsa bir daha kullanılamaz.

Bir örnekle konuya incelemeye devam edelim, ancak biz örneğimizde kendi yığın sınıfımızı oluşturalım:
// Bir stack sınıfı oluşturuyoruz
class Yigin
{
int[] yigin; // yığını tutar
int ind; // yığın indexi
// boş bir stack yapılandırdık
public Yigin(int boyut)
{
yigin = new int[boyut];
ind = 0;
}
// yığına veri ekleme metodu
public void Ekle(int sayi)
{
if (ind == yigin.Length)
{
Console.WriteLine("Yığın doldu");
return;
}
yigin[ind] = sayi;
ind++;
}
// yığından veri çıkarma metodu
public int Cikar()
{
if (ind == 0)
{
Console.WriteLine("Yığın boş");
return 0;
}
ind--;
return yigin[ind];
}
// yığın doluysa true döndür
public bool Dolu()
{
return ind == yigin.Length;
}
// Yığın boşsa true döndür
public bool Bos()
{
return ind == 0;
}
// Yığın kapasitesiini döndürür
public int Kapasite()
{
return yigin.Length;
}
// Yğındaki nesnelerin sayısını döndürür
public int GetNesne()
{
return ind;
}
}
class YiginDemo
{
static void Main()
{
Yigin ygn1 = new Yigin(10);
int sayi;
int i;
Console.WriteLine("Yığın 1'e 0' dan 10'a kadar veri ekliyoruz");
// !ygn1.Dolu(): Dolu metodunu çağırır ve yığın dolu değilse false döndürür
for (i = 0; !ygn1.Dolu(); i++)
ygn1.Ekle(i);
// Yığının dolduğunu haber verir
if (ygn1.Dolu()) Console.WriteLine("Yığın Doldu");
Console.WriteLine("Yığın 1'in içeriği: ");
while (!ygn1.Bos())
{
// Burada önemli bir nokta var. Burada hem Yığın 1'i boşaltıyoruz hemde Yığın 1'e bulunan elemanları listeletiyoruz
// Listeletmeden önce eleman çıkarma işlemini yapıyoruz
// Konsola indis numarasını basarak tek tek inceleyebilirsiniz
sayi = ygn1.Cikar();
Console.Write(sayi);
}
}
}
// Hazır stack sınıfını kullanalım
class Yigin
{
static void Main(string[] args)
{
Stack ygn = new Stack();
for (int i = 0; i < 10; i++)
// elemanlarımızı ekliyoruz
ygn.Push(i);
Console.WriteLine("Yığın elemanları: ");
foreach (int item in ygn)
Console.WriteLine(item);
// Son üç elelmanı siliyoruz
ygn.Pop();
ygn.Pop();
ygn.Pop();
foreach (int item in ygn)
Console.WriteLine(item);
}
}
Bu yazımızında sonuna geldik. Size yığın yapısını anlatmaya çalıştım. Veri yapıları OOP için önemli bir konu. Diğer yapıları da incelemenizi tavsiye ederim. Takibe devam 🙂

slm yarın sınavım var bı kac sorum olacak yardmcı oalblrmsn ?