Stack/Queue [Ar-GE Kulübü

AngelRayt

Uzman üye
13 Eki 2015
1,352
15
Python
Veri yapıları dersine devam ediyoruz.

Basitçe tanımlarsak elimizdeki verilerimizi koyabileceğimiz,ekleme çıkarma yapabileceğimiz yapılardır stackler.

Bir çukur düşünün, evimizdeki eski eşyaları oraya atıyoruz. İlk attığımız eşyanın eski bir radyo, son attığımız eşyanın ise masa olduğunu düşünün. Radyo yu geri çıkarmamız için önce masayı çıkartmamız gerekir. Veya şuanda bu yazıyı okuyorsunuz, ilginizi çekmedi ve geri butonuna bastınız. Bu geri butonuna tekrar basarsanız ondan önceki sayfalara gitmeye başlar. İşte tarayıcı bu adresleri stacklerde tutabilir.

Stackler ekleme çıkarma işlemleri her zaman aynı yerden yapılan yapılardır.
EmlEJz.jpg


Kod:
Ekleme ve çıkarma işlemleri stack in top kısmından yapılır.
(Çukur örneği)
Kod:
Stacklerde ilk giren son çıkar mantığı ile çalışır.


Kod:
3 Temel fonksiyonu vardır;

Push:Eleman ekleme
Pop:Eleman çıkarma
Top:En tepedeki eleman


Kod:
class Stack:
    def __init__(self):
        self.items = []
        
    def isEmpty(self):
        
        return self.items ==[] #False or True?
    def push(self,item):
        self.items.append(item)
        
    def pop(self):
        return self.items.pop()
    
    def top(self):
        return self.items[len(self.items)-1] # f(0) = first index
    def size(self):
        return(len(self.items))


Kod:
Depo = Stack()

Depo.isEmpty()
Out[19]: True

Depo.push("First Index")

Depo.push("Second Index")

Depo.top()
Out[22]: 'Second Index'

Depo.size()
Out[23]: 2

Depo.pop()
Out[24]: 'Second Index'

Depo.top()
Out[25]: 'First Index'




Queues

Bunuda çukur yerine boru gibi düşünebiliriz. Borudan ilk giren ilk çıkar.

Kod:
"rear" kısmından veri ekleriz ve "front" kısmından veri çıkartırız.
İlk giren ilk çıkar. (FIFO , first in first out yada first come first served)

Kod:
class Queue:
    
    def __init__(self):
        """
        initialize (constructor)
        """
        self.items = []
        
    def isEmpty(self):
        """
        bos olup olmadigini kontrol et
        """
        return self.items == [] # bool operation
    
    def enqueue(self,item):
        """
        queue item ekler
        """
        self.items.insert(0,item)
        
    def dequeue(self):
        """
        queue dan item cikartir
        """
        return self.items.pop()
    
    def size(self):
        """
        length of items(queue)
        """
        return len(self.items)


Kod:
depo2 = Queue()

depo2.isEmpty()
Out[42]: True

depo2.enqueue("Firt Index")

depo2.size()
Out[44]: 1

depo2.enqueue("Second Index")

depo2.size()
Out[46]: 2

depo2.dequeue()
Out[47]: 'Firt Index'

depo2.size()
Out[48]: 1
 
Son düzenleme:

M3m0ry

Kıdemli Üye
3 Haz 2017
4,410
126
3
xD
Maalesef anldıgım bir konu değil. Hocam biraz renk menk ekleseydiniz aslında daha iyi olurdu. Ama tabii ki emek var. Ellerinize sağlık :)
 

AngelRayt

Uzman üye
13 Eki 2015
1,352
15
Python
ArViX

Evet, c-like ile anlatmam daha doğru olacak. Bir daha ki konular C like ile gelecek.

Oradaki program kodlarını sadece mantık biraz daha iyi anlaşılsın diye ekledim.
 

Zeref

Uzman üye
13 Nis 2014
1,960
3
fy
Veri yapıları dersine devam ediyoruz.

Basitçe tanımlarsak elimizdeki verilerimizi koyabileceğimiz,ekleme çıkarma yapabileceğimiz yapılardır stackler.

Bir çukur düşünün, evimizdeki eski eşyaları oraya atıyoruz. İlk attığımız eşyanın eski bir radyo, son attığımız eşyanın ise masa olduğunu düşünün. Radyo yu geri çıkarmamız için önce masayı çıkartmamız gerekir. Veya şuanda bu yazıyı okuyorsunuz, ilginizi çekmedi ve geri butonuna bastınız. Bu geri butonuna tekrar basarsanız ondan önceki sayfalara gitmeye başlar. İşte tarayıcı bu adresleri stacklerde tutabilir.

Stackler ekleme çıkarma işlemleri her zaman aynı yerden yapılan yapılardır.
EmlEJz.jpg


Kod:
Ekleme ve çıkarma işlemleri stack in top kısmından yapılır.
(Çukur örneği)
Kod:
Stacklerde ilk giren son çıkar mantığı ile çalışır.


Kod:
3 Temel fonksiyonu vardır;

Push:Eleman ekleme
Pop:Eleman çıkarma
Top:En tepedeki eleman


Kod:
class Stack:
    def __init__(self):
        self.items = []
        
    def isEmpty(self):
        
        return self.items ==[] #False or True?
    def push(self,item):
        self.items.append(item)
        
    def pop(self):
        return self.items.pop()
    
    def top(self):
        return self.items[len(self.items)-1] # f(0) = first index
    def size(self):
        return(len(self.items))


Kod:
Depo = Stack()

Depo.isEmpty()
Out[19]: True

Depo.push("First Index")

Depo.push("Second Index")

Depo.top()
Out[22]: 'Second Index'

Depo.size()
Out[23]: 2

Depo.pop()
Out[24]: 'Second Index'

Depo.top()
Out[25]: 'First Index'




Queues

Bunuda çukur yerine boru gibi düşünebiliriz. Borudan ilk giren ilk çıkar.

Kod:
"rear" kısmından veri ekleriz ve "front" kısmından veri çıkartırız.
İlk giren ilk çıkar. (FIFO , first in first out yada first come first served)

Kod:
class Queue:
    
    def __init__(self):
        """
        initialize (constructor)
        """
        self.items = []
        
    def isEmpty(self):
        """
        bos olup olmadigini kontrol et
        """
        return self.items == [] # bool operation
    
    def enqueue(self,item):
        """
        queue item ekler
        """
        self.items.insert(0,item)
        
    def dequeue(self):
        """
        queue dan item cikartir
        """
        return self.items.pop()
    
    def size(self):
        """
        length of items(queue)
        """
        return len(self.items)


Kod:
depo2 = Queue()

depo2.isEmpty()
Out[42]: True

depo2.enqueue("Firt Index")

depo2.size()
Out[44]: 1

depo2.enqueue("Second Index")

depo2.size()
Out[46]: 2

depo2.dequeue()
Out[47]: 'Firt Index'

depo2.size()
Out[48]: 1
Ellerine saglik bir kac ornek proje vsde ekleybilirsin oldukca faydali olmus.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.