Stack Nedir? ; Stack, her defasında son kaydedilen dataya erişmemizi sağlayan bir veri yapısıdır. Bu çalışma prensibine, “LIFO ( Last in First out )” denir.Bir oyun olan Legodan bakalım Stackimize. Her parçayı üst üste koyuyoruz ve bu parçaların hepsi Stack’e kaydediliyor.
Mesela inşa ettiğimiz bir legonun üstüne başka bir parça koyup bunu büyültebiliriz, bu operasyonun adına “Push” denir. Veyahut bir taş eksilterek bunu küçültebiliriz bu operasyonun adı ise, “Pop”’dur.
Ama unutmamamız gerekir, sadece en üstteki taş ile çalışabiliriz, diğer taşlara erişimimiz yok.
Stack’in Uygulama Alanları
Şimdi düşünelim, şu an bulunduğunuz browserin geri tuşu nasıl çalışıyor? TEKNOLTAN’a girdik ama ilk girdiğimiz siteye geri dönmek istiyoruz yani şöyle,
Google, TEKNOLTAN, Konu
Şimdi geri Google’a dönmek istiyoruz, ne yapacağız? İki kere geri tuşuna basacağız, ve sonra Google’dayız ama browser bizim hangi sitede olduğumuzu nerden biliyor?
Evet, doğru bildiniz Stack’deki veriler ile, bellek yığınını unutmamak lazım. Her siteden çıktığımızda “Pop” işlemi ile son veri çıkartılıyor.
Şimdi Google’a girdik Stack durumunuz;
1. Sayfa
TEKNOLTAN’a girdik Stack durumumuz;
2. Sayfa
1. Sayfa
Konuya girdik Stack durumumuz;
3. Sayfa
2. Sayfa
1. Sayfa
Gördüğünüz üzere, “Push” işlemi ile tabana değere ekliyoruz.
TEKNOLTAN’a dönmek istediğimiz de “Pop” işleminin uygulanışını görelim, konudayken Geri tuşuna bastık TEKNOLTAN’dayız, Stack durumumuz;
2. Sayfa
1. Sayfa
Python’da Örneği
Gist: https://gist.github.com/laszlokuehl/ce69f6abc3e4e2f1e94f2adf2196bee0
class Stack:
def init (self, maxSize):
self.maxSize = int(maxSize) self. data = []
def str (self):
return str(self. data)
def repr (self):
return self. str ()
def error(self, msg):
raise Exception(msg)
def isEmpty(self):
return len(self. data) == 0
def isFull(self):
return len(self. data) == self.maxSize
def push(self, item):
return self. data.append(item) if self.isFull() != True else self. error('Stack is full')
def pop(self):
return self. data.pop(-l) if self.isEmpty() != True else self. error('Stack is empty')
def peek(self):
return self. data[-l] if self.isEmpty() != True else self. error('Stack is empty')
def search(self, item):
return self. data.index(item) if self.isEmpty() != True else self. error('Stack is empty')
Şöyle bir örnekte bırakalım,
>>> _geri = Stack(20)
>>> _ileri = Stack(20)
>>>
>>> def geri():
... _ileri.push(_geri.pop())
...
>>>
>>> def ileri():
... _geri.push(_ileri.pop())
...
>>>
>>> _geri.push(’google.com’)
>>> _geri.push(’github.com’)
>>> _geri.push(’github.com/laszlokuehl’)
>>>
>>> geri()
>>>
>>> _ileri
[’github.com/laszlokuehl’]
>>>
>>> geri()
>>> geri()
>>>
>>> _ileri
[’github.com/laszlokuehl’, ’github.com’, ’google.com’]
>>>
>>> ileri()
>>> ileri()
>>> ileri()
>>>
>>> _geri
[’google.com’, ’github.com’, ’github.com/laszlokuehl’]
>>>
>>> _ileri
[]
>>>