Stack ile Queue Nedir?

Stack ile Queue,verileri barındıran yapılarıdır. C# dilinde System.Collections sınıfına aittir.
Bu yapılarda sadece en baştaki veya en sondaki veriye ulaşabiliriz. Boyut belirtme zorunluluğu yoktur. Eklediğimiz veriye göre otomatik olarak boyutu değiştirir.

Stack, LIFO - Last In First Out mantığı ile çalışır, yani son eklenen veri ilk önce çıkar.

Stack'lere yığın anlamına gelir. Örnek olarak üst üste koyduğumuz kitaplar arasından bir kitaba ulaşmak için en üstteki kitaptan başlamamız gerekir.Yani en son kitap ilk önce alınmış olacaktır.

Web tarayıcımızda geçmiş alanına eklenen her site, stack mantığı ile eklenir, yani en son girdiğimiz site en üstte yer almaktadır. Geri butonuna tıkladığımız zaman bir önceki siteye girecektir yani en üstteki site gösterilmiş olacaktır.

Stack'lerde en sık kullanılan iki metot vardır. Push() metodu ile Stack yapısının en üstüne veri eklerken, Pop() metodu ile en üstten veri siler.

C# koduna bakacak olursak int türünden Generic Stack oluşturduktan sonra 3 adet eleman ekledik ve foreach ile bütün verileri yazdırdık.

Stack<int> stackEx1=new Stack<int>();
stackEx1.Push(1);
stackEx1.Push(2);
stackEx1.Push(3);
foreach (var item in stackEx1)
{
      Console.WriteLine(item);
}
//Stack verileri
//3
//2
//1

Stack yapısında kullanılabilecek önemli bir metot ise Peek() metodudur.Bu metot stack yapısındaki en üstteki elemanı gösterecektir.

Console.WriteLine("En üstteki değer {0}",stackEx1.Peek());   //3

Console.WriteLine("Stack Eleman Sayısı:{0}",stackEx1.Count); //3

Console.WriteLine("Stack Silinen Değer:{0}",stackEx1.Pop()); //3

Console.WriteLine("En üstteki değer {0}",stackEx1.Peek());   //2

Console.WriteLine("Stack Silinen Değer:{0}",stackEx1.Pop()); //2

stackEx1.Clear();    //Stack yapısındaki bütün elemanlar temizlendi         

Console.WriteLine("Silindikten sonra Stack Eleman Sayısı:{0}",stackEx1.Count); //0

Console.WriteLine("Stack Silinen Değer:{0}",stackEx1.Pop());

Clear() metodu ve Count özelliği diğer bütün collection yapılarında bulunur ve Stack ile Queue yapılarında da aynı işlevi görür.

Boş olan bir stack'ten bir veri silmek istersek hata alacağız çünkü boş bir stack yapısı silinemez. (System.InvalidOperationException: Stack empty)



Queue, FIFO - First In First Out mantığı ile çalışır yani ilk giren veri ilk önce çıkar.

Queue kuyruk anlamına gelir, örnek verecek olursak; bir konser kuyruğuna ilk giren bir kişi ilk önce bilet satın alacaktır.

Queue'lerde en sık kullanılan iki metot vardır. Enqueue() metodu ile Queue yapısına ilk veriyi eklerken, Dequeue() metodu ile queue yapısına ilk girmiş olan veriyi siler.

C# koduna bakacak olursak int türünden Generic Queue oluşturduktan sonra 3 adet eleman ekledik ve foreach ile bütün verileri yazdırdık.

Queue <int> queueEx1=new Queue<int>();
queueEx1.Enqueue(1);
queueEx1.Enqueue(2);
queueEx1.Enqueue(3);

foreach (var item in queueEx1)
{
   Console.WriteLine(item);
}
//Queue verileri
//1
//2
//3

Stack yapısında kullandığımız bir metot olan Peek() metodunu Queue yapısında da kullanabiliriz.Bu metot queue yapısındaki en üstteki elemanı gösterecektir.

Console.WriteLine("En üstteki değer:{0}",queueEx1.Peek());   //1

Console.WriteLine("Queue eleman sayısı:{0}",queueEx1.Count); //3

Console.WriteLine("Queue silinen değer:{0}",queueEx1.Dequeue()); //1

Console.WriteLine("En üstteki değer:{0}",queueEx1.Peek()); //2
            
Console.WriteLine("Queue eleman sayısı:{0}",queueEx1.Count); //2


Stack ile Queue arasındaki farkı anlatan bir görsel

Generic yapıda örnekler hazırladığım Stack and Queue yapılarının Non-Generic karşılıkları ise aşağıdaki gibidir.

Stack:   Stack stack1=new Stack();
Queue: Queue queue1=new Queue();



Yorumlar