C#

C# Yığın (Stack)

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.

Stack

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 🙂

1 Yorum

Yorum Yap