Datenstrukturen 101: Arrays – Eine visuelle Einführung für Einsteiger

Lernen Sie die Datenstrukturen kennen, die Sie täglich verwenden.

👋 Willkommen! Beginnen wir mit etwas lebenswichtigem Kontext. Lassen Sie mich Ihnen diese Frage stellen:
✅ Hören Sie Musik auf Ihrem Smartphone?
✅ Führen Sie eine Kontaktliste auf Ihrem Telefon?
✅ Haben Sie schon einmal eine Rangliste bei einem Wettbewerb gesehen?

Wenn Ihre Antwort auf eine dieser Fragen „ja“ lautet, dann haben Sie mit ziemlicher Sicherheit schon einmal Arrays verwendet, ohne es zu wissen! 😃 Arrays sind sehr leistungsfähige Datenstrukturen, die Listen von Elementen speichern. Sie haben unzählige Anwendungsmöglichkeiten. Sie sind sehr wichtig in der Welt der Informatik.

In diesem Artikel lernst du die Vor- und Nachteile von Arrays, ihre Struktur, ihre Operationen und ihre Anwendungsfälle kennen.

Lassen Sie uns beginnen! 👍

🔎 Tiefes Eintauchen in die Grundstruktur von Arrays

Um zu verstehen, wie sie funktionieren, ist es sehr hilfreich, sich den Arbeitsspeicher Ihres Computers als ein Gitter vorzustellen, so wie das untenstehende. Jede Information wird in einem dieser kleinen Elemente (Quadrate) gespeichert, die das Gitter bilden.

Arrays machen sich diese „Gitter“-Struktur zunutze, um Listen zusammengehöriger Informationen an benachbarten Speicherplätzen zu speichern und so eine extreme Effizienz beim Auffinden dieser Werte zu gewährleisten. 🔳🔳🔳🔳 🔳

Sie können sich Arrays folgendermaßen vorstellen:

Ihre Elemente liegen im Speicher nebeneinander. Wenn du auf mehr als eines davon zugreifen musst, ist der Prozess extrem optimiert, weil dein Computer bereits weiß, wo sich der Wert befindet.

Gut, oder? Dann wollen wir mal sehen, wie das hinter den Kulissen funktioniert! 😃

📚 Klassifizierung

Arrays werden als homogene Datenstrukturen klassifiziert, weil sie Elemente desselben Typs speichern.

Sie können Zahlen, Zeichenketten, boolesche Werte (wahr und falsch), Zeichen, Objekte und so weiter speichern. Aber sobald Sie den Typ der Werte definieren, die Ihr Array speichern soll, müssen alle seine Elemente vom selben Typ sein. Sie können nicht verschiedene Datentypen „mischen“.

👀 Werte lesen – die Magie beginnt!

Die erstaunliche Leistung von Arrays kommt von ihrer Effizienz beim Zugriff auf Werte. Dies wird durch ihre gitterartige Struktur erreicht. Schauen wir uns das genauer an.🔍

Wenn du ein Array erstellst, musst du:
– es einer Variablen zuweisen. 👈
– Definieren Sie den Typ der Elemente, die es speichern wird. 🎈
– Definieren Sie seine Größe (die maximale Anzahl der Elemente). 📚

💡 Hinweis: Der Name, den Sie dieser Variablen zuweisen, ist sehr wichtig, weil Sie ihn später in Ihrem Code verwenden werden, um auf Werte zuzugreifen und das Array zu ändern.

Aber wie können Sie dem Computer mitteilen, auf welchen bestimmten Wert Sie zugreifen möchten? Hier spielen Indizes eine wichtige Rolle!

1️⃣ Indizes

Um auf einen Wert in einem Array zuzugreifen, verwendet man einen sogenannten „Index“ (im Plural „Indizes“). Dabei handelt es sich um eine Zahl, die sich auf die Stelle bezieht, an der der Wert gespeichert ist.

Wie Sie in der folgenden Abbildung sehen können, wird das erste Element in der Matrix mit dem Index 0 bezeichnet. Wenn Sie sich weiter nach rechts bewegen, erhöht sich der Index für jede Speicherstelle um eins.

💡 Hinweis: Ich weiß, dass es zunächst seltsam erscheint, mit der Zählung bei 0 statt bei 1 zu beginnen, aber das nennt man Null-basierte Nummerierung. Es ist in der Informatik sehr verbreitet.

Die allgemeine Syntax für den Zugriff auf ein Element ist: <ArrayVariable>

Beispiel:
Wenn dein Array in der Variablen myArray gespeichert ist und du auf das erste Element (bei Index 0) zugreifen willst, würdest du myArray

2️⃣ Speicher

Nun, da du weißt, wie man auf Werte zugreift, lass uns sehen, wie Arrays im Speicher deines Computers gespeichert werden. Wenn du die Größe des Arrays festlegst, wird der gesamte Speicherplatz für zukünftige Werte, die du einfügen möchtest, „reserviert“.

💡 Hinweis: Wenn du das Array nicht mit Werten füllst, bleibt der Platz reserviert und leer, bis du es tust.

Beispiel:
Angenommen, du definierst ein Array der Größe 5, fügst aber nur einen Wert ein. Der gesamte verbleibende Platz wird leer und im Speicher „reserviert“ sein und auf künftige Zuweisungen warten.

Dies ist wichtig, weil Arrays beim Zugriff auf Werte äußerst effizient sind, weil alle Elemente in zusammenhängenden Bereichen im Speicher gespeichert werden. Auf diese Weise weiß der Computer genau, wo er die von Ihnen angeforderten Informationen finden muss.

Aber… es gibt auch einen Nachteil 😞, denn dies ist nicht speichereffizient. Sie reservieren Speicher für zukünftige Operationen, die möglicherweise nicht stattfinden. Deshalb werden Arrays in Situationen empfohlen, in denen man vorher weiß, wie viele Elemente man speichern will.

🔧 Operationen – Hinter den Kulissen!

Nun, da du weißt, was Arrays sind, wenn sie verwendet werden, und wie sie Elemente speichern, werden wir in ihre Operationen wie Einfügen und Entfernen eintauchen.

1️⃣ Einfügen – Willkommen!

Angenommen, wir haben ein Array der Größe 6 und es gibt noch einen leeren Platz. Wir wollen ein Element „e“ am Anfang des Arrays (Index 0) einfügen, aber dieser Platz ist bereits durch das Element „a“ belegt. Was sollen wir tun?

Um in Arrays einzufügen, verschieben wir alle Elemente, die sich rechts vom Einfügeort befinden, um einen Index nach rechts. Das Element „a“ befindet sich nun bei Index 1, das Element „b“ bei Index 2 und so weiter…

💡 Hinweis: Sie müssen eine Variable erstellen, um den letzten Index zu verfolgen, der Elemente enthält. Im obigen Diagramm wird das Array vor dem Einfügen bis zum Index 4 gefüllt. Auf diese Weise können Sie feststellen, ob das Array voll ist und welchen Index Sie verwenden sollten, um ein Element am Ende einzufügen.

Nachdem wir dies getan haben, ist unser Element erfolgreich eingefügt. 👏

⚠️ Moment mal! Was passiert, wenn das Array voll ist?

Was denkst du, was passiert, wenn das Array voll ist und du versuchst, ein Element einzufügen? 😱

In diesem Fall müssen Sie ein neues, größeres Array erstellen und alle Elemente manuell in dieses neue Array kopieren. Dieser Vorgang ist zeitlich sehr aufwendig. Stellen Sie sich vor, was passieren würde, wenn Sie ein Array mit Millionen von Elementen hätten! Das könnte sehr viel Zeit in Anspruch nehmen. ⏳

💡 Hinweis: Die einzige Ausnahme von dieser Regel, bei der das Einfügen sehr schnell ist, ist, wenn Sie ein Element am Ende des Arrays einfügen (an dem Index, der sich rechts vom letzten Element befindet) und noch Platz vorhanden ist. Dies geschieht in konstanter Zeit O(1).

2️⃣ Löschen- Bye, Bye!

Angenommen, man möchte ein Element aus dem Array löschen.

Um die Effizienz des wahlfreien Zugriffs zu erhalten (extrem schneller Zugriff auf das Array über einen Index), müssen die Elemente in zusammenhängenden Speicherbereichen gespeichert werden. Sie können nicht einfach ein Element löschen und den Platz leer lassen.

Sie sollten die Elemente, die nach dem zu löschenden Element kommen, um einen Index nach links verschieben.

Und schließlich haben Sie diese resultierende Anordnung 👇. Wie Sie sehen können, wurde „b“ erfolgreich gelöscht.

💡 Hinweis: Das Löschen ist sehr effizient, wenn Sie das letzte Element entfernen. Da Sie eine Variable erstellen müssen, um den letzten Index zu verfolgen, der Elemente enthält (im obigen Diagramm Index 3), können Sie dieses Element direkt über den Index entfernen.

3️⃣ Ein Element finden

Sie haben drei Möglichkeiten, ein Element in einem Array zu finden:

  • Wenn Sie wissen, wo es sich befindet, verwenden Sie den Index.
  • Wenn Sie nicht wissen, wo es sich befindet, und Ihre Daten sortiert sind, können Sie Algorithmen verwenden, um Ihre Suche zu optimieren, z. B. die binäre Suche.
  • Wenn Sie nicht wissen, wo es sich befindet, und Ihre Daten nicht sortiert sind, müssen Sie jedes Element im Array durchsuchen und prüfen, ob das aktuelle Element das gesuchte ist (siehe die nachstehende Diagrammfolge).

👋 Zusammengefasst…

  • Arrays sind extrem leistungsfähige Datenstrukturen, die Elemente desselben Typs speichern. Der Typ der Elemente und die Größe des Arrays sind fest und werden bei der Erstellung festgelegt.
  • Der Speicher wird sofort nach der Erstellung des Arrays zugewiesen und ist leer, bis Sie die Werte zuweisen.
  • Die Elemente befinden sich an zusammenhängenden Stellen im Speicher, so dass mit Hilfe von Indizes sehr effizient auf sie zugegriffen werden kann (zufälliger Zugriff, O(1) = konstante Zeit).
  • Indizes beginnen bei 0, nicht bei 1, wie wir es gewohnt sind.
  • Das Einfügen von Elementen am Anfang oder in der Mitte des Arrays erfordert das Verschieben von Elementen nach rechts. Wenn das Array voll ist, wird ein neues, größeres Array erstellt (was nicht sehr effizient ist). Das Einfügen am Ende des Arrays ist sehr effizient, konstante Zeit O(1).
  • Das Entfernen von Elementen am Anfang oder in der Mitte des Arrays beinhaltet das Verschieben aller Elemente nach links, um zu vermeiden, dass ein leerer Platz im Speicher zurückbleibt. Dadurch wird gewährleistet, dass die Elemente an zusammenhängenden Stellen im Speicher abgelegt werden. Das Entfernen am Ende des Arrays ist sehr effizient, da nur das letzte Element gelöscht wird.
  • Um ein Element zu finden, müssen Sie das gesamte Array durchsuchen, bis Sie es finden. Wenn die Daten sortiert sind, können Sie Algorithmen wie die binäre Suche verwenden, um den Prozess zu optimieren.

„Lerne aus dem Gestern, lebe für das Heute und hoffe auf das Morgen. Das Wichtigste ist, nicht aufzuhören zu fragen.“
– Albert Einstein

👋 Danke!

Ich hoffe sehr, dass dir mein Artikel gefallen hat. ❤️
Folgt mir auf Twitter, um mehr Artikel wie diesen zu finden. 😃

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.