in

Tipos de datos abstractos – GeeksforGeeks

gfg 200x200 min

El tipo de datos abstractos (ADT) es un tipo (o clase) para objetos cuyo comportamiento está definido por un conjunto de valores y un conjunto de operaciones.

La definición de ADT solo menciona qué operaciones se realizarán pero no cómo se implementarán estas operaciones. No especifica cómo se organizarán los datos en la memoria y qué algoritmos se utilizarán para implementar las operaciones. Se llama «abstracto» porque ofrece una vista independiente de la implementación. El proceso de proporcionar solo lo esencial y ocultar los detalles se conoce como abstracción.

ADT

El usuario del tipo de datos no necesita saber cómo se implementa ese tipo de datos, por ejemplo, hemos estado usando valores primitivos como tipos de datos int, float, char solo con el conocimiento de que estos tipos de datos pueden operar y ejecutarse sin ningún tipo de idea de cómo se implementan. Por lo tanto, un usuario solo necesita saber qué puede hacer un tipo de datos, pero no cómo se implementará. Piense en ADT como una caja negra que oculta la estructura interna y el diseño del tipo de datos. Ahora definiremos tres ADT, a saber, List ADT, Stack ADT, Queue ADT.

  1. Lista ADT
    • Los datos generalmente se almacenan en una secuencia de teclas en una lista que tiene una estructura de encabezado que consta de contar, punteros y dirección de la función de comparación necesario para comparar los datos de la lista.

      ListADTStructure

    • El nodo de datos contiene el puntero a una estructura de datos y un puntero autorreferencial que apunta al siguiente nodo de la lista.

      typedef struct node

      {

       void *DataPtr;

       struct node *link;

      } Node;

      typedef struct

      {

       int count;

       Node *pos;

       Node *head;

       Node *rear;

       int (*compare) (void *argument1, void *argument2)

      } LIST; 

    • los Lista de funciones de ADT se da a continuación:

      ListADTFunctions

    Una lista contiene elementos del mismo tipo dispuestos en orden secuencial y las siguientes operaciones se pueden realizar en la lista.

    • get (): devuelve un elemento de la lista en cualquier posición dada.
    • insert (): inserta un elemento en cualquier posición de la lista.
    • remove (): elimina la primera aparición de cualquier elemento de una lista no vacía.
    • removeAt (): elimina el elemento en una ubicación específica de una lista no vacía.
    • replace (): reemplaza un elemento en cualquier posición por otro elemento.
    • size (): devuelve el número de elementos de la lista.
    • isEmpty (): devuelve verdadero si la lista está vacía; de lo contrario, devuelve falso.
    • isFull (): devuelve verdadero si la lista está llena; de lo contrario, devuelve falso.
  2. Apilar ADT
    • En la implementación de Stack ADT, en lugar de almacenar los datos en cada nodo, se almacena el puntero a los datos.
    • El programa asigna memoria para el datos y Dirección se pasa a la pila ADT.

      StackADT

    • El nodo principal y los nodos de datos están encapsulados en el ADT. La función que llama solo puede ver el puntero a la pila.
    • La estructura del cabezal de la pila también contiene un puntero a cima y contar del número de entradas actualmente en la pila.

      typedef struct node

      {

       void *DataPtr;

       struct node *link;

      } StackNode;

      typedef struct

      {

       int count;

       StackNode *top;

      } STACK;

    Una pila contiene elementos del mismo tipo dispuestos en orden secuencial. Todas las operaciones tienen lugar en un solo extremo que está en la parte superior de la pila y se pueden realizar las siguientes operaciones:

    • push (): inserta un elemento en un extremo de la pila llamado top.
    • pop (): elimina y devuelve el elemento en la parte superior de la pila, si no está vacío.
    • peek (): devuelve el elemento en la parte superior de la pila sin quitarlo, si la pila no está vacía.
    • size (): devuelve el número de elementos de la pila.
    • isEmpty (): devuelve verdadero si la pila está vacía; de lo contrario, devuelve falso.
    • isFull (): devuelve verdadero si la pila está llena; de lo contrario, devuelve falso.
  3. Cola ADT
    • El tipo de datos abstractos de cola (ADT) sigue el diseño básico del tipo de datos abstractos de pila.

      QueueADT

    • Cada nodo contiene un puntero vacío al datos y el puntero de enlace al siguiente elemento de la cola. La responsabilidad del programa es asignar memoria para almacenar los datos.

      typedef struct node

      {

       void *DataPtr;

       struct node *next;

      } QueueNode;

      typedef struct

      {

       QueueNode *front;

       QueueNode *rear;

       int count;

      } QUEUE;

    Una cola contiene elementos del mismo tipo dispuestos en orden secuencial. Las operaciones se realizan en ambos extremos, la inserción se realiza al final y la eliminación se realiza en la parte delantera. Se pueden realizar las siguientes operaciones:

    • enqueue (): inserta un elemento al final de la cola.
    • dequeue (): elimina y devuelve el primer elemento de la cola, si la cola no está vacía.
    • peek (): devuelve el elemento de la cola sin eliminarlo, si la cola no está vacía.
    • size (): devuelve el número de elementos en la cola.
    • isEmpty (): devuelve verdadero si la cola está vacía; de lo contrario, devuelve falso.
    • isFull (): devuelve verdadero si la cola está llena; de lo contrario, devuelve falso.

A partir de estas definiciones, podemos ver claramente que las definiciones no especifican cómo se representarán estos ADT y cómo se llevarán a cabo las operaciones. Puede haber diferentes formas de implementar un ADT, por ejemplo, el ADT de lista se puede implementar usando matrices, o lista enlazada individualmente o lista enlazada doblemente. De manera similar, la pila ADT y la cola ADT se pueden implementar utilizando matrices o listas enlazadas.

Referencia: https://en.wikipedia.org/wiki/Abstract_data_type

Este artículo es una contribución de Anuj Chauhan. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contrib.geeksforgeeks.org o envíe su artículo por correo electrónico a contrib@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Obtenga todos los conceptos importantes de DSA con el Curso autodidacta de DSA a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

En caso de que desee asistir clases en vivo con expertos, consulte Clases en vivo de DSA para profesionales que trabajan y Programación competitiva en vivo para estudiantes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

python – ¿Cómo funciona collections.defaultdict?

600px Alligator vs Crocodile

Cocodrilo vs Cocodrilo – Diferencias explicadas (con videos e imágenes)