Ruby Linked Lists

voor deze oefening zullen we een eenvoudige versie van een single linked list implementeren. Maar eerst, laten we leren wat een gekoppelde lijst is, en waarom je moet zorgen.

een gelinkte lijst een gegevensstructuur, gebruikt voor snelle en geheugenefficiënte inserties en verwijderingen. In tegenstelling tot arrays, die afzonderlijke objecten zijn, bevatten gekoppelde lijsten meerdere ‘node’ – objecten die via referenties aan elkaar zijn gekoppeld.

gekoppelde lijsten kunnen afzonderlijk of dubbel worden gekoppeld. We zullen ons concentreren op enkel gelinkte lijsten voor nu.

Singly Linked List

als gekoppelde lijsten meerdere objecten zijn die aan elkaar zijn gekoppeld, hebben we idealiter een paar verschillende objecten nodig.

  1. een LinkedList-object, dat alle objecten in de lijst bevat

  2. een Knooppuntobject, dat de gegevens voor het element bevat, evenals een verwijzing naar het volgende knooppunt in de lijst.

wacht, waarom niet arrays gebruiken?

in lagere talen zijn arrays allocatd in blokken. Daarom zijn arrays statisch van grootte en kunnen ze alleen een specifiek gegevenstype bevatten. Gekoppelde lijsten slaan gegevens op in de heap, wat betekent dat de gegevens op een ongeorganiseerde manier kunnen worden opgeslagen. Aangezien elk knooppunt naar de volgende wijst, is het nog steeds mogelijk om de lijststructuur te behouden.

aan de slag

de beste manier om te begrijpen hoe gekoppelde lijsten werken is er een te maken! Laten we dat in Ruby doen. Dit is het proces.

  1. begin met het maken van een Node Klasse. We zullen attributen hebben om de gegevens weer te geven (laten we dit @data noemen) en de verwijzing naar het volgende knooppunt (laten we dit @nextnoemen).

  2. maak een LinkedList – klasse aan. Deze klasse heeft twee waarden, @head en @tail. Deze vertegenwoordigen het begin en het einde van de lijst. Initialiseer beide nu naar nil. We hebben een lege lijst!

  3. nu om de twee klassen samen te voegen. Maak een methode aan op de LinkedList klasse met de naam insert_front. De uitdaging is om een item toe te voegen aan het begin van de lijst. Dit kan gedaan worden door een nieuwe Node aan te maken, en dan het volgende te doen:

  4. sla de waarde van @head op in een temp-variabele

  5. Stel de @head in op de nieuw aangemaakte Node. Merk op dat de referentie next momenteel nilis.

  6. denk na over wat we zouden moeten doen als we een nieuw item toevoegen aan het begin van een gekoppelde lijst. Raadpleeg het diagram (hint: we moeten iets doen met de next referentie van de nieuwe knoop)

  7. tot slot, behandelen het speciale geval van de @tail. @tail moet altijd de laatste Node in de gekoppelde lijst zijn.

  8. Maak een andere methode op LinkedList of Node genaamd to_s om de lijst naar de console af te drukken.

itereren Over gekoppelde lijsten

gebruik while loops om over gekoppelde lijsten te itereren. Terwijl lussen zijn beter dan voor lussen hier omdat gekoppelde lijsten hebben geen lengte eigenschap. In plaats van for een aantal keren te herhalen, herhalen we gewoon while onze current pointer is niet nil.

Maak een lokale variabele aan met de naam current die begint met de verwijzing naar de root-node van de lijst. Binnen de lus kun je twee dingen doen:

  1. de waarde van het huidige knooppunt openen op current.data

  2. wijs de huidige variabele naar het volgende item met current = current.next

BONUS: Maak een insert_end methode om knopen aan het einde van de lijst toe te voegen.

superbonus: Maak een veelzijdigere insert methode om ergens in de gekoppelde lijst een knooppunt toe te voegen, waardoor een index voor het nieuwe item wordt gegeven.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.