Was ist der Unterschied zwischen einem "Container" und einer "Datenstruktur"?

8

Was ist ein Container? So wie ich es verstehe:

  • Ein abstrakter Datentyp ist lediglich eine logische Beschreibung der Art und Weise, wie die Daten gespeichert werden und welche Operationen für diese Daten zulässig sind. Zum Beispiel wird ein Stapel als Datentyp mit den Operationen Push, Pop usw. und LIFO-Zugriff definiert.

  • Eine Datenstruktur ist die eigentliche Implementierung dieser abstrakten Definition. In einigen Programmiersprachen wird beispielsweise ein Stack in C ++ als std :: stack in die Standardbibliothek implementiert.

Bitte korrigieren / verbessern Sie zunächst mein aktuelles Verständnis der oben genannten Unterscheidung.

Zweitens, was genau ist ein Container? Ich höre dieses Wort oft herumgeworfen. Ist das meine Definition einer Datenstruktur?

Auch Wikipedia hat drei separate Einträge für diese Begriffe.

    
ordinary 27.06.2012, 01:15
quelle

4 Antworten

1

Sie haben in Ihren Eindrücken von ADT vs Datenstruktur Recht, obwohl sie in ziemlich großem Umfang austauschbar sind. Ein ADT ist explizit abstrakt, eine Datenstruktur ist ein allgemeinerer Begriff, der völlig abstrakt sein kann oder sich auch auf Implementierungsdetails bezieht.

Ein Container ist eine sehr abstrakte Idee, aber im Allgemeinen impliziert er (für mich sowieso) eine Art von Kapselung - in dem Sinne, dass er die Komplexität eines zugrunde liegenden Objekts maskiert oder möglicherweise eine einheitliche Schnittstelle zu einer Reihe von verschiedenen möglichen bietet darunterliegende Objekte. Es ist ein Wort, das so fest im Programmiervokabular verwurzelt ist, dass die Leute es die ganze Zeit benutzen und daher ist seine Bedeutung sehr verschwommen. ;)

    
Johansensen 27.06.2012, 01:26
quelle
1

Nichts, wirklich. Sie sind nur zwei Wörter für den gleichen Begriff, wie wir Menschen gerne tun. Afaik, der offizielle CS-Begriff, ist jedoch eine Datenstruktur und der C ++ - Standard hat spezifische C ++ - Anforderungen für Container. Im Allgemeinen sind sie jedoch gleichwertig.

    
Puppy 27.06.2012 01:19
quelle
1

Ein Container ist eine Teilmenge von Datenstrukturen. C ++ stellt spezielle Anforderungen an Container, die Implementierungen verschiedener Datenstrukturen sind.

Eine Datenstruktur ist laut wikipedia "eine besondere Art, Daten zu speichern und zu organisieren". Ein Container ist ein C ++ - Konstrukt, das eine Sammlung von Datensätzen darstellt, die ihrerseits eine Datenstruktur darstellen.

    
Robert Mason 27.06.2012 01:37
quelle
0

Wie von anderen gesagt, sind diese Begriffe so weit verbreitet, dass sie mit verschiedenen Bedeutungen verwendet werden, aber hier sind die Gebräuche, denen ich am häufigsten begegnet bin.

Datenstruktur ist ein Begriff aus der Informatik, der in einer theoretischen Diskussion ohne Bezug auf eine bestimmte Sprache verwendet werden kann. Es gibt viele Datenstrukturen, die in Büchern über Algorithmen wie Warteschlangen, Bäume, Hashtabellen usw. diskutiert werden. Eine Datenstruktur kann in nahezu jeder Sprache implementiert werden.

Container ist ein Begriff, der eher im Kontext einer bestimmten Sprache verwendet wird, wenn es eine verfügbare Bibliothek bereits implementierter Container gibt, die der Programmierer sofort verwenden kann. Mehrere eigenständige Bibliotheken können die gleiche (abstrakte) Datenstruktur (zum Beispiel eine einfach verknüpfte Liste) implementieren, jedoch mit unterschiedlichen Containern, dh unterschiedlichen Quellcodes und unterschiedlichen Namen (einer könnte "Warteschlange", ein anderer "Fifo" und ein dritter "Stapel").

Außerdem muss ein Behälter eine Möglichkeit sein, andere Arten, z. Vektor speichert Ints. Als ein Beispiel gibt es mehrere Möglichkeiten, einen Graphen im Speicher darzustellen: Adjazenzmatrix, Adjazenzlisten, Vorwärtsstern ... All dies sind Datenstrukturen, aber sie sind keine Container, da sie keine anderen Typen enthalten, sie einfach Stellen Sie die Knoten und Verknüpfungen des Graphen dar. Die von diesen Datenstrukturen gespeicherten Daten sind die Knoten und Verbindungen.

    
jrouquie 27.06.2012 14:56
quelle

Tags und Links