Abstrakter Datentyp: ADT kann als ein Satz von Datenwerten und zugehörigen Operationen definiert werden, die unabhängig von einer bestimmten Implementierung genau angegeben werden. Ein abstrakter Datentyp ist also eine organisierte Sammlung von Informationen und eine Reihe von Vorgängen, mit denen diese Informationen verwaltet werden. Der Operationssatz definiert die Schnittstelle des ADT. Solange der ADT die Bedingungen der Schnittstelle erfüllt, spielt es keine Rolle, wie der ADT implementiert ist. Da in ADT die Datenwerte und Operationen nicht als Implementierung in einer Computersprache, sondern mit mathematischer Genauigkeit definiert werden, können wir über die Auswirkungen der Operationen, die Beziehungen zu anderen abstrakten Datentypen, unabhängig davon, ob ein Programm den Datentyp implementiert, nachdenken.
Der grundlegende Unterschied zwischen dem abstrakten Datentyp (ADT) und dem konkreten Datentyp besteht darin, dass der letztere es uns ermöglicht, die konkrete Darstellung zu betrachten, während der erstere die Darstellung vor uns verbirgt. Ein ADT kann ein reines ADT oder ein aktualisierbares ADT sein. Ein reiner ADT ist einer, bei dem alle Operationen reine Funktionen sind. Dies bedeutet, dass Operationen keine Nebenwirkungen haben. Insbesondere ändern oder aktualisieren sie dort keine Eingabeargumente. Sie verwenden diese Argumente nur, um eine Ausgabe zu generieren, die neue Werte von ADT (oder anderen Typen) sind. Die meisten Betontypen sind rein. Beispielsweise ändert keine Operation für Ganzzahlen tatsächlich eine Ganzzahl. Stattdessen erzeugen alle Operationen wie '+' neue Ausgaben.
Bei einem aktualisierbaren ADT ändern einige Vorgänge tatsächlich die Werte des ADT. Angenommen, wir hatten eine Operation namens 'pop', die einen Stapel als Argument genommen und geändert hat. ("An Ort und Stelle", "destruktiv") durch Entfernen des Elements mit der höchsten Priorität. Diese Operation würde als unrein angesehen, und das gesamte ADT wäre dann auch unrein. Ein ADT kann ein benutzerdefiniertes ADT sein.
Wir wissen, dass ein abstrakter Datentyp ein Datentyp ist, der die folgenden zwei Bedingungen erfüllt:
Die Darstellung oder Definition des Typs und der Operationen sind in einer einzigen syntaktischen Einheit enthalten.
Die Darstellung von Objekten des Typs ist vor den Programmeinheiten, die den Typ verwenden, verborgen, sodass nur die in der Typdefinition angegebenen direkten Operationen für diese Objekte möglich sind.
Ein benutzerdefinierter abstrakter Datentyp sollte Folgendes bereitstellen:
Eine Typdefinition, die es Programmeinheiten ermöglicht, Variablen des Typs zu deklarieren, aber die Darstellung dieser Variablen verbirgt.
Eine Reihe von Operationen zum Bearbeiten von Objekten des Typs.
Ein Beispiel für einen benutzerdefinierten abstrakten Datentyp ist die Struktur. 'C' bietet vier Grundtypen: int, char, float und double. 'C' bietet dem Programmierer jedoch auch die Möglichkeit, seine eigenen Typen zu definieren. Struktur ist ein solches Beispiel. Eine Struktur ist ein Aggregat aus verschiedenen Teilen, wobei jedes Teil von einem vorhandenen Typ ist.
struct abc
{int x;
float y;
};
Die obige Strukturdefinition erstellt keine Variablen, sondern einen neuen Typ. Variablen dieses Typs können auf ähnliche Weise wie Variablen eines eingebauten Typs erstellt werden.
struct abc a;
Mit dem Schlüsselwort typedef können wir neue Typnamen für unsere neuen Typen erstellen.
Beispielsweise:
typedef struct abc AB;
Dabei ist AB ein neuer Typname, der jetzt zum Erstellen neuer Typen verwendet werden kann.
AB b;
Datenstrukturen: Folgendes sind die charakteristischen Merkmale von Datenstrukturen:
Es enthält Komponentendatenelemente, die atomar oder eine andere Datenstruktur (immer noch eine Domäne) sein können.
Eine Reihe von Operationen an einem oder mehreren Komponentenelementen.
Definiert Regeln, wie Komponenten miteinander und mit der Struktur als Ganzes in Beziehung stehen (Assertions).
Datenstrukturen:
Eine Datenstruktur kann statisch oder dynamisch sein. Eine statische Datenstruktur hat eine feste Größe. Diese Bedeutung unterscheidet sich von der Bedeutung des statischen Modifikators. Arrays sind statisch; Sobald wir die Anzahl der Elemente definiert haben, die es aufnehmen kann, ändert sich die Anzahl nicht mehr. Eine dynamische Datenstruktur wächst und schrumpft zur Ausführungszeit je nach Inhalt. Eine dynamische Datenstruktur wird über Links implementiert.
Datenstrukturen können ferner in lineare Datenstrukturen und nichtlineare Datenstrukturen eingeteilt werden. In linearen Datenstrukturen hat jede Komponente einen eindeutigen Vorgänger und Nachfolger mit Ausnahme des ersten und des letzten Elements, wohingegen im Fall nichtlinearer Datenstrukturen keine solche Einschränkung besteht, da Elemente auf jede gewünschte Weise angeordnet werden können, die auf die Art und Weise beschränkt ist, die wir verwenden repräsentieren solche Typen.