Python Sıra: FIFO, LIFO Örneği

Nedir? Python Sıra?

Kuyruk, verileri tutan bir kaptır. İlk girilen veriler ilk önce kaldırılacaktır ve bu nedenle kuyruğa "İlk Giren İlk Çıkar" (FIFO) da denir. Sıranın ön ve arka olmak üzere iki ucu vardır. Eşyalar arkadan girilir ve ön taraftan çıkarılır.

Nasıl Python Sıra Çalışması mı?

Kuyruk, bilet gişesinde kuyrukta bekleyen insanlardan oluşan gerçek dünya örneğiyle kolayca karşılaştırılabilir; ilk önce ayakta duran kişi bileti ilk alır, ardından bir sonraki kişi gelir ve bu böyle devam eder. Aynı mantık kuyruk veri yapısı için de geçerlidir.

İşte kuyruğun şematik bir temsili:

Python Kuyruk Çalışması

MKS Arka öğelerin kuyruğa eklendiği noktayı temsil eder. Bu örnekte 7 bunun değeridir.

MKS Ön kuyruktaki öğelerin kaldırılacağı noktayı temsil eder. Kuyruktan bir öğeyi çıkarırsanız, elde edeceğiniz ilk öğe şekilde gösterildiği gibi 1 olacaktır.

Madde 1 kuyruğa ilk eklenen öğeydi ve çıkarıldığında ilk çıkan öğe oldu. Bu nedenle sıraya İLK GİREN İLK ÇIKAR (FIFO) adı verilir.

Python Kuyruk Çalışması

Bir kuyrukta öğeler sırayla kaldırılır ve aradan kaldırılamaz. 5. öğeyi sıradan rastgele kaldıramazsınız, bunu yapmak için 5. öğeden önce tüm öğeleri kaldırmanız gerekir. Sıradaki öğeler, eklendikleri sıraya göre kaldırılacaktır.

Kuyruk Türleri Python

Temel olarak iki tür kuyruk vardır Python:

  • İlk Giren İlk Çıkar Sırası: Bunun için ilk giren eleman ilk çıkan olacaktır. FIFO ile çalışmak için aramanız gerekmektedir. Sıra() kuyruk modülünden sınıf.
  • Son Giren İlk Çıkar Sırası: Burada en son girilen eleman ilk çıkan eleman olacaktır. LIFO ile çalışmak için aramanız gerekmektedir. LifoQueue() kuyruk modülünden sınıf.

Python kuyruk Kurulumu

Python'da kuyrukla çalışmak çok kolaydır. Kodunuzda kuyruğu kullanmak için izlemeniz gereken adımlar şunlardır.

) 1 Adım Aşağıda gösterildiği gibi kuyruk modülünü içe aktarmanız yeterlidir:

import queue

Modül varsayılan olarak python ile mevcuttur ve kuyrukla çalışmaya başlamak için herhangi bir ek kuruluma ihtiyacınız yoktur. FIFO (ilk giren ilk çıkar) ve LIFO (son giren ilk çıkar) olmak üzere 2 tür kuyruk vardır.

) 2 Adım FIFO kuyruğu ile çalışmak için aşağıda gösterildiği gibi içe aktarılan kuyruk modülünü kullanarak Queue sınıfını çağırın:

import queue
q1 = queue.Queue()

) 3 Adım LIFO kuyruğuyla çalışmak için aşağıda gösterildiği gibi LifoQueue() sınıfını çağırın:

import queue
q1 = queue.LifoQueue()

Queue ve LifoQueue sınıfında mevcut olan yöntemler

Queue ve LifoQueue sınıflarının içinde bulunan önemli metotlar şunlardır:

  • koy(öğe): Bu, öğeyi sıraya koyacaktır.
  • elde etmek(): Bu size kuyruktan bir öğe döndürecektir.
  • boş(): Kuyruk boşsa true değerini, öğe mevcutsa false değerini döndürür.
  • qsize(): kuyruğun boyutunu döndürür.
  • tam dolu(): kuyruk doluysa true, aksi halde false döner.

İlk Giren İlk Çıkar Sırası Örneği

İlk giren ilk çıkar durumunda, ilk giren eleman ilk çıkan olacaktır.

Kuyruğa ekleme ve öğe ekleme

Kuyruğa öğe eklemek için bir örnek üzerinde çalışalım. Kuyrukla çalışmaya başlamak için öncelikle aşağıdaki örnekte gösterildiği gibi modül kuyruğunu içe aktarın.

Bir item eklemek için örnekte gösterildiği gibi put() yöntemini kullanabilirsiniz:

import queue
q1 = queue.Queue()
q1.put(10) #this will additem 10 to the queue.

Varsayılan olarak kuyruğun boyutu sonsuzdur ve ona istediğiniz sayıda öğe ekleyebilirsiniz. Kuyruğun boyutunu tanımlamak istemeniz durumunda aynı işlem aşağıdaki gibi yapılabilir.

import queue
q1 = queue.Queue(5) #The max size is 5.
q1.put(1)
q1.put(2)
q1.put(3)
q1.put(4)
q1.put(5)
print(q1.full()) # will return true.

Çıktı:

True

Artık kuyruğun boyutu 5'tir ve 5'ten fazla öğe gerektirmeyecektir ve q1.full() yöntemi true değerini döndürecektir. Daha fazla öğe eklemek kodun daha fazla çalıştırılmasına neden olmaz.

Bir öğeyi kuyruktan kaldırma

Bir öğeyi kuyruktan kaldırmak için get() adı verilen yöntemi kullanabilirsiniz. Bu yöntem çağrıldığında kuyruktaki öğelere izin verir.

Aşağıdaki örnek, bir öğenin kuyruktan nasıl kaldırılacağını gösterir.

import queue
q1 = queue.Queue()
q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

Çıktı:

The item removed from the queue is  10

Son Giren İlk Çıkar kuyruğu Örneği

İlk çıkar kuyruğunda sonuncu olması durumunda, en son girilen öğe ilk çıkan öğe olacaktır.

LIFO ile çalışmak, yani ilk çıkan kuyruğun sonuncusu olmak için, kuyruk modülünü içe aktarmamız ve LifoQueue() yöntemini kullanmamız gerekir.

Kuyruğa ekleme ve öğe ekleme

Burada LIFO kuyruğuna nasıl öğe ekleneceğini anlayacağız.

import queue
q1 = queue.LifoQueue()
q1.put(10)

Yukarıdaki örnekte gösterildiği gibi LifoQueue üzerinde put() yöntemini kullanmanız gerekir.

Bir öğeyi kuyruktan kaldırma

LIFOqueue'dan bir öğeyi kaldırmak için get() yöntemini kullanabilirsiniz.

import queue
q1 = queue.LifoQueue()
q1.put(10)

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

Çıktı:

The item removed from the LIFO queue is  10

Bir Kuyruğa 1'den fazla öğe ekleme

Yukarıdaki örneklerde FIFO ve LIFOqueue için tek bir öğenin nasıl ekleneceğini ve öğenin nasıl kaldırılacağını gördük. Şimdi birden fazla öğenin nasıl ekleneceğini ve nasıl kaldırılacağını göreceğiz.

FIFO kuyruğuna ekleme ve öğe ekleme

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

FIFO kuyruğundan bir öğeyi kaldırma

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

Çıktı:

The value is  0
The value is  1
The value is  2
The value is  3
The value is  4
The value is  5
The value is  6
The value is  7
The value is  8
The value is  9
The value is  10
The value is  11
The value is  12
The value is  13
The value is  14
The value is  15
The value is  16
The value is  17
The value is  18
The value is  19

LIFO kuyruğuna ekleme ve öğe ekleme

import queue
q1 = queue.LifoQueue()
for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

LIFOqueue'dan bir öğeyi kaldırma

import queue
q1 = queue.LifoQueue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue


while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

Çıktı:

The value is  19
The value is  18
The value is  17
The value is  16
The value is  15
The value is  14
The value is  13
The value is  12
The value is  11
The value is  10
The value is  9
The value is  8
The value is  7
The value is  6
The value is  5
The value is  4
The value is  3
The value is  2
The value is  1
The value is  0 

Sıralama Sırası

Aşağıdaki örnek kuyruk sıralamasını göstermektedir. Sıralama için kullanılan algoritma kabarcık sıralamasıdır.

import queue
q1 = queue.Queue()
#Addingitems to the queue
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

#using bubble sort on the queue
n =  q1.qsize()
for i in range(n):
    x = q1.get() # the element is removed
    for j in range(n-1):
        y = q1.get() # the element is removed
        if x > y :  
            q1.put(y)   #the smaller one is put at the start of the queue
        else:
            q1.put(x)  # the smaller one is put at the start of the queue
            x = y     # the greater one is replaced with x and compared again with nextelement
    q1.put(x)

while (q1.empty() == False): 
print(q1.queue[0], end = " ")  
        q1.get()

Çıktı:

3 4 5 10 11 21

Revbaşlangıç ​​kuyruğu

Kuyruğu tersine çevirmek için başka bir kuyruk ve özyinelemeden yararlanabilirsiniz.

Aşağıdaki örnek kuyruğun nasıl tersine çevrileceğini göstermektedir.

Örnek:

import queue
q1 = queue.Queue()

q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

def reverseQueue (q1src, q2dest) :  
    buffer = q1src.get()
    if (q1src.empty() == False) :
reverseQueue(q1src, q2dest)      #using recursion
    q2dest.put(buffer)
return q2dest

q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False): 
print(qReversed.queue[0], end = " ")  
        qReversed.get()

Çıktı:

10 3 21 4 5 11

ÖZET

  • Kuyruk, verileri tutan bir kaptır. İki tür Kuyruk vardır: FIFO ve LIFO.
  • FIFO (İlk Giren İlk Çıkar Sırası) için, ilk giren eleman ilk çıkan olacaktır.
  • LIFO (Son Giren İlk Çıkar Sırası) için en son girilen öğe ilk çıkan öğe olacaktır.
  • Kuyruktaki bir öğe put(item) yöntemi kullanılarak eklenir.
  • Bir öğeyi kaldırmak için get() yöntemi kullanılır.

Bu yazıyı şu şekilde özetleyin: