Veri Yapıları: Stack Yapısı
Stack yapısı elemanları üst üste dizilmiş olan bir dizi yapısıdır. Klasik bildiğimiz diziden farkı direkt olarak şu index’teki elemanı getir diyerek istediğimiz elemana ulaşamamamızdır. Elemanlarla işlem yapmak için Stack yapısında bulunan metodları kullanırız. Bu metodlar Pop(), Push() metodlarıdır. Pop() metodunu çağırdığımızda en üsteki elemanı çıkarır ve bize elemanı döndürür. Push() metodu içine eklenecek elemanı parametre olarak alır ve dizinin en üstüne koyar.
Stack class’ı nasıl yazılır?
Stack yapısının field olarak bir adet dizi ve bir adet üstü tutacak integer değişkeni vardır.
T[] values; // dizi
int top; // üst
Stack class’ının içine constracter yazılır. Constracter parametre olarak dizinin boyutunu alır ve dizinin boyutu belirlenmiş olur. Top değerine de -1 değeri atanır.
public Stack(int size)
{
values = new T[size];
top = -1;
}
Yazılacak diğer metodlar
public bool IsEmpty()
{
return top == -1;
}
Stack’in top değeri -1 ise boştur.
public bool IsFull()
{
return top == values.Length - 1;
}
Stack’in top değeri dizinin boyutundan 1 eksik ise dolu demektir.
public void Push(T val)
{
if (!IsFull())
{
values[++top] = val;
}
else
Console.WriteLine("stack is full");
}
Push() metodu içine parametre olarak eklenecek değeri alır ve en üste ekler. Eğer stack dolu ise değeri ekleyemez, uyarı mesajını yazdırır.
public T Pop()
{
if (!IsEmpty())
{
T temp = values[top--];
return temp;
}
else
{
Console.WriteLine("stack is empty");
return default(T);
}
}
Pop() metodu en üstteki değeri çıkartır ve bize bu değeri döndürür. Eleman yok ise uyarı mesajı yazdırır.
public void Display()
{
if(!IsEmpty())
{
for (int i = top; i >=0; i--)
{
Console.WriteLine(values[i]);
}
}else
Console.WriteLine("stack is empty");
Console.WriteLine();
}
Stack’teki değerleri görüntülemek için Display() metodunu kullanabiliriz. En son eklediğimiz en üstte olduğu için görüntüleme en son eklenenden ilk eklenene doğru olur.
Ödev olarak verilen, stack yapısını kullanarak html taglarının açılıp kapanmasının kontrolünü yaptıran kodu açıkladığım yazımı okumak için: http://bit.ly/20AxCCS