Izpratne par rindas ieviešanu Python

Datu struktūrām ir galvenā loma programmēšanas pasaulē. Tie palīdz mums sakārtot mūsu datus tā, lai tos varētu efektīvi izmantot. Rinda ir viena no vienkāršākajām pieejamajām datu struktūrām.

Šajā rakstā mēs uzzināsim par rindu un tās ieviešanu Python.

Kas ir rinda?

Rinda ir lineāra datu struktūra, kas atbilst FIFO (First In/First Out) principam. Tas ir pretējs Stack datu struktūrai.

Mēs varam salīdzināt rindu ar reālo rindu pie kinoteātra biļešu kases. Apskatīsim rindas ilustrāciju šādi.

Ja novērojat rindu pie letes, otrā persona var doties pie letes tikai pēc tam, kad pirmais ir pabeidzis savu darbu. Šeit pie letes nāk pirmais cilvēks un tad otrais. Tātad šeit cilvēki ievēro FIFO (First In/First Out) principu. Kurš nāks pirmais, viņš/viņa pirmais pabeigs darbu. Mēs varam redzēt līdzīga veida rindas mūsu ikdienas dzīvē.

Arī rindas datu struktūra atbilst tādam pašam principam. Tagad jūs zināt, kas ir rindas un tās princips. Apskatīsim darbības, kuras var veikt rindas datu struktūrā.

Darbības rindā

Līdzīgi kā kaudze, mēs atradīsim divas galvenās operācijas rindas datu struktūrā.

rinda (dati)

Beigās rindai pievieno jaunus datus. Sānu sauc par aizmuguri.

dequeue ()

Noņem datus no rindas priekšpuses. Sānu sauc par priekšējo.

Apskatīsim rindu operāciju ilustrācijas, lai labāk izprastu. Viena bilde runā tūkstoš vārdu.

Mēs varam uzrakstīt dažas palīgfunkcijas, lai iegūtu vairāk informācijas par rindu. Jums pieejamo palīgfunkciju skaits nav ierobežots. Pagaidām pieturēsimies pie svarīgākā, kas reiz minēts tālāk.

aizmugure ()

Atgriež pirmo elementu no rindas beigām.

priekšā ()

Atgriež pirmo elementu no rindas sākuma.

ir tukšs()

Atgriež neatkarīgi no tā, vai rinda ir tukša vai nav.

Vai jums tas nav garlaicīgi? Es domāju konceptuālās tēmas.

Priekš manis Jā!

Bet mēs neko nevaram darīt, nezinot jēdzienus. Mums tas ir jāzina pirms ieviešanas. Neuztraucieties, ir pienācis laiks nosmērēt rokas ar kādu kodu.

Es pieņemu, ka jūsu datorā ir instalēts python, ja nē, varat arī izmēģināt tiešsaistes kompilatoru.

Rindas ieviešana

Rindas ieviešana programmētājam neaizņems vairāk par 15 minūtēm. Tiklīdz jūs iemācīsities, jūs to pateiksit. Varbūt jūs varat to ieviest dažu minūšu laikā pēc šīs apmācības.

  Kā sapludināt PDF failus operētājsistēmā Mac

Ir vairāki veidi, kā ieviest rindu Python. Apskatīsim dažādas rindu ieviešanas soli pa solim.

#1. Saraksts

Saraksts ir Python iebūvēts datu tips. Mēs izmantosim saraksta datu tipu, lai ieviestu rindu klasē. Mēs iepazīstināsim jūs ar dažādām darbībām, lai ieviestu rindas datu struktūru no nulles bez moduļiem. Iesim tajā iekšā.

1. darbība:

Uzrakstiet klasi ar nosaukumu Queue.

class Queue:
	pass

2. darbība:

Lai klasē saglabātu rindas datus, ir jābūt kādam mainīgajam. Nosauksim to par elementiem. Un tas, protams, ir saraksts.

class Queue:

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

3. darbība:

Lai ievietotu datus rindā, mums klasē ir nepieciešama metode. Metode tiek saukta par rindu, kā mēs jau apspriedām iepriekšējā apmācības sadaļā.

Metode ņem dažus datus un pievieno tos rindai (elementiem). Mēs varam izmantot saraksta datu tipa pievienošanas metodi, lai rindas beigās pievienotu datus.

class Queue:

	# ...

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

4. darbība:

Rindai ir jābūt izejai. Un to sauc par dequeue. Es domāju, ka jūs jau uzminējāt, ka mēs izmantosim saraksta datu tipa pop metodi. Ja uzminējāt vai nē, čau!

Saraksta datu tipa pop metode izdzēš elementu no dotā indeksa saraksta. Ja mēs nenorādījām indeksu, tas dzēš pēdējo saraksta elementu.

Šeit mums ir jāizdzēš pirmais saraksta elements. Tātad mums ir jānodod indekss 0 pop metodei.

class Queue:

	# ...

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

Ar to pietiek rindai. Taču mums ir vajadzīgas palīgfunkcijas, lai pārbaudītu, vai rindas darbības darbojas pareizi vai nē. Uzrakstīsim arī palīgfunkcijas.

5. darbība:

Metode rear() tiek izmantota, lai iegūtu rindas pēdējo elementu. Negatīvā indeksācija saraksta datu tipā palīdz mums iegūt rindas pēdējo elementu.

class Queue:

	# ...

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

6. darbība:

Metode front() tiek izmantota, lai iegūtu pirmo rindas elementu. Mēs varam iegūt pirmo rindas elementu, izmantojot saraksta indeksu.

class Queue:

	# ...

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

7. darbība:

Metode is_empty() tiek izmantota, lai pārbaudītu, vai rinda ir tukša vai nē. Mēs varam pārbaudīt saraksta garumu.

class Queue:

	# ...

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

Fu! pabeidza rindas datu struktūras ieviešanas daļu. Mums ir jāizveido objekts rindas klasei, ko izmantot.

Darīsim to.

class Queue:

	# ...

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

Tagad mums ir rindas objekts. Pārbaudīsim to ar dažām darbību sērijām.

  • Pārbaudiet, vai rinda ir tukša, izmantojot metodi is_empty. Tam vajadzētu atgriezties True.
  • Pievienojiet rindai skaitļus 1, 2, 3, 4, 5, izmantojot rindas metodi.
  • Metodei is_empty ir jāatgriež False. Pārbaudi.
  • Izdrukājiet priekšējos un aizmugurējos elementus, izmantojot attiecīgi priekšējo un aizmugurējo metodi.
  • Noņemiet elementu no rindas, izmantojot atcelšanas metodi.
  • Pārbaudiet priekšējo elementu. Tam vajadzētu atgriezt 2. elementu.
  • Tagad noņemiet visus elementus no rindas.
  • Metodei is_empty ir jāatgriež vērtība True. Pārbaudi.
  Cena un specifikācijas jaunajam iPhone SE un 9,7 collu iPad Pro

Es domāju, ka ar to pietiek, lai pārbaudītu mūsu rindas ieviešanu. Uzrakstiet kodu katrai iepriekš minētajai darbībai, lai pārbaudītu rindu.

Vai jūs uzrakstījāt kodu?

Nē, neuztraucieties.

Pārbaudiet tālāk norādīto kodu.

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

Es domāju, ka jūs palaižat iepriekš minēto programmu. Jūs varat iegūt rezultātu, kas ir līdzīgs šim rezultātam.

True
False
1 5
2 5
True

Mēs varam tieši izmantot saraksta datu tipu kā rindas datu struktūru. Iepriekš minētā rindas ieviešana palīdz labāk izprast rindas ieviešanu citās programmēšanas valodās.

Iepriekš minēto rindas klases ieviešanu var izmantot arī citā projekta programmā, vienkārši izveidojot objektu, kā mēs to darām iepriekš.

Mēs esam ieviesuši rindu no nulles, izmantojot saraksta datu tipu. Vai rindai ir iebūvēti moduļi? Jā! mums ir iebūvētas rindas ieviešanas. Apskatīsim viņus.

#2. deque no kolekcijām

Tā tiek īstenota kā divgalu rinda. Tā kā tas atbalsta elementu pievienošanu un noņemšanu no abiem galiem, mēs varam to izmantot kā kaudzi un rindu. Apskatīsim rindas ieviešanu, izmantojot dequeue.

Tas tiek ieviests, izmantojot citas datu struktūras, ko sauc par divkārši saistītu sarakstu. Tātad elementu ievietošanas un dzēšanas veiktspēja ir konsekventa. Piekļuve elementiem no vidējā saistītā saraksta aizņēma O (n) laiku. Mēs varam to izmantot kā rindu, jo nav nepieciešams piekļūt vidējiem elementiem no rindas.

Pārbaudīsim dažādas metodes, ko mums piedāvā rindu noņemšana.

  • append(data) – izmanto datu pievienošanai rindai
  • popleft() – izmanto, lai noņemtu pirmo elementu no rindas
  Vai ir vērts iegādāties kameras objektīva papildinājumus viedtālruņiem?

Nav alternatīvu metožu priekšējai, aizmugurei un ir_empty. Mēs varam izdrukāt visu rindu priekšējās un aizmugurējās metodes vietā. Tālāk mēs varam izmantot len ​​metodi, lai pārbaudītu, vai rinda ir tukša.

Mēs esam veikuši virkni darbību, lai pārbaudītu rindas ieviešanu iepriekšējā. Izpildiet to pašu darbību sēriju arī šeit.

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)

Jūs iegūsit rezultātu, kas līdzīgs tālāk norādītajai izvadei.

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

#3. Rinda no rindas

Python ir iebūvēts modulis ar nosaukumu queue, kas rindas ieviešanai apkalpo klasi ar nosaukumu Queue. Tas ir līdzīgs tam, ko esam ieviesuši iepriekš.

Vispirms apskatīsim dažādas rindas klases metodes.

  • put(data) – pievieno vai nospiež datus rindā
  • get() – noņem pirmo elementu no rindas un atgriež to
  • tukšs() – atgriež neatkarīgi no tā, vai kaudze ir tukša vai nav
  • qsize() – atgriež rindas garumu.

Īstenosim rindu ar iepriekš minētajām metodēm.

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

Pārbaudiet iepriekš minētā koda izvadi.

True
False
1
2
3
Size 2
4
5
True

Klasē Queue ir dažas citas metodes. Varat tos izpētīt, izmantojot iebūvēto funkciju dir.

Secinājums

Ceru, ka esat uzzinājis par rindu datu struktūru un tās ieviešanu. Tas ir viss par rindu. Jūs varat izmantot rindu dažādās vietās, kur tās ir jāapstrādā FIFO (First In/First Out) secībā. Izmantojiet rindu problēmu risināšanā, kad vien saņemat lietu, lai to izmantotu.

Vai vēlaties apgūt Python? Apskatiet šos mācību resursus.

Laimīgu kodēšanu 🙂 👨‍💻