Apa itu Struktur Data Antrian Dengan Python?



Artikel ini akan memberi Anda pengetahuan terperinci dan komprehensif tentang Struktur Data Antrean dengan Python dengan banyak contoh.

Seperti yang telah Anda pelajari tentang pentingnya Struktur Data di artikel sebelumnya, Mari selami topik artikel, yaitu Struktur Data Antrean. Saya akan membahas topik-topik berikut:

bagaimana menemukan nomor terbesar dalam array java

Kebutuhan Struktur Data Antrian

Misalkan Anda ingin menonton film suatu hari nanti. Di multipleks, tiket diterbitkan atas dasar First-Come-First-Serve dan orang-orang berdiri di belakang satu sama lain menunggu giliran. Jadi apa yang akan kamu lakukan?? Anda pasti pergi ke belakang dan berdiri di belakang orang terakhir yang menunggu tiket.





queue-data-structure

Di sini, orang-orang berdiri satu di belakang yang lain dan mereka dilayani berdasarkan First-In-First-Out (FIFO) mekanisme. Pengaturan seperti itu dikenal sebagai a Antre.



Contoh Antrian Kehidupan Sehari-hari

Mari pertimbangkan beberapa contoh di mana kami melihat jenis antrian yang berfungsi dalam kehidupan sehari-hari:

  • Sistem penjawab telepon- Orang yang menelepon pertama kali di gadget Anda akan dilayani lebih dulu.
  • Mesin pengecekan bagasi - Memeriksa bagasi yang telah disimpan terlebih dahulu di ban berjalan.
  • Kendaraan di jembatan pajak tol - Kendaraan yang tiba lebih awal berangkat lebih dulu.
  • Pusat Panggilan - sistem telepon akan menggunakan Antrian, untuk menahan orang yang menelepon mereka secara berurutan, sampai perwakilan layanan gratis.

Semua contoh ini mengikuti First-In-Last-Out strategi.

Membuat Struktur Data Antrian

Terlepas dari operasi pelengkap, saya dapat mengatakan bahwa Operasi utama yang memungkinkan pada Antrian adalah:



satu. En-antrian atau tambahkan elemen ke akhir antrian.

2. Hapus antrean atau hapus elemen dari depan antrian

Sekarang, mari kita mulai membuat Antrean kelas dengan Python:

class Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ belakang = -1 self .__ depan = 0
  • max_size adalah jumlah maksimum elemen yang diharapkan dalam antrian.
  • Elemen antrian disimpan dalam daftar python
  • belakang menunjukkan posisi indeks elemen terakhir dalam antrian.
  • Bagian belakang awalnya dianggap -1 karena antriannya kosong
  • Depan menunjukkan posisi elemen pertama dalam antrian.
  • Bagian depan dianggap 0 pada awalnya karena akan selalu mengarah ke elemen pertama antrian

Antrekan

Sekarang, saat Anda mencoba memasukkan elemen ke Antrean, Anda harus mengingat poin-poin berikut:

  • Apakah ada ruang tersisa dalam antrian atau tidak, yaitu jika belakang sama dengan max_size -1
  • Bagian belakang akan mengarah ke elemen terakhir yang dimasukkan ke dalam antrian.

Jadi, apa algoritmanya ??

#returns max_size of queue def get_max_size (self): return self .__ max_size #returns bool value apakah queue full atau not, True if full and False sebaliknya def is_full (self): return self .__ rear == self .__ max_size-1 # memasukkan / memasukkan data ke antrian jika tidak full def enqueue (self, data): if (self.is_full ()): print ('Queue is full. No enqueue mungkin') else: self .__ rear + = 1 self. __elements [self .__ rear] = data #display all content of queue def display (self): for i in range (0, self .__ rear + 1): print (self .__ elements [i]) #Anda dapat menggunakan di bawah __str __ () untuk mencetak elemen objek DS saat debugging def __str __ (self): msg = [] index = self .__ depan sementara (indeks<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg

Sekarang, Saat Anda menjalankan yang berikut:

queue1 = Antrian (5)

#Enqueue semua elemen yang dibutuhkan.

queue1.enqueue ('A')

queue1.enqueue ('B')

queue1.enqueue ('C')

queue1.enqueue (“D”)

queue1.enqueue ('E')

queue1.display ()

queue1.enqueue ('F')

cetak (antrian1)

Keluaran:

UNTUK

B

C

D

AKU S

Antrian penuh. Antrian tidak mungkin

Data antrian (Depan ke Belakang): A B C D E

De-Queue

Sekarang, karena Anda telah memasukkan / mengantrekan elemen ke dalam antrean, Anda ingin menghapusnya dari antrean / menghapusnya dari depan, jadi Anda perlu berhati-hati dalam hal berikut:

  • Ada elemen dalam antrian yaitu belakang tidak boleh sama dengan -1.
  • Kedua, Anda perlu mengingat bahwa sebagai elemen dihapus dari depan jadi, setelah menghapus depan harus bertambah ke titik depan berikutnya.
  • Bagian depan tidak boleh menunjukkan akhir antrian, yaitu sama dengan max_size.

Jadi, apa algoritmanya ??

#fungsi untuk memeriksa apakah queue kosong atau tidak def is_empty (self): if (self .__ rear == - 1 or self .__ front == self .__ max_size): return True else: return False #fungsi untuk menghilangkan elemen dan mengembalikan it def dequeue (self): if (self.is_empty ()): print ('queue is been empty') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data #fungsi untuk menampilkan elemen dari depan ke belakang jika antrian tidak kosong def display (self): if (bukan self.is_empty ()): untuk i dalam range (self .__ depan, self .__ belakang + 1): print (self .__ elemen [i]) lain : print ('antrian kosong')

Sekarang saat Anda menjalankan yang berikut:

queue1 = Antrian (5)

#Enqueue semua elemen yang dibutuhkan

queue1.enqueue ('A')

queue1.enqueue ('B')

queue1.enqueue ('C')

queue1.enqueue (“D”)

queue1.enqueue ('E')

cetak (antrian1)

#Dequeue semua elemen yang dibutuhkan

print (“Di antrean:“, queue1.dequeue ())

print (“Di antrean:“, queue1.dequeue ())

print (“Di antrean:“, queue1.dequeue ())

print (“Di antrean:“, queue1.dequeue ())

print (“Di antrean:“, queue1.dequeue ())

print (“Di antrean:“, queue1.dequeue ())

#Tampilkan semua elemen dalam antrian.

queue1.display ()

Keluaran:

Data antrian (Depan ke Belakang): A B C D E

Di antrean: A

Di antrean: B

Di antrean: C

Di antrean: D

Di antrean: E

antrian sudah kosong

Di antrean: Tidak ada

antrian kosong

Penerapan Antrian

Sampai sekarang, Anda sudah memahami dasar-dasar antrian. Sekarang untuk menyelami lebih dalam kita akan melihat beberapa aplikasinya.

  • Contoh 1:

Antrian Cetak di Windows menggunakan antrian untuk menyimpan semua pekerjaan cetak yang aktif dan menunggu keputusan. Saat kami ingin mencetak dokumen, kami mengeluarkan perintah cetak satu demi satu. Berdasarkan perintah cetak, dokumen akan berbaris dalam antrian cetak. Jika printer sudah siap, dokumen akan dikirim terlebih dahulu agar dapat dicetak.

Misalkan Anda telah mengeluarkan perintah cetak untuk 3 dokumen dalam urutan doc1, diikuti oleh doc2 dan doc3.
Antrian cetak akan diisi seperti yang ditunjukkan di bawah ini:

doc-n, di mana doc adalah dokumen yang dikirim untuk dicetak dan n, adalah jumlah halaman dalam dokumen. Misalnya, doc2-10 berarti doc2 akan dicetak dan memiliki 10 halaman. Berikut adalah kode yang mensimulasikan operasi antrian cetak. Pergi melalui kode dan amati bagaimana antrian digunakan dalam implementasi ini.

class Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0 def is_full (self): if (self .__ belakang = = self .__ max_size-1): return True return False def is_empty (self): if (self .__ front> self .__ rear): return True return False def enqueue (self, data): if (self.is_full ()): print ('Queue is full !!!') else: self .__ rear + = 1 self .__ elements [self .__ rear] = data def dequeue (self): if (self.is_empty ()): print ('Queue is empty! !! ') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data def display (self): untuk indeks dalam range (self .__ depan, self .__ belakang + 1): print (self .__ elemen [index]) def get_max_size (self): return self .__ max_size #Anda dapat menggunakan __str __ () di bawah ini untuk mencetak elemen objek DS saat #debugging def __str __ (self): msg = [] index = self .__ front while (indeks<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg #function that enqueue are the documents to be printed in Queue named print_queue def send_for_print(doc): global print_queue if(print_queue.is_full()): print('Queue is full') else: print_queue.enqueue(doc) print(doc,'sent for printing') #function that prints the document if number of pages of document is less than #total number of pages in printer def start_printing(): global print_queue while(not print_queue.is_empty()): #here we dequeue the Queue and take the coument that was input first for printing. doc=print_queue.dequeue() global pages_in_printer #the aim of this for loop is to find number of pages of the of document which is doc name followed by “-“ for i in range(0,len(doc)): if(doc[i]=='-'): no_of_pages=int(doc[i+1:]) break if(no_of_pages<=pages_in_printer): print(doc,'printed') pages_in_printer-=no_of_pages print('Remaining no. of pages in printer:', pages_in_printer) else: print('Couldn't print',doc[:i],'. Not enough pages in the printer.') pages_in_printer=12 print_queue=Queue(10) send_for_print('doc1-5') send_for_print('doc2-3') send_for_print('doc3-6') start_printing()

Keluaran:

doc1-5 dikirim untuk dicetak

doc2-3 dikirim untuk dicetak

doc3-6 dikirim untuk dicetak

doc1-5 dicetak

Sisa no. Jumlah halaman di printer: 7

cara membuat kelas singleton di java

doc2-3 dicetak

Sisa no. Jumlah halaman di printer: 4

Tidak dapat mencetak doc3. Halaman di printer tidak mencukupi

  • Contoh 2:

Mari kita coba memahami contoh lain yang menggunakan struktur data Antrian. Bisakah Anda mencoba memahami kode dan mengetahui fungsi berikut ini?

  1. pasti menyenangkan (n):
  2. aqueue = Antrian (100)
  3. untuk jumlah dalam rentang (1, n + 1):
  4. enqueue (num)
  5. hasil = 1
  6. sementara (bukan (aqueue.is_empty ())):
  7. num = AQUUE.DEQUEUE ()
  8. hasil * = num
  9. cetak (hasil)

Ketika fungsi fun () dipanggil dengan melewatkan n,

  • baris 2 ke 4 memasukkan elemen dari 1 ke n
  • baris 5 sampai 8 menemukan produk dari elemen-elemen tersebut dengan menghilangkan antriannya satu per satu

Dengan ini, kita sampai pada akhir artikel Struktur Data Antrian ini. Jika Anda berhasil memahami dan menjalankan kode sendiri, Anda bukan lagi pemula dalam Struktur Data Antrean.

Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar artikel ini dan kami akan menghubungi Anda kembali sesegera mungkin.

Untuk mendapatkan pengetahuan mendalam tentang Python beserta berbagai aplikasinya, Anda dapat mendaftar secara langsung dengan dukungan 24/7 dan akses seumur hidup.