Forstå implementering av koblede lister i Python

Datastrukturer spiller en nøkkelrolle i programmeringsverdenen. De hjelper oss med å organisere dataene våre på en måte som kan brukes effektivt.

I denne opplæringen skal vi lære om den enkeltlenkede listen og den dobbeltlenkede listen.

En koblet liste er en lineær datastruktur. Den lagrer ikke dataene i sammenhengende minneplasseringer som matriser. Og hvert element i linked kalles en node, og de kobles sammen ved hjelp av pekerne. Den første noden i den koblede listen kalles hodet.

Størrelsen på den koblede listen er dynamisk. Så vi kan ha et hvilket som helst antall noder vi vil med mindre lagringen er tilgjengelig i enheten.

Det finnes to typer koblede lister. La oss se den detaljerte opplæringen om dem én etter én.

#1. Enkeltlenket liste

En enkeltlenket liste inneholder en enkelt peker koblet til neste node i den koblede listen. Vi må lagre dataene og pekeren for hver node i den koblede listen.

Den siste noden i den koblede listen inneholder null som neste peker for å representere slutten på den koblede listen.

Du kan se illustrasjonen av en lenket nedenfor.

Nå har vi en full forståelse av en enkeltlenket liste. La oss se trinnene for å implementere det i Python.

Enkeltkoblet listeimplementering

1. Det første trinnet er å lage noden for den koblede listen.

Hvordan lage den?

I Python kan vi enkelt lage noden ved å bruke klassen. Klassen inneholder data og en peker for neste node.

Se på koden for noden.

class Node:

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

		## next pointer
		self.next = None

Vi kan lage noden med alle typer data ved å bruke klassen ovenfor. Vi får se det om litt.

Nå har vi noden med oss. Deretter må vi lage en koblet liste med flere noder. La oss lage en annen klasse for en koblet liste.

  12 syntetiske overvåkingsverktøy for din nettvirksomhet

2. Lag en klasse kalt LinkedList med head initialisert til None. Se koden nedenfor.

class LinkedList:

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

3. Vi har Node- og LinkedList-klasser med oss. Hvordan setter vi inn en ny node i den koblede listen? Et enkelt svar kan være å bruke en metode i LinkedList-klassen. Ja, det ville vært fint. La oss skrive en metode for å sette inn en ny node i den koblede listen.

For å sette inn en ny node i den koblede listen, må vi følge visse trinn.

La oss se dem.

  • Sjekk om hodet er tomt eller ikke.
  • Hvis hodet er tomt, tilordne den nye noden til hodet.
  • Hvis hodet ikke er tomt, hent den siste noden i den koblede listen.
  • Tilordne den nye noden til den siste noden neste pekeren.

La oss se koden for å sette inn en ny node i den koblede listen.

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

Hurra! vi har fullført metoden for å sette inn en ny node i den koblede listen. Hvordan kan vi få tilgang til nodedataene fra den koblede listen?

For å få tilgang til dataene fra den koblede listen, må vi iterere gjennom den koblede ved å bruke neste peker slik vi gjør for å få den siste noden i innsettingsmetoden. La oss skrive en metode i LinkedList-klassen for å skrive ut alle nodedata i den koblede listen.

4. Følg trinnene nedenfor for å skrive ut alle nodedata i den koblede listen.

  • Initialiser en variabel med hode.
  • Skriv en løkke som itererer til vi når slutten av den koblede listen.
    • Skriv ut nodedataene.
    • Flytt neste peker
  Slik utfører du WeChat-nettpålogging uten telefon

La oss se koden.

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

Puh! vi fullførte opprettelsen av den koblede med nødvendige metoder. La oss teste den koblede listen ved å instansiere den med noen data.

Vi kan lage noden med Node(1)-kode. La oss se den fullstendige koden for implementeringen av den koblede listen sammen med eksempelbruken.

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

Kjør programmet ovenfor for å få følgende resultat.

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

Det er det for den koblede listen. Nå vet du hvordan du implementerer en enkeltlenket liste. Du kan enkelt implementere den dobbeltlenkede listen med kunnskap om den enkeltlenkede listen. La oss dykke inn i neste del av opplæringen.

#2. Dobbeltkoblet liste

En dobbeltlenket liste inneholder to pekere koblet til forrige node og neste node i den koblede listen. Vi må lagre dataene og to pekere for hver node i den koblede listen.

Den forrige pekeren til den første noden er null og den neste pekeren til den siste noden er null for å representere slutten på den koblede listen på begge sider.

  Legg til nye ord eller rediger gjeldende ord i nettleserens ordbok

Du kan se illustrasjonen av en lenket nedenfor.

Den dobbeltkoblede listen har også lignende trinn som den enkeltkoblede listen i implementering. Igjen å forklare de samme tingene vil være kjedelig for deg. Gå gjennom koden i hvert trinn, og du vil forstå den veldig raskt. La oss gå.

Dobbel lenket listeimplementering

1. Opprette en node for den dobbeltkoblede listen med forrige nodepeker, data og neste nodepeker.

class Node:

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

		## data of the node
		self.data = data

		## next pointer
		self.next = None

2. Dobbeltkoblet listeklasse.

class LinkedList:

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

3. En metode for å sette inn en ny node i den dobbeltkoblede listen.

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. En metode for å vise de dobbeltkoblede listedataene.

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

Vi har sett koden til den dobbeltkoblede listen. Og det er ingen kode for bruken av den dobbeltkoblede listeklassen. Det er til deg. Bruk den dobbeltkoblede listeklassen som ligner på den enkeltlenkede listen. Ha det gøy 🙂

Konklusjon

Du kan finne mange problemer basert på koblede lister. Men du må kjenne til den grunnleggende implementeringen av de koblede som du har lært i denne opplæringen. Håper du hadde en flott tid å lære det nye konseptet.

Lykke til med koding 🙂