Stack Ile Parantezlerin Kontrolü
Merhabalar herkese, DSA(Veri Yapıları Ve Algoritma) konusuna bu aralar yoğunlaşmış durumdayım.Bende bu konuda çalışan arkadaşlara okuyacağı bir yazı, bir kaynak daha olsun istedim. Stackler hakkında kısa bir bilgi ile başlıyalım.
Stack Nedir ?
Stack yapısını kolay anlaşılması için şarjörlere benzetmek istiyorum. Şarjöre mermileri yerleştiririz ve sadece en son koyduğumuz mermiye direk olarak erişebiliriz. Ateş ettiğimizde ilk olarak en son koyduğumuz mermi kullanılır. Bu model bize bilgisayar bilimlerinde bazı ihtiyaçlarımızı gidermemizi sağlayan veri yapılarından biridir. LIFO; yani son giren ilk çıkar anlamına gelir.
Stacklerde Kullandığımız Metodlar :
Genel olarak en çok işimize yarıyan 3 adet metod vardır. Bunlar:
Push: Stack’e yeni bir veri eklememize yarar.
Pop: Stack’in tepesindeki yani son giren elemanı silip geri dönderir.
Peek: Stack’in tepesindeki veriyi silmeden geri dönderir.
Stackler Nerelerde Kullanılır
Öncelikle çoğumuzun aşina olduğu bir örneği vermek istiyorum. Browserlar yani tarayıcılarımız, geri tuşunun işlevini gerçekleştirmesinde kullanılan veri yapısıdır.
Undo, yani geriye al çoğumuzun (ctrl + z) kullanarak yaptığı işlemde yine bu veri yapısı kullanılıyor.
Bunlar benim şimdilik aktarmak istediklerim daha fazla kullanım alanı vardır. Ben de şimdi öyle bir örneği kodlarıyla beraber anlatmak istiyorum yani yazımızın asıl amacına … :)
Stack Kullanarak Parantezlerin Kontrolü
Parantezler yazılımla uğraşanların en çok kullandığı karakterdir herhalde. Ve bunların bir biriyle eşleşmesi lazım yoksa syntax error! Şu zamanlarda kullandığımız ideler, metin düzenleyiciler bu konuda bize çok yardımcı oluyorlar. Bizi uyarıyorlar kodu çalıştırmadan önce gelin bizde bunun kontrolünü yapan bir algoritma geliştirelim stack veri yapısını kullanarak.
Ben stack yapısını kurmak için tekli linked list elemanlarından yararlanacağım.
Bu sınıfı her bir veriyi tutmak için kullanacağız. Şimdi bu sınıfı kullanarak stack veri yapımızı oluşturalım.
Kodda görüldüğü üzere top; yani en üstteki veriyi, max_size ve size değişkenleri tutuyoruz. Ve yardımcı metodlarımızı yazıyoruz.
Stack yapımızı kurduk şimdi sıra bunu kullanmakta. Şimdi parantez tiplerini tutacak 1 map ve 1 set değişken oluşturuyoruz. Ve bunlara parantez tiplerimizi ekliyoruz.
Ve son olarak kontrolü yapan metodumuzu tanımlamadan önce size mantığı anlatmak istiyorum. İlk olarak bir karakter tipinde veri girilen stack tipinde bir değişken oluşturuyoruz. Girdi olarak string alıyoruz ve aldığımız stringteki tüm karakterleri for loop ile geziyoruz. Ve parantez aç karakterlerimizi stackimize ekliyoruz. Parantez kapa karakterlerimizden birine rastlayınca stacke eklediğimiz son değişkeni almak için pop ediyoruz ve o karakterin bizim parantez kapa karakterinin eşi olup olmadığını kontrol ediyoruz. Algoritma genel olarak böyle şimdi koda geçelim.
Evet umarım metodu anlatabilmişimdir. Çokta karmaşık bir fonksiyon değil aslında. Artık bu metodu kullanarak parantez kontrolü yapabilirsiniz :)
Stack konusunun ezbere bilip geçmek yerine kullanmak ve mantığı daha iyi anlayabilmek için yaptık bu uygulamayı umarım sizin için de faydalı olmuştur.
Bana aşağıdaki sosyal medya hesaplarım üzerinden ulaşabilirsiniz, sorusu olan varsa yardımcı olurum elimden geldiğince. İyi Kodlamalar :)
Twitter: twitter.com/eripserkan
Github: github.com/serkanerip
Email: serkanerip@gmail.com