Serdar YILMAZ / Software Developer
Bizimkisi Bir “Bug” Hikayesi...
Kocaeli/Körfez
Serdar Yılmaz C# – Stack Sınıfı

C# – Stack Sınıfı

dotnetC# – Koleksiyonlar” başlıklı yazımızda koleksiyonların avantajlarından, dezavantajlarından bahsedip, genel bir bilgi vermiştik. Bu yazımızda ise bir koleksiyon sınıfı olan Stack‘den bahsedeceğiz.

Stack Sınıfının Temel Yapısı

stack,yığınStack, ilk giren son çıkar işleyişine sahip bir koleksiyondur. Diğer bir deyişle; ilk eklenen elemanın koleksiyondan en son çıkarıldığı ve en son eklenen elemanında ilk çıkarıldığı bir veri yapısıdır (LIFO).

Stack tıpkı diğer koleksiyon sınıfları gibi dinamik bir yapıya sahiptir. Yani eleman eklendikçe boyutu dinamik olarak artmaktadır.

Stack sınıfının Pop() ve Push() olmak üzere 2 temel metodu bulunmaktadır.

  1. Pop(): Stack’in en üstündeki nesneyi çıkarır.
  2. Push(): Stack’in en üstüne bir nesne ekler.

Metotlara daha sonra detaylı bir şekilde değineceğiz. Bu kısımda dikkatinizi çekmek istediğim husus; Ekleme ve çıkarma işleminin yalnızca stack’in tepe noktasından yapılmasıdır.

Stack’in Kullanım Yerleri

Tarayıcılarda bulunan Geri butonu, en son ziyaret edilen sayfaya dönme işlemini stack veri yapısını kullanarak gerçekleştirmektedir. Ziyaret edilen siteler Stack’e atılıp, her Geri butonuna tıklanıldığında Stack’in tepesinde bulunan site, Stack’ten çıkarılıp (POP), tarayıcının adres çubuğuna gönderilerek, bir önceki web sitenin görüntülenmesi sağlanır.

Aynı şekilde word, notepad++ gibi editörlerde bulunan Geri Al butonu, en son yaptığımız işlemin geri alınmasını yine Stack veri yapısını kullanarak gerçekleştirmektedir.

Program yazarken, bir fonksiyonun içerisinde, başka bir fonksiyonu çağırdığımızda; En son çağrılan fonksiyon tamamlandıktan sonra kendisinin çağrıldığı fonksiyonda; çağrıldığı satıra dönebilmesi için o yerin adresini Stack’te tutmaktadır.

Verilen örnekler haricinde daha bir çok kullanım alanı sıralanabilir.

Metotlar ve Özellikler

  1. Nesne Oluşturma
    Stack sınıfından bir nesne oluşturuyoruz. Bu nesne, koleksiyondaki nesnelerin referanslarını tutacaktır.
  2. Push(Eklenecek_Oge) ve Pop() Metotları
    Push() Metodu; Parametre olarak girilen öğeyi Stack’in tepe noktasına eklemektedir. Pop() Metodu; Stack’in tepe noktasındaki öğeyi döndürür ve sonra öğe Stack’ten çıkarılır/silinir. Stack boşken Pop() metodu çağrılırsa InvalidOperationException fırlatır.
  3. Peek() Metodu
    Stack’in tepe noktasındaki öğeyi döndürmektedir, Pop() metodunda farklı olarak öğeyi Stack’ten çıkarmaz/silmez. Stack boşken Peek() metodu çağrılırsa InvalidOperationException fırlatır.
  4. Contains(Aranan_Öğe) Metodu
    Stack içerisinde parametre olarak girilen öğeyi arar. Öğe bulunursa TRUE, bulanamazsa FALSE döndürür.
  5. ToArray() Metodu
    Stack’te yer alan elemanların kopyasını içeren bir dizi döndürür.
  6. Clear() Metodu ve Count Özelliği
    Clear() Metodu; Stack’i temizlemektedir. Count Özelliği; Stack içerisinde yer alan elemanların sayısını döndürmektedir.

Uygulama

  1. Öğeleri Listeleme
    Stack’te bulunan öğeler foreach döngüsüyle görüntülenebilir.
  2. Parantez Kontrolü
    Bir Aritmetik ifadede açılan her bir parantez kapatılmalıdır. Yani Sol parantez adedince, sağ parantez olmalıdır. Aşağıdaki uygulamamız Stack kullanarak parantez kontrolü yapmaktadır.
    ALGORİTMA 
    • Okunan her bir sol parantez Stack’e eklenir.
    • Okunan her bir sağ parantez için de Stack’den bir sol parantez çıkarılır.
    • Stack boşken bir sağ parantez okunması yani Stack’ten eleman çıkarılmaya çalışılması; aritmetik ifadede açılmamış bir parantezin kapatılmaya çalışıldığı yani fazladan bir sağ parantez bulunduğu anlamına gelir. Bu durumda aritmetik ifade hatalıdır.
    • Tüm aritmetik ifade tarandıktan sonra Stack’te eleman kalmamışsa, açılan her bir parantez kapatılmıştır. Bu durumda aritmetik ifadede herhangi bir parantez hatası bulunmamaktadır. Aksi durumda Stack’te açılan bir parantez kapatılmamış olacağı için Aritmetik ifade hatalı olacaktır.

Serdar Yılmaz


Bu İçeriği Arkadaşlarınızla Paylaşmak İster misiniz?

2 Yorum

Bir Yorum Yapın