Forståelse af køimplementering i Python

Datastrukturer spiller en nøglerolle i programmeringsverdenen. De hjælper os med at organisere vores data på en måde, der kan bruges effektivt. Køen er en af ​​de enkleste datastrukturer, der findes.

I denne artikel lærer vi om køen og dens implementering i Python.

Hvad er en kø?

En kø er en lineær datastruktur, der følger First In/First Out (FIFO) princippet. Det er modsat stak-datastrukturen.

Vi kan sammenligne køen med en virkelig kø ved biografbilletskranken. Lad os se illustrationen af ​​en kø som følger.

Hvis du observerer køen ved skranken, kan den anden person først gå hen til skranken, efter at den første person har afsluttet sit arbejde. Her kommer den første til disken og derefter den anden. Så her følger folk FIFO (First In/First Out) princippet. Den, der kommer først, færdiggør arbejdet først. Vi kan se en lignende form for køer i vores daglige liv.

Kødatastrukturen følger også samme princip. Nu ved du, hvad køer er og dets princip. Lad os se de operationer, der kan udføres på en kødatastruktur.

Operationer i kø

I lighed med stack finder vi to hovedoperationer i en kødatastruktur.

kø (data)

Tilføjer nye data til køen i slutningen. Siden kaldes bagsiden.

dequeue()

Fjerner data fra forsiden af ​​køen. Siden kaldes forsiden.

Lad os se kødriftsillustrationerne for bedre forståelse. Et billede siger mere end tusind ord.

Vi kan skrive nogle hjælpefunktioner for at få mere info om køen. Der er ingen begrænsning på antallet af hjælpefunktioner, du vil have. Lad os holde os til det vigtigste, der én gang er nævnt nedenfor.

bag()

Returnerer det første element fra slutningen af ​​køen.

foran()

Returnerer det første element fra starten af ​​køen.

er tom()

Returnerer om køen er tom eller ej.

Er det ikke kedeligt for dig? Jeg mener de konceptuelle emner.

For mig Ja!

Men vi kan ikke gøre noget uden at kende begreberne. Vi skal fuldstændig vide det før implementeringen. Bare rolig, det er på tide at gøre vores hænder beskidte med noget kode.

Jeg antager, at du har python installeret på din pc, hvis ikke, kan du også prøve online-kompileren.

Implementering af kø

Implementering af en kø vil ikke tage mere end 15 minutter for en programmør. Når du har lært, vil du sige det. Måske kan du implementere det inden for få minutter efter denne vejledning.

  Ret fejl 1310 Bekræft, at du har adgang til denne mappe

Der er flere måder at implementere køen i Python. Lad os se forskellige køimplementeringer trin for trin.

#1. Liste

Listen er en indbygget datatype i Python. Vi skal bruge listedatatypen til at implementere en kø i en klasse. Vi vil lede dig gennem forskellige trin for at implementere kødatastrukturen fra bunden uden nogen moduler. Lad os springe ud i det.

Trin 1:

Skriv en klasse, der hedder Kø.

class Queue:
	pass

Trin 2:

Der skal være en eller anden variabel for at gemme dataene i køen i klassen. Lad os navngive det elementer. Og det er selvfølgelig en liste.

class Queue:

	def __init__(self):
		self.elements = []

Trin 3:

For at indsætte data i køen skal vi bruge en metode i klassen. Metoden kaldes enqueue, som vi allerede har diskuteret i det forrige afsnit af selvstudiet.

Metoden tager nogle data og tilføjer dem til køen (elementer). Vi kan bruge tilføjningsmetoden for listedatatypen til at tilføje data i slutningen af ​​køen.

class Queue:

	# ...

	def enqueue(self, data):
		self.elements.append(data)
		return data

Trin 4:

Køen skal have en udgang. Og det kaldes dekø. Jeg tror, ​​du allerede har gættet, at vi kommer til at bruge pop-metoden for listedatatypen. Hvis du gættede eller ej, skål!

Pop-metoden for listedatatypen sletter et element fra listen over det givne indeks. Hvis vi ikke gav noget indeks, så sletter det det sidste element på listen.

Her skal vi slette det første element på listen. Så vi er nødt til at overføre indekset 0 til pop-metoden.

class Queue:

	# ...

	def dequeue(self):
		return self.elements.pop(0)

Det er nok til en kø. Men vi har brug for hjælpefunktionerne for at teste, om køoperationerne fungerer korrekt eller ej. Lad os også skrive hjælpefunktionerne.

Trin 5:

Metoden rear() bruges til at få det sidste element i køen. Negativ indeksering i listedatatype hjælper os med at få det sidste element i køen.

class Queue:

	# ...

	def rear(self):
		return self.elements[-1]

Trin 6:

Metoden front() bruges til at få det første element i køen. Vi kan få det første element i køen ved hjælp af listeindekset.

class Queue:

	# ...

	def front(self):
		return self.elements[0]

Trin 7:

Metoden is_empty() bruges til at kontrollere, om køen er tom eller ej. Vi kan tjekke listens længde.

class Queue:

	# ...

	def is_empty(self):
		return len(self.elements) == 0

Pyha! gennemført implementeringsdelen af ​​kødatastrukturen. Vi skal oprette et objekt, som Queue-klassen kan bruge.

  Hvad er en statisk IP-adresse, og hvordan man tilpasser den

Lad os gøre det.

class Queue:

	# ...

if __name__ == '__main__':
	queue = Queue()

Nu har vi et køobjekt. Lad os teste det med en række operationer.

  • Kontroller, om køen er tom eller ej ved at bruge metoden is_empty. Det burde returnere True.
  • Tilføj tallene 1, 2, 3, 4, 5 til køen ved hjælp af enqueue-metoden.
  • Metoden is_empty skulle returnere False. Tjekke det.
  • Udskriv for- og bagelementerne ved hjælp af henholdsvis for- og bagmetoden.
  • Fjern elementet fra køen ved hjælp af dequeue-metoden.
  • Tjek frontelementet. Det skal returnere element 2.
  • Fjern nu alle elementer fra køen.
  • Metoden is_empty skulle returnere True. Tjekke det.

Jeg tror, ​​det er nok til at teste vores køimplementering. Skriv koden for hvert trin nævnt ovenfor for at teste køen.

Har du skrevet koden?

Nej, bare rolig.

Tjek koden nedenfor.

class Queue:

	def __init__(self):
		self.elements = []

	def enqueue(self, data):
		self.elements.append(data)
		return data

	def dequeue(self):
		return self.elements.pop(0)

	def rear(self):
		return self.elements[-1]

	def front(self):
		return self.elements[0]

	def is_empty(self):
		return len(self.elements) == 0

if __name__ == '__main__':
	queue = Queue()

	## checking is_empty method -> True
	print(queue.is_empty())

	## adding the elements
	queue.enqueue(1)
	queue.enqueue(2)
	queue.enqueue(3)
	queue.enqueue(4)
	queue.enqueue(5)

	## again checking is_empty method -> False
	print(queue.is_empty())

	## printing the front and rear elements using front and rear methods respectively -> 1, 5
	print(queue.front(), end=' ')
	print(queue.rear())

	## removing the element -> 1
	queue.dequeue()

	## checking the front and rear elements using front and rear methods respectively -> 2 5
	print(queue.front(), end=' ')
	print(queue.rear())

	## removing all the elements
	queue.dequeue()
	queue.dequeue()
	queue.dequeue()
	queue.dequeue()

	## checking the is_empty method for the last time -> True
	print(queue.is_empty())

Jeg tror, ​​du kører ovenstående program. Du kan få et output svarende til det følgende resultat.

True
False
1 5
2 5
True

Vi kan direkte bruge listedatatypen som en kødatastruktur. Ovenstående implementering af køen hjælper dig med bedre at forstå køimplementeringen i andre programmeringssprog.

Du kan også bruge ovenstående klasseimplementering af en kø i et andet program i et projekt ved blot at oprette objektet, som vi gjorde tidligere.

Vi har implementeret køen fra bunden ved hjælp af listedatatypen. Er der indbyggede moduler til køen? Ja! vi har indbyggede køimplementeringer. Lad os se dem.

#2. deque fra samlinger

Det er implementeret som en dobbeltkø. Da det understøtter tilføjelse og fjernelse af elementer fra begge ender, kan vi bruge det som en stak og kø. Lad os se køimplementeringen ved hjælp af dequeue.

Den implementeres ved hjælp af andre datastrukturer kaldet den dobbeltforbundne liste. Så udførelsen af ​​indsættelse og sletning af elementer er konsekvent. Adgang til elementer fra den midterste linkede liste tog O(n) tid. Vi kan bruge det som en kø, da der ikke er behov for at få adgang til de midterste elementer fra køen.

  Er det muligt at slette Care.com-konto?

Lad os tjekke de forskellige metoder, som dekøen tilbyder os.

  • append(data) – bruges til at tilføje data til køen
  • popleft() – bruges til at fjerne det første element fra køen

Der er ingen alternative metoder til front, bag og is_empty. Vi kan printe hele køen i stedet for for- og bagmetoder. Dernæst kan vi bruge len-metoden til at kontrollere, om køen er tom eller ej.

Vi har fulgt en række trin for at teste køimplementeringen i det foregående. Lad os også følge den samme serie af trin her.

from collections import deque

## creating deque object
queue = deque()

## checking whether queue is empty or not -> True
print(len(queue) == 0)

## pushing the elements
queue.append(1)
queue.append(2)
queue.append(3)
queue.append(4)
queue.append(5)

## again checking whether queue is empty or not -> False
print(len(queue) == 0)

## printing the queue
print(queue)

## removing the element -> 1
queue.popleft()

## printing the queue
print(queue)

## removing all the elements
queue.popleft()
queue.popleft()
queue.popleft()
queue.popleft()

## checking the whether queue is empty or not for the last time -> True
print(len(queue) == 0)

Du vil få et resultat svarende til følgende output.

True
False
deque([1, 2, 3, 4, 5])
deque([2, 3, 4, 5])
True

#3. Kø fra kø

Python har et indbygget modul kaldet kø, der betjener en klasse kaldet Queue til køimplementeringen. Det ligner det, vi har implementeret før.

Lad os først tjekke forskellige metoder i kø-klassen.

  • put(data) – tilføjer eller skubber data til køen
  • get() – fjerner det første element fra køen og returnerer det
  • empty() – returnerer om stakken er tom eller ej
  • qsize() – returnerer længden af ​​køen.

Lad os implementere køen med ovenstående metoder.

from queue import Queue

## creating Queue object
queue_object = Queue()

## checking whether queue is empty or not -> True
print(queue_object.empty())

## adding the elements
queue_object.put(1)
queue_object.put(2)
queue_object.put(3)
queue_object.put(4)
queue_object.put(5)

## again checking whether queue is empty or not -> False
print(queue_object.empty())

## removing all the elements
print(queue_object.get())
print(queue_object.get())
print(queue_object.get())

## checking the queue size
print("Size", queue_object.qsize())

print(queue_object.get())
print(queue_object.get())

## checking the whether queue_object is empty or not for the last time -> True
print(queue_object.empty())

Tjek outputtet af ovenstående kode.

True
False
1
2
3
Size 2
4
5
True

Der er nogle andre metoder i Queue-klassen. Du kan udforske dem ved hjælp af den indbyggede dir-funktion.

Konklusion

Jeg håber, du har lært om kødatastrukturen og dens implementering. Det er det for køen. Du kan bruge køen forskellige steder, hvor der skal behandles i FIFO(First In/First Out) rækkefølge. Brug kø i problemløsning, når du får sagen til at bruge den.

Interesseret i at mestre Python? Tjek disse læringsressourcer.

God kodning 🙂 👨‍💻