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:
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.
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.


