Tipo de datos abstractos: ADT puede definirse como un conjunto de valores de datos y operaciones asociadas que se especifican con precisión independientemente de cualquier implementación particular. Por lo tanto, un tipo de datos abstractos es una recopilación organizada de información y un conjunto de operaciones utilizadas para administrar esa información. El conjunto de operaciones define la interfaz de ADT. Mientras el ADT cumpla con las condiciones de la interfaz, realmente no importa cómo se implemente el ADT. Dado que, en ADT, los valores de datos y las operaciones se definen con precisión matemática, en lugar de como una implementación en un lenguaje de computadora, podemos razonar sobre los efectos de las operaciones, las relaciones con otros tipos de datos abstractos si un programa implementa el tipo de datos, etc.
La diferencia básica entre el tipo de datos abstractos (ADT) y el tipo de datos concreto es que este último nos permite ver la representación concreta, mientras que el primero nos oculta la representación. Un ADT puede ser ADT puro o ADT actualizable. Un ADT puro es aquel en el que todas las operaciones son funciones puras. Esto significa que las operaciones no tienen efectos secundarios. En particular, no modifican ni actualizan sus argumentos de entrada. Solo usan estos argumentos para generar resultados, que son valores nuevos de ADT (o de otros tipos). La mayoría de los tipos de concreto son puros. Por ejemplo, ninguna operación en enteros en realidad modifica un entero. En cambio, todas las operaciones como '+' producen nuevos resultados.
Un ADT actualizable es aquel en el que algunas operaciones realmente cambian los valores del ADT. Por ejemplo, supongamos que tenemos una operación llamada 'pop' que toma una pila como argumento y la modifica. ("En el lugar", "destructivamente") eliminando el elemento de mayor prioridad. Esta operación se consideraría impura y todo el ADT también sería impuro. Un ADT puede ser un ADT definido por el usuario.
Sabemos que un tipo de datos abstractos es un tipo de datos que cumple las dos condiciones siguientes:
La representación, o definición, del tipo y las operaciones están contenidas en una sola unidad sintáctica.
La representación de los objetos del tipo está oculta de las unidades de programa que usan el tipo, por lo que solo las operaciones directas posibles en esos objetos son aquellas proporcionadas en la definición del tipo.
Un tipo de datos abstractos definido por el usuario debe proporcionar:
Una definición de tipo que permite a las unidades del programa declarar variables del tipo, pero oculta la representación de estas variables.
Un conjunto de operaciones para manipular objetos del tipo.
Un ejemplo de un tipo de datos abstracto definido por el usuario es la estructura. 'C' proporciona cuatro tipos básicos: int, char, float y double. Sin embargo, 'C' también proporciona al programador la capacidad de definir sus propios tipos. La estructura es uno de esos ejemplos. Una estructura es un agregado de diferentes partes, donde cada parte es de algún tipo existente.
struct abc
{int x;
float y;
};
La definición de estructura anterior no crea ninguna variable, sino que crea un nuevo tipo. Las variables de este tipo pueden crearse de manera similar a las variables de un tipo incorporado.
struct abc a;
La palabra clave typedef nos permite crear nuevos nombres de tipo para nuestros nuevos tipos.
Por ejemplo:
typedef struct abc AB;
donde AB es un nuevo nombre de tipo que ahora se puede usar para crear nuevos tipos.
AB b;
Estructuras de datos: Las siguientes son las características de las estructuras de datos:
Contiene elementos de datos de componentes, que pueden ser atómicos u otra estructura de datos (aún un dominio).
Un conjunto de operaciones en uno o más de los elementos componentes.
Define reglas sobre cómo los componentes se relacionan entre sí y con la estructura como un todo (aserciones).
Estructuras de datos:
Una estructura de datos puede ser estática o dinámica. Una estructura de datos estática tiene un tamaño fijo. Este significado es diferente del significado del modificador estático. Las matrices son estáticas; Una vez que definimos el número de elementos que puede contener, el número no cambia. Una estructura de datos dinámica crece y se reduce en el tiempo de ejecución según lo requiera su contenido. Una estructura de datos dinámica se implementa mediante enlaces.
Las estructuras de datos se pueden clasificar además en estructuras de datos lineales y estructuras de datos no lineales. En las estructuras de datos lineales, cada componente tiene un predecesor y sucesor único, excepto el primer y el último elemento, mientras que en el caso de las estructuras de datos no lineales, no existe tal restricción, ya que los elementos se pueden organizar de la forma deseada restringida por la forma en que usamos representar tales tipos.