Înțelegerea implementării listelor legate în Python

Structurile de date joacă un rol cheie în lumea programării. Ele ne ajută să ne organizăm datele într-un mod care poate fi utilizat eficient.

În acest tutorial, vom afla despre lista cu linkuri simple și lista cu linkuri duble.

O listă legată este o structură de date liniară. Nu stochează datele în locații de memorie adiacente, cum ar fi matrice. Și fiecare element din linked se numește nod și sunt conectați folosind pointerii. Primul nod din lista legată se numește cap.

Mărimea listei legate este dinamică. Deci, putem avea orice număr de noduri după cum ne dorim, cu excepția cazului în care stocarea este disponibilă în dispozitiv.

Există două tipuri de liste legate. Să vedem tutorialul detaliat despre ele unul câte unul.

#1. Lista legată individual

O listă legată individual conține un singur pointer conectat la următorul nod din lista legată. Trebuie să stocăm datele și pointerul pentru fiecare nod din lista legată.

Ultimul nod din lista legată conține null ca următor indicator pentru a reprezenta sfârșitul listei legate.

Puteți vedea ilustrația unui link de mai jos.

Acum, avem o înțelegere completă a unei liste conectate individual. Să vedem pașii pentru a-l implementa în Python.

Implementarea listelor conectate individual

1. Primul pas este crearea nodului pentru lista legată.

Cum să o creez?

În Python, putem crea cu ușurință nodul folosind clasa. Clasa conține date și un pointer pentru următorul nod.

Uită-te la codul nodului.

class Node:

	def __init__(self, data):
		## data of the node
		self.data = data

		## next pointer
		self.next = None

Putem crea nodul cu orice tip de date folosind clasa de mai sus. O să vedem în scurt timp.

  Cum vă puteți recupera Inbox-ul pe iPad

Acum, avem nodul cu noi. În continuare, trebuie să creăm o listă legată cu mai multe noduri. Să creăm o altă clasă pentru o listă legată.

2. Creați o clasă numită LinkedList cu capul inițializat la None. Vezi codul de mai jos.

class LinkedList:

	def __init__(self):
		## initializing the head with None
		self.head = None

3. Avem la noi clasele Node și LinkedList. Cum inserăm un nou nod în lista legată? Un răspuns simplu ar putea fi utilizarea unei metode din clasa LinkedList. Da, ar fi frumos. Să scriem o metodă pentru a insera un nou nod în lista legată.

Pentru a insera un nou nod în lista legată, trebuie să urmam anumiți pași.

Să-i vedem.

  • Verificați dacă capul este gol sau nu.
  • Dacă capul este gol, atunci atribuiți noul nod capului.
  • Dacă capul nu este gol, obțineți ultimul nod al listei legate.
  • Atribuiți noul nod ultimului nod următor indicator.

Să vedem codul pentru a insera un nou nod în lista legată.

class LinkedList:

	####

	def insert(self, new_node):
		## check whether the head is empty or not
		if self.head:
			## getting the last node
			last_node = self.head
			while last_node != None:
				last_node = last_node.next

			## assigning the new node to the next pointer of last node
			last_node.next = new_node

		else:
			## head is empty
			## assigning the node to head
			self.head = new_node

Ura! am finalizat metoda de inserare a unui nou nod în lista legată. Cum putem accesa datele nodurilor din lista legată?

Pentru a accesa datele din lista legată, trebuie să iterăm prin linked folosind următorul pointer așa cum facem pentru a obține ultimul nod în metoda de inserare. Să scriem o metodă în clasa LinkedList pentru a tipări toate datele nodurilor din lista legată.

4. Urmați pașii de mai jos pentru a imprima toate datele nodurilor din lista legată.

  • Inițializați o variabilă cu cap.
  • Scrieți o buclă care se repetă până ajungem la sfârșitul listei legate.
    • Tipăriți datele nodului.
    • Mutați următorul indicator
  11 Cele mai bune instrumente SEO de urmărire a clasamentului și Manager de cuvinte cheie

Să vedem codul.

class LinkedList:

	####

	def display(self):
		## variable for iteration
		temp_node = self.head

		## iterating until we reach the end of the linked list
		while temp_node != None:
			## printing the node data
			print(temp_node.data, end='->')

			## moving to the next node
			temp_node = temp_node.next

		print('Null')

Pf! am finalizat crearea link-ului cu metodele necesare. Să testăm lista legată prin instanțierea acesteia cu câteva date.

Putem crea nodul cu codul Node(1). Să vedem codul complet al implementării listei legate împreună cu exemplul de utilizare.

class Node:

	def __init__(self, data):
		## data of the node
		self.data = data

		## next pointer
		self.next = None

class LinkedList:

	def __init__(self):
		## initializing the head with None
		self.head = None

	def insert(self, new_node):
		## check whether the head is empty or not
		if self.head:
			## getting the last node
			last_node = self.head
			while last_node.next != None:
				last_node = last_node.next

			## assigning the new node to the next pointer of last node
			last_node.next = new_node

		else:
			## head is empty
			## assigning the node to head
			self.head = new_node

	def display(self):
		## variable for iteration
		temp_node = self.head

		## iterating until we reach the end of the linked list
		while temp_node != None:
			## printing the node data
			print(temp_node.data, end='->')

			## moving to the next node
			temp_node = temp_node.next

		print('Null')


if __name__ == '__main__':
	## instantiating the linked list
	linked_list = LinkedList()

	## inserting the data into the linked list
	linked_list.insert(Node(1))
	linked_list.insert(Node(2))
	linked_list.insert(Node(3))
	linked_list.insert(Node(4))
	linked_list.insert(Node(5))
	linked_list.insert(Node(6))
	linked_list.insert(Node(7))

	## printing the linked list
	linked_list.display()

Rulați programul de mai sus pentru a obține următorul rezultat.

1->2->3->4->5->6->7->Null

Asta este pentru lista legată. Acum, știți cum să implementați o listă unică. Puteți implementa cu ușurință lista dublu legată cu cunoștințele listei cu legătură unică. Să trecem la următoarea secțiune a tutorialului.

#2. Listă dublu legată

O listă dublu legată conține doi pointeri conectați la nodul anterior și următorul nod din lista legată. Trebuie să stocăm datele și doi pointeri pentru fiecare nod din lista legată.

Pointerul anterior al primului nod este nul și următorul pointer al ultimului nod este nul pentru a reprezenta sfârșitul listei legate de ambele părți.

  Creați o structură de defalcare a muncii cu aceste 10 instrumente

Puteți vedea ilustrația unui link de mai jos.

Lista dublu legată are, de asemenea, pași similari cu lista cu legături unice în implementare. Din nou explicarea acelorași lucruri va fi plictisitor pentru tine. Parcurgeți codul la fiecare pas și îl veți înțelege foarte repede. Sa mergem.

Implementarea listei dublu legate

1. Crearea unui nod pentru lista dublu legată cu indicatorul de nod anterior, datele și indicatorul de nod următor.

class Node:

	def __init__(self, data):
		## previous pointer
		self.prev = None

		## data of the node
		self.data = data

		## next pointer
		self.next = None

2. Clasă de listă dublu legată.

class LinkedList:

	def __init__(self):
		## initializing the head with None
		self.head = None

3. O metodă de a insera un nou nod în lista dublu legată.

class LinkedList:

	####

	def insert(self, new_node):
		## check whether the head is empty or not
		if self.head:
			## getting the last node
			last_node = self.head
			while last_node.next != None:
				last_node = last_node.next

			## assigning the last node to the previous pointer of the new node
			new_node.prev = last_node

			## assigning the new node to the next pointer of last node
			last_node.next = new_node

4. O metodă de afișare a datelor listei dublu legate.

class LinkedList:

	####

	def display(self):

		## printing the data in normal order
		print("Normal Order: ", end='')

		temp_node = self.head
		while temp_node != None:
			print(temp_node.data, end=' ')
			temp_node = temp_node.next
		print()

		## printing the data in reverse order using previous pointer
		print("Reverse Order: ", end='')

		## getting the last node
		last_node = self.head
		while last_node.next != None:
			last_node = last_node.next

		temp_node = last_node
		while temp_node != None:
			print(temp_node.data, end=' ')
			temp_node = temp_node.prev
		print()

Am văzut codul listei dublu legate. Și nu există niciun cod pentru utilizarea clasei de listă dublu legată. Asta e pentru tine. Utilizați clasa de listă cu legături duble, similară listei cu legături simple. Distreaza-te 🙂

Concluzie

Puteți găsi multe probleme pe baza listelor legate. Dar, trebuie să cunoașteți implementarea de bază a link-ului pe care l-ați învățat în acest tutorial. Sper că v-ați distrat de minune învățând noul concept.

Codare fericită 🙂