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 ?