¿Cuál es la diferencia entre una estructura de datos y un tipo de datos abstracto?

Un tipo de datos abstractos es una especificación (o interfaz) sobre cómo interactuar con un tipo de estructura de datos que no hace ninguna declaración sobre cómo funciona la estructura de datos.

Entonces, una lista puede describirse en términos de un tipo de datos abstractos (podemos insertar en ella, obtener el enésimo elemento, eliminar un elemento, etc.), mientras que una lista vinculada es una implementación de ese tipo de datos abstractos (implementa el especificado comportamiento al estructurar los datos como una lista vacía o un emparejamiento de un elemento de datos y otra lista vinculada). Podríamos implementar el mismo tipo de datos abstractos de lista de muchas otras maneras, por ejemplo, con una matriz o un árbol binario.

Por lo que vale, creo que la pregunta es bastante tonta, ya que rara vez se escucha una pila implementada usando una lista vinculada llamada “pila de lista vinculada”, tanto el tipo de datos abstractos como la implementación de una pila se llaman típicamente “pila”. (Lo mismo ocurre con las colas y muchas otras estructuras de datos).

ADT es una representación de un tipo de datos en términos de los valores posibles de los tipos de datos, operaciones permitidas sin preocuparse por los detalles de implicación. El término resumen aquí significa que la descripción es generalmente en términos del usuario del tipo de datos.

Sin embargo, las estructuras de datos son implementaciones concretas y están más inclinadas hacia el punto de vista del implementador.

ADT es más un concepto teórico con no todas las características compatibles con un lenguaje de programación.

Por lo tanto, apilar cuando se implementa usando un lenguaje de programación como C sería una estructura de datos, pero describirlo en términos de su comportamiento (último en entrar, primero en salir), posible conjunto de valores (pila de enteros), operación permisible (push, pop) sería considerado un ADT para la pila.

ADT es para una interfaz ( lo que hace ) lo que es una estructura de datos para una clase ( cómo lo hace ).


ADT es la imagen lógica de los datos y las operaciones para manipular los elementos componentes de los datos.

La estructura de datos es la representación real de los datos durante la implementación y los algoritmos para manipular los elementos de datos.

En resumen, ADT está en el nivel lógico y la estructura de datos está en el nivel de implementación.


¿Qué queremos decir con “nivel lógico” y “nivel de implementación”?

Tomemos un ejemplo de un simple entero de tipo de datos incorporado. A nivel lógico, los programadores de aplicaciones solo sabemos cuáles son las operaciones que puede realizar un tipo de datos entero, es decir, suma, resta, etc., pero no sabemos de qué manera se implementa realmente el tipo de datos. En el nivel de implementación, se trata de cómo se implementa el entero de tipo de datos en el nivel de la máquina, es decir, podría ser decimal codificado en binario, binario sin signo, binario de signo y magnitud, complemento de Uno y notación de complemento de Dos.


Algunos ejemplos:

ADT: Lista significa que acabamos de definir la interfaz

DS: ArrayList, LinkedList … tienen implementaciones específicas.

La lista vinculada en C / C ++ implica automáticamente crear nodos y conectarlos con punteros. También incluimos la implementación de todas las operaciones definidas. Por lo tanto, no es una idea abstracta de las cosas, sino más bien concreta y práctica .

P.ej;

  nodo de estructura
 {
       int x;      
       struct node * next;
 }; 

Otro ejemplo…

ADT: Mapa

DS: HashMap, TreeMap …

No estoy de acuerdo con Omer Zach. No creo que la implementación se llame con el mismo nombre que ADT. Es posible que no digamos “pila de lista vinculada”, pero sí decimos “pila usando una lista vinculada” donde stack es el ADT y la lista vinculada es la “implementación”. No puede llamar a la implementación (es decir, lista enlazada) igual que stack porque la estructura de datos (lista enlazada) tiene un conjunto de operaciones (DeleteNode (), InsertNode ()) completamente independiente del ADT (Stack) que las usará implementarse a sí mismo (es decir, implementar operaciones como push (), pop () …). La implementación de un ADT no hace ninguna referencia a cómo se implementa una Estructura de datos.