ESTRUCTURA DINAMICA DE DATOS

Si buscas hosting web, dominios web, correos empresariales o crear páginas web gratis, ingresa a PaginaMX
Por otro lado, si buscas crear códigos qr online ingresa al Creador de Códigos QR más potente que existe



 

TDA


 


La lista enlazada es un TDA que nos permite almacenar datos de una forma organizada, al igual que los vectores pero, a diferencia de estos, esta estructura es dinámica, por lo que no tenemos que saber "a priori" los elementos que puede contener.

En una lista enlazada, cada elemento apunta al siguiente excepto el último que no tiene sucesor y el valor del enlace es null. Por ello los elementos son registros que contienen el dato a almacenar y un enlace al siguiente elemento. Los elementos de una lista, suelen recibir también el nombre de nodos de la lista.

	    struct lista {
gint dato;
lista *siguiente;
};

GSList

La definición de la estructura GSList o, lo que es lo mismo, un nodo de la lista, está definido de la siguiente manera:

	    struct GSList {
gpointer data;
GSList *next;
};
1

Representa el dato a almacenar. Se utiliza un puntero genérico por lo que puede almacenar un puntero a cualquier tipo de dato o bien almacenar un entero utilizando las macros de conversión de tipos.

2

Se trata de un puntero al siguiente elemento de la lista.

Las macros de conversión disponibles son las siguientes:

  • GINT_TO_POINTER ()

  • GPOINTER_TO_INT ()

  • GUINT_TO_POINTER ()

  • GPOINTER_TO_UINT ()

  • Listas doblemente enlazadas.

    Introducción.

    El TDA lista doblemente enlazada, al igual que la lista enlazada, es un TDA dinámico lineal pero, a diferencia de este, cada nodo de la lista doblemente enlazada contiene dos punteros, de forma que uno apunta al siguiente nodo y el otro al predecesor. Esta característica, permite que se pueda recorrer la lista en ambos sentidos, cosa que no es posible en las listas simples.

    La declaración del tipo lista doblemente enlazada de enteros es la siguiente:

    	    struct lista_doble {
    gint dato;
    lista_doble *siguiente;
    lista_doble *anterior;
    };
    1

    Representa el dato a almacenar, que puede ser de cualquier tipo. En este ejemplo se trataría de una lista de enteros.

    2

    Se trata de un puntero al siguiente elemento de la lista. Con este puntero se enlaza con el sucesor, de forma que podamos construir la lista.

    3

    Es un puntero al elemento anterior de la lista. Este puntero enlaza con el elemento predecesor de la lista y permite recorrerla en sentido inverso.

    Sobre este TDA se definen los mismos operadores básicos que en las listas simples.

  • GQueue: pilas y colas.

    Otra de las novedades que incorpora esta versión de GLib™ es la estructura GQueue que, junto con las funciones que la acompañan, nos proporciona la posibilidad de implementar los TDA cola y pila estándar.

    GQueue utiliza estructuras GList para almacenar los elementos. La declaración de la estructura de datos es la siguiente.

    	    struct GQueue {
    GList *head;
    GList *tail;
    guint length;
    };
    1

    Es un puntero al primer elemento de la cola.

    2

    Es un puntero al último elemento de la cola.

    3

    Esta variable almacena el número de elementos de la cola.

     

    Aunque para referirnos al TDA GQueue utilizamos el término cola, con esta misma estructura también tenemos la posibilidad de implementar el TDA pila, gracias a las funciones que lo acompañan.

    Colas

    Una cola es una estructura de datos donde el primer elemento en entrar es el primero en salir, también denominadas estructuras FIFO (First In, First Out).

    Esta estructura de datos se puede definir como una lista enlazada con acceso FIFO a la que sólo se tiene acceso al final de la lista para meter elementos y al principio de esta para sacarlos.

    Los operadores asociados a este TDA y las funciones que los implementan en GLib™ son:

    Tabla 14. Operadores asociados al TDA Cola.

    Operador Funciones asociadas a GQueue.
    Iniciar cola. GQueue* g_queue_new (void)
    Cola vacía. gboolean g_queue_is_empty (GQueue* queue)
    Consultar frente cola. gpointer g_queue_peek_head (GQueue* queue)
    Consultar final cola. gpointer g_queue_peek_tail (GQueue* queue)
    Meter void g_queue_push_tail (GQueue* queue, gpointer data)
    Sacar gpointer g_queue_pop_head (GQueue* queue)
    Vaciar cola. void g_queue_free (GQueue* queue)
    Iniciar cola.

    El operador "Iniciar cola" es el encargado de crear una nueva cola y ponerla en estado de cola vacía.

    Ejemplo 23. Creando una nueva cola.

       GQueue* cola;
    cola = g_queue_new ();
  • Pilas

    Una pila, es una estructura de datos en la que el último elemento en entrar es el primero en salir, opr lo que también se denominan estructuras LIFO (Last In, First Out).

    En esta estructura sólo se tiene acceso a la cabeza o cima de la pila.

    Los operadores asociados a este TDA y las funciones que los implementan en GLib™ son:

    Tabla 15. Operadores asociados al TDA Pila.

    Operador Funciones asociadas a GQueue.
    Iniciar pila. GQueue* g_queue_new (void)
    Pila vacía. gboolean g_queue_is_empty (GQueue* queue)
    Consultar pila. gpointer g_queue_peek_head (GQueue* queue)
    Meter. void g_queue_push_head (GQueue* queue, gpointer data)
    Sacar. gpointer g_queue_pop_head (GQueue* queue)
    Vaciar pila. void g_queue_free (GQueue* queue)
    Iniciar pila.

    El operador "iniciar pila" es el encargado de crear una nueva pila y inicializarla al estado de pila vacía.

    Ejemplo 30. Creando una nueva pila.

       GQueue* pila;
    pila = g_queue_new ();


© 2025 ESTRUCTURA DINAMICA DE DATOS

10595