Haben Anfänger häufig Probleme mit Datenstrukturen? [geschlossen]


17

Ich mache meinen zweiten Java-Kurs. Wir geraten in Datenstrukturen. Ich habe eine Zuordnung für eine verknüpfte Liste vorgenommen und jetzt einen Stapel. Ich hatte Schwierigkeiten mit der verknüpften Liste. Der Stapel bereitete mir ein wenig Mühe, war aber viel einfacher.

Sollte ich mir Sorgen machen, mit diesen Algorithmen und Datenstrukturen Schwierigkeiten zu haben? Ich habe nur das Gefühl, dass ich es nicht wirklich begriffen habe.


Beispiel aus der Praxis
pramodc84

Antworten:


44

Ich denke, Sie dürfen es nicht akzeptieren, diese Dinge nicht zu verstehen, weil sie wirklich grundlegend sind. Davon abgesehen ist es nichts Schlechtes, wenn Sie sie nicht verstehen. Sie können einem Kind eine verknüpfte Liste erklären. Also, wenn Ihr Lehrer es versäumt hat, es Ihnen zu erklären, ist es ebenso ihre Schuld. Sie sollten sich also keine Sorgen machen, sondern versuchen, Leute zu finden, die es Ihnen erklären können. Oft ist ein Kommilitone ein weitaus besserer Lehrer als ein Vollzeitakademiker.

Denken Sie an Züge

Stellen Sie sich vor, Sie haben eine Reihe von Eisenbahnwaggons, in denen jeder Wagen genug Kapazität hat, um ein Datenelement aufzunehmen. Jeder Wagen hat an seinem Ende eine Art Haken, der an der Vorderseite eines anderen Wagens befestigt werden kann.
Dies gibt Ihnen in der Tat eine verknüpfte Liste:

  • die leere Liste: der Zug enthält keine Wagen (und trägt daher keine Daten)
  • Hinzufügen eines Elements: Fügen Sie einen neuen Wagen hinzu, der das Element vor dem Zug enthält, und haken Sie es an den Rest des Zugs an
  • Entfernen eines Elements: Suchen Sie den Wagen, der das Element enthält. Entfernen Sie es (möglicherweise benötigen Sie hier einen Kran :)), haken Sie den Wagen vorher mit dem Wagen nachher ein.
  • Ersetzen eines Elements: Suchen Sie den Wagen, der das alte Element enthält. Tauschen Sie das alte Element gegen das neue aus.
  • Einfügen eines Elements direkt nach dem anderen: Suchen Sie den Wagen, der das Element enthält, nach dem Sie einfügen möchten. Fügen Sie einen neuen Wagen dahinter ein, der entsprechend eingehakt ist (wir möchten nicht, dass der Zug auseinanderfällt), und legen Sie das neue Element hinein.

Im Gegensatz dazu könnte man sich ein Array als einen Zug mit einer bestimmten Anzahl von Wagen vorstellen, die in keiner Weise neu angeordnet werden können. Sie können lediglich die darin enthaltenen Daten ändern. Dieses Modell erklärt auch viele der Probleme, die Arrays haben:

  • Wenn Sie ein Element vor dem anderen einfügen möchten, müssen Sie alle folgenden Elemente in den nächsten Wagen verschieben.
  • Wenn Sie ein Element entfernen möchten, müssen Sie alle folgenden Elemente um einen Wagen nach vorne verschieben.
  • Wenn Sie einen Zug mit mehr Wagen benötigen, müssen Sie einen neuen bauen, da Sie nicht einfach einen Wagen voranstellen können. Auf der anderen Seite ist es viel einfacher, Wagen in einem Array zu finden, da Sie sie einfach dauerhaft nummerieren können (ihre Reihenfolge ändert sich nie).

Was den Stapel betrifft: Ein "Stapel" ist weniger eine Datenstruktur als eine Idee. Die Idee des Stapels ist, dass er sich wie ein Stapel Bücher verhält. Sie können nur Bücher auf den Stapel legen und Sie können immer nur das oberste Buch vom Stapel nehmen (zumindest, wenn die Bücher schwer genug sind).
Davon abgesehen kann eine verknüpfte Liste als Stapel verwendet werden, wenn Sie sich die Daten in den Wagen als Bücher und das Buch im ersten Wagen als obersten Stapel vorstellen.

Ich hoffe das hat dir geholfen. Vielleicht war es nicht so. Vielleicht bist du eher ein visueller Typ. In diesem Fall schlage ich vor, dass Sie jemanden finden, der gut darin ist, visuelle Erklärungen abzugeben und es Ihnen zu erklären. Es wird nicht lange dauern, aber es wird sich absolut lohnen.

Es ist in Ordnung, jetzt damit zu kämpfen. Aber es nur zu akzeptieren, ist auf lange Sicht keine Option.


2
Coole Antwort! Mir wurde klar, dass man Kindern grundlegende Datenstrukturen durch ein Flash- / anderes Spiel beibringen kann, bei dem eine Reihe von Zielen zu erfüllen sind. Die gleiche Idee von Zügen kann auch Kindern helfen, Binärzahlen zu erfassen, wenn jeder Waggon 2x größer und kleiner als sein Nachbar ist.
Job

1
Ok, jetzt wo du das hast, lass uns zu Datenstrukturen mit mehreren Links übergehen. Der Zug hat also eine Anhängerkupplung auf der Seite, die an einen anderen Wagensatz angehängt werden kann. Aber die Schiene für diese Autos rutscht neben dem ersten Gleis entlang ...
Philip

12

Ich würde nicht sagen, dass Sie sich darüber Sorgen machen sollten, aber die einfache Tatsache, dass Sie Ihre Schwachstellen anerkennen, zeigt, dass Sie genau wissen, wo Sie härter lernen müssen. Ich denke, Sie werden von dieser Einstellung gut bedient und auf lange Sicht in Ordnung sein.


6

Um meinen Lieblings-CSCI-Lehrer zu zitieren:

"Panic, but panic early."

Datenstrukturen klingen schwer, oder? Für mich klingt es abstrakt und ein bisschen komplex und vor allem ... wichtig!

Datenstrukturen sind ein wichtiger Kurs. Und es ist üblich zu kämpfen, aber weiter so! Solange du deine Wheaties isst und dabei bleibst, erreichst du den Regenbogen mit einer bagFüllung generic items darunter.


Eine frühe Panik würde bedeuten, dass Sie aussteigen? Nach Datenstrukturen gibt es auch mathematische Anforderungen, Algorithmen, OS, KI, Compiler, Rechentheorie ... es wird kein Mutter-Freak mehr einfacher, aber vielleicht hilft sogar die Tatsache, dass man kein Neuling oder Student mehr ist obwohl es immer schwieriger wird.
Job


3

Data Structures war der erste "harte" Kurs, den ich belegte. wir haben Fortran 77 anstelle von Java verwendet, aber die Konzepte sind weitgehend gleich.

Ich brauchte eine Woche länger als meine Klassenkameraden, um das Konzept einer verknüpften Liste zu entwickeln. Ich habe die Aufgabe abgelehnt, aber nach ein paar etwas frustrierenden Sitzungen mit meinem Professor hat es schließlich geklickt (buchstäblich: Ich hörte ein "Klicken" in meinem Kopf, als ich endlich verstand).

Jeder hat irgendwo in seinem CS-Lehrplan Probleme (es sei denn, er ist ein Freak). Wenn Sie verstehen, wo Ihre Schwächen liegen und wie Sie diese beheben können, müssen Sie sich wirklich keine Sorgen machen.


1
Keine Panik, weiterarbeiten und auf den Klick warten ...
NWS

2

Hatten Sie Probleme beim Verstehen der verknüpften Liste oder nur bei der Implementierung?

Es ist nicht ungewöhnlich, dass ein neuer Programmierer dort Schwierigkeiten hat, da es möglicherweise das erste Mal ist, dass Sie sich überlegen müssen, was es wirklich bedeutet, wenn Sie schreiben:

list.head = null;
Element e = new Element(...);
e.next = list.head;
list.head = e;

Ich habe mich in ALGOL / W in der gleichen Übung vertieft, weil ich die Sprachsemantik nicht ganz verstanden habe. Ein Jahr später konnte ich mich kaum erinnern, warum ich Schwierigkeiten hatte.


1

Es wird einige Bereiche der Softwareentwicklung geben, die Sie schwieriger finden als andere. Ob es sich um bestimmte Algorithmen, bestimmte Entwurfsmuster oder bestimmte Verfahren handelt, ist von Person zu Person unterschiedlich. Ich stelle fest, dass ich etwas in einem echten Programm verwenden muss, bevor ich es vollständig verstehe.

Ich wäre besorgter, wenn jemand behaupten würde, alles zu wissen und nie Probleme damit gehabt hätte, etwas zu lernen.

Persönlich schien ich nie Probleme mit verknüpften Listen zu haben, aber dann arbeitete ich 8 Jahre lang an einem Programm, das sie überall verwendete, sodass ich täglich mit ihnen arbeitete. Solange Sie wissen, wo Sie die Informationen finden, die Sie benötigen, um Ihr Gedächtnis aufzufrischen, und die Bereiche kennen, in denen Sie "Probleme" haben, sollten Sie in Ordnung sein.


Ich denke auch, dass es hilfreich wäre, wenn ich mit einem Programm interagieren könnte, das auch diese Datenstrukturen verwendet. Ich bin in der Phase, in der ich mich frage, warum diese nützlich sein sollten.
Brock

0

Ich hatte Probleme mit dem Kalkül und musste es ein zweites Mal nehmen. Das zweite Mal, als ich herausfand, dass ich schlau war, aber der erste Mathematiklehrer war im Grunde genommen nutzlos :)

Sie werden eine Menge Leute in der IT finden, die nicht gut kommunizieren können, selbst Lehrer. Auf der anderen Seite sind einige Leute in der IT wirklich großartige Schriftsteller und Kommunikationsmeister.

Manchmal kann das Lesen im Freien wirklich helfen. Die Qualität von Computerbüchern ist sehr unterschiedlich. Holen Sie sich auf Amazon und sehen Sie, welches Buch den Leuten gefällt.

Viel Glück.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.