"Enter"a basıp içeriğe geçin

Stack

Merhabalar, Stack bir Abstract Data Type(ADT) yani Soyut Veri Tipindedir. Stack’lerde Son giren ilk çıkar(Last in First Out) veya ilk giren son çıkar(First in Last Out) şeklinde tanımlanır. Stackleri arraylerle veya linked list’lerle beraber kullanabiliriz. Ben bu örneğimde arrayler ile birlikte kullanacağım. Stack’in sahip olduğu 3 adet fonksiyonu ve geri döndüren özelliği vardır diyebiliriz. Bunlar;

  • Push : Stack’e eleman eklememizi sağlar.
  • Pop : Stack’den eleman silmemizi sağlar.
  • Top : Stack’in en üstteki elemanı geri döndürür.

Tanımlamalarımızı yaptıktan sonra kodlamaya başlayabiliriz. İlk olarak bir tane yapı tanımlıyorum ve bu yapı içerisinde boyut, en üstteki eleman ve dizi’yi tutacak şekilde stack yapımı tanımlıyorum.

Stack oluşturmak için stack döndürecek bir tane fonksiyon yazıyorum ve bu fonksiyonda stack içerisindeki array’in boyutunu’da alıyorum. #include<stdlib.h> kütüphanesindeki malloc fonksiyonunu kullanarak hafızada stack kadar yer açıyorum ve aynı işlemi array içinde yapıyorum ama array’in hafızdaki yerini aldığımız boyut ile oluşturuyorum.

Stack’e veri eklemek için Push fonksiyonu yazıyoruz, bu push fonksiyonunun void olarak tanımlıyorum çünkü herhangi bir şey döndürmeyecek. Fonksiyonu oluşturduktan sonra bazı kontroller yapmamız lazım. Mesela eğer array full dolmuş ise array’in boyutunu tekrar arttırmamız lazım. Bunun için geçici bir array2 adında bir array oluşturuyorum ve değerlerimi ona atıyorum. Daha sonra ilk array’imi free fonksiyonunu kullanarak hafızadan siliyorum ve daha sonra bu array’i array2’ye eşitliyorum.

Stack’den veri silmek için ise Pop fonksiyonu yazıyoruz, Pop fonksiyonun’da integer değer döndürüyoruz. Pop fonksiyonu içerisinde yaptığımız kontrol, eğer array’in en üsttünde bulunan eleman array’in boyutunundan 4 kat küçük ise array’in boyutunu küçültüyoruz ve değerlerini geçiçi bir array oluşturup ona atıyoruz. Daha sonra array’i  geri döndürüyoruz.

Ben Stack’deki en üstteki elemanın kaçıncı sırada olduğunu görmek için topValue adında bir fonksiyon oluşturuyorum ve bu fonksiyon ile en üstteki verinin sırasını gönderiyorum.

Bütün bu işlemleri yaptıktan sonra bunları bastırmak için bir fonksiyon oluşturuyorum. Bu fonksiyon içerisinde Stack’in boyutunu, en üstteki verinin yerini ve Stack’deki elemanları bastırıyorum.

Artık her şeyimiz hazır sadece main fonksiyon içerisinde stack oluşturmalıyız.

Soru ve görüşlerinizi e-mail veya yorum olarak belirtirseniz sevinirim.

 

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir