Python Antrian: FIFO, Contoh LIFO

⚡ Ringkasan Cerdas

Python Antrian adalah struktur data linier yang menyimpan item dan melepaskannya dalam urutan yang ditentukan. Modul antrian menyediakan varian FIFO, LIFO, dan prioritas untuk mengelola tugas, menyangga data, dan mengoordinasikan pekerjaan antar thread dengan aman.

  • 🔢 FIFO: Kelas Queue menghapus item terlama terlebih dahulu, ideal untuk penjadwalan tugas dan buffering.
  • 🔁 LIFO: Kelas LifoQueue menghapus item terbaru terlebih dahulu, berperilaku seperti tumpukan (stack).
  • 📦 Metode inti: put(), get(), qsize(), empty(), dan full() mengelola item dan melaporkan status antrian.
  • 🧵 Aman untuk multi-threading: Modul antrian menangani penguncian, sehingga beberapa thread dapat berbagi satu antrian dengan aman.
  • 🎯 prioritas: PriorityQueue melepaskan item berdasarkan prioritas, bukan berdasarkan urutan penyisipan.
  • 🤖 Bantuan AI: Asisten AI menghasilkan kode antrian dan menjelaskan pertimbangan FIFO dan LIFO dari sebuah perintah sederhana.

Python Antrian FIFO LIFO

Apa itu Python Antre?

Antrian adalah wadah yang menyimpan data. Data yang dimasukkan terlebih dahulu akan dihapus terlebih dahulu, oleh karena itu antrian disebut juga “First in First Out” (FIFO). Antrian memiliki dua ujung depan dan belakang. Barang dimasukkan dari belakang dan dikeluarkan dari sisi depan.

Bagaimana Python Antrian Bekerja?

Antrian tersebut dapat dengan mudah dibandingkan dengan contoh dunia nyata yaitu antrean orang yang mengantri di loket tiket, orang yang berdiri terlebih dahulu akan mendapatkan tiket terlebih dahulu, disusul orang berikutnya, dan seterusnya. Logika yang sama juga berlaku untuk struktur data antrian.

Berikut adalah representasi diagram antrian:

Python Pekerjaan Antrian

The Belakang mewakili titik di mana item dimasukkan ke dalam antrian. Dalam contoh ini, 7 adalah nilai untuk itu.

The Depan mewakili titik di mana item dari antrian akan dihapus. Jika Anda menghapus item dari antrian, elemen pertama yang Anda dapatkan adalah 1, seperti yang ditunjukkan pada gambar.

Item 1 adalah yang pertama dimasukkan ke dalam antrian, dan saat dikeluarkan, item tersebut adalah yang pertama keluar. Oleh karena itu antrian tersebut dinamakan FIRST IN FIRST OUT (FIFO)

Python Pekerjaan Antrian

Dalam antrian, item dihapus secara berurutan dan tidak dapat dihapus di antaranya. Anda tidak bisa menghapus item 5 secara acak dari antrian, untuk melakukan itu Anda harus menghapus semua item sebelum 5. Item dalam antrian akan dihapus sesuai urutan penyisipannya.

Jenis Antrian di Python

Pada dasarnya ada dua jenis antrian masuk Python:

  • Antrean Pertama masuk Pertama keluar: Untuk ini, elemen yang masuk terlebih dahulu akan menjadi yang pertama keluar. Untuk bekerja dengan FIFO, Anda harus memanggil Antre() kelas dari modul antrian.
  • Antrian Terakhir Masuk Pertama Keluar: Di sini, elemen yang dimasukkan terakhir akan menjadi yang pertama keluar. Untuk bekerja dengan LIFO, Anda harus memanggil Antrean Lifo() kelas dari modul antrian.

Python Instalasi antrian

Sangat mudah untuk bekerja dengan antrian dengan python. Berikut adalah langkah-langkah yang harus diikuti untuk memanfaatkan antrian dalam kode Anda.

Langkah 1) Anda hanya perlu mengimpor modul antrian, seperti gambar di bawah ini:

import queue

Modul ini tersedia secara default dengan python, dan Anda tidak memerlukan instalasi tambahan apa pun untuk mulai bekerja dengan antrian. Ada 2 jenis antrian FIFO (first in first out) dan LIFO (last in first out).

Langkah 2) Untuk bekerja dengan antrian FIFO, panggil kelas Queue menggunakan modul antrian yang diimpor seperti yang ditunjukkan di bawah ini:

import queue
q1 = queue.Queue()

Langkah 3) Untuk bekerja dengan antrian LIFO, panggil kelas LifoQueue() seperti yang ditunjukkan di bawah ini:

import queue
q1 = queue.LifoQueue()

Metode tersedia di dalam kelas Queue dan LifoQueue

Berikut ini adalah metode penting yang tersedia di dalam kelas Queue dan LifoQueue:

  • taruh(barang): Ini akan memasukkan item ke dalam antrian.
  • mendapatkan(): Ini akan mengembalikan Anda item dari antrian.
  • kosong(): Ini akan mengembalikan nilai true jika antrian kosong dan false jika item ada.
  • qukuran(): mengembalikan ukuran antrian.
  • penuh(): mengembalikan true jika antrean penuh, jika tidak, false.

Contoh Antrian First In First Out

Dalam kasus first in first out, elemen yang masuk lebih dulu akan keluar lebih dulu.

Tambahkan dan item dalam antrian

Mari kita kerjakan contoh untuk menambahkan item ke dalam antrian. Untuk mulai bekerja dengan antrian, pertama-tama impor antrian modul, seperti yang ditunjukkan pada contoh di bawah.

Untuk menambahkan item, Anda dapat menggunakan metode put() seperti yang ditunjukkan pada contoh:

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

Secara default, ukuran antrian tidak terbatas dan Anda dapat menambahkan sejumlah item ke dalamnya. Jika Anda ingin menentukan ukuran antrian, hal yang sama dapat dilakukan sebagai berikut

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.

Keluaran:

True

Sekarang ukuran antriannya adalah 5, dan tidak akan memakan lebih dari 5 item, dan metode q1.full() akan mengembalikan nilai true. Menambahkan item lagi tidak akan mengeksekusi kode lebih lanjut.

Hapus item dari antrian

Untuk menghapus item dari antrian, Anda dapat menggunakan metode yang disebut get(). Metode ini mengizinkan item dari antrian saat dipanggil.

Contoh berikut menunjukkan cara menghapus item dari antrean.

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

item1 = q1.get()

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

Keluaran:

The item removed from the queue is  10

Contoh antrian Masuk Pertama Keluar Terakhir

Dalam kasus antrian terakhir yang keluar pertama, elemen yang dimasukkan terakhir akan menjadi yang pertama keluar.

Untuk bekerja dengan LIFO, yaitu antrian terakhir yang keluar pertama, kita perlu mengimpor modul antrian dan menggunakan metode LifoQueue().

Tambahkan dan item dalam antrian

Disini kita akan memahami cara menambahkan item ke antrian LIFO.

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

Anda harus menggunakan metode put() di LifoQueue, seperti yang ditunjukkan pada contoh di atas.

Hapus item dari antrian

Untuk menghapus item dari LIFOqueue Anda dapat menggunakan metode get() .

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

item1 = q1.get()

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

Keluaran:

The item removed from the LIFO queue is  10

Tambahkan lebih dari 1 item dalam Antrean

Dalam contoh di atas, kita telah melihat cara menambahkan satu item dan menghapus item untuk FIFO dan LIFOqueue. Sekarang kita akan melihat cara menambahkan lebih dari satu item dan juga menghapusnya.

Tambahkan dan item dalam antrian FIFO

import queue
q1 = queue.Queue()

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

Hapus item dari FIFOqueue

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.

Keluaran:

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

Tambahkan dan item dalam LIFOqueue

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

Hapus item dari LIFOqueue

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.

Keluaran:

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 

Penyortiran Antrian

Contoh berikut menunjukkan penyortiran antrean. Algoritma yang digunakan untuk penyortiran adalah pengurutan gelembung.

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()

Keluaran:

3 4 5 10 11 21

Revmengantre

Untuk membalikkan antrian, Anda dapat menggunakan antrian lain dan rekursi.

Contoh berikut menunjukkan cara membalikkan antrean.

Contoh:

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()

Keluaran:

10 3 21 4 5 11

Pertanyaan Umum Demo Slot

Antrian (queue) menggunakan prinsip FIFO (First In, First Out), sehingga item terlama keluar terlebih dahulu, sedangkan tumpukan (stack) menggunakan prinsip LIFO (Last In, First Out), di mana item terbaru keluar terlebih dahulu. PythonModul antrian 's menawarkan Queue untuk perilaku FIFO dan LifoQueue untuk perilaku tumpukan.

Ya. Queue, LifoQueue, dan PriorityQueue dirancang untuk program multi-threaded dan menangani penguncian secara internal, sehingga banyak thread produsen dan konsumen dapat berbagi satu antrian tanpa kondisi persaingan atau data yang rusak.

queue.Queue aman untuk multithreading dan dirancang untuk threading producer-consumer. collections.deque adalah antrean dua ujung serbaguna yang lebih cepat untuk kode single-threaded, mendukung penambahan dan penghapusan cepat dari kedua ujung.

PriorityQueue melepaskan item berdasarkan urutan prioritas, bukan urutan penyisipan. Anda memasukkan tuple (prioritas, data), dan get() mengembalikan nomor prioritas terendah terlebih dahulu, yang sesuai untuk penjadwal dan algoritma jalur terpendek.

Secara default, get() akan memblokir dan menunggu hingga item tersedia. Berikan block=False atau gunakan get_nowait() untuk langsung memunculkan pengecualian queue.Empty alih-alih menunggu item baru.

Berikan nilai maxsize ke konstruktor, misalnya queue.Queue(5). Ketika antrean penuh, put() akan memblokir hingga ruang kosong tersedia dan full() mengembalikan True. Nilai maxsize 0 berarti antrean tidak terbatas.

Asisten AI menghasilkan kode antrian produsen-konsumen, menjelaskan pertimbangan FIFO versus LIFO, dan menyarankan apakah queue.Queue, deque, atau asyncio.Queue sesuai dengan kasus Anda. Mereka juga membantu mendeteksi kebuntuan (deadlock) dan panggilan task_done() yang hilang.

Ya. GitHub Copilot melengkapi secara otomatis pengaturan Antrian, perulangan put() dan get(), serta thread pekerja dari sebuah komentar. Alat AI Agentic melangkah lebih jauh, dengan memfaktorkan ulang kode yang memblokir ke asyncio.Queue dan menambahkan penanganan kesalahan di seluruh file.

Ringkaslah postingan ini dengan: