Tecnología

Inicio

Cómo crear una lista enlazada en C

En C, una lista enlazada le permite crear una lista sin decidir de antemano cuánto tiempo podría ser, y sin perder la memoria por elementos que no tenga todavía la asignación. La desventaja es que usted tiene que hacer todo el trabajo de organización y gestión de la lista en la memoria.

Instrucciones

Crear la estructura de datos

1 Elija un nombre, a continuación, utilizar typedef para definirlo. Cada lista enlazada necesitará una estructura, incluso si sólo tiene una variable:

typedef struct product_data PRODUCT_DATA;

2 Definir la estructura. El último elemento debe ser un puntero al tipo que acaba de definir, y el llamado "siguiente":

product_data struct {
int product_code;
int product_size;
PRODUCT_DATA * siguiente;
};

3 Asignar los dos punteros a esta estructura de datos, inicializar a NULL, siendo la lista de "cabeza" y "cola":

PRODUCT_DATA

products_head = NULL;
PRODUCT_DATA products_tail = NULL;

Añadir a la Lista

4 Asignar una variable temporal que es un puntero a la estructura de datos:

PRODUCT_DATA * newproduct;

5 Utilizar malloc () para crear un nuevo elemento, siempre la comprobación de un error:

if ((newproduct = malloc (sizeof (PRODUCT_DATA))) == NULL) {abortar (); }

6 Rellenar los campos del nuevo elemento. Establece su campo "próxima" a NULL:

newproduct-> product_code = Código nuevo;
newproduct-> product_size = newSize;
newproduct-> siguiente = NULL;

7 Establecer la variable de cabeza. Si la variable de cabeza es NULL, este es el primer elemento añadido a la lista, por lo que establece la variable de cabeza para señalar a la misma:

si products_head = newproduct (products_head!);

8 Prepararse para una variable diferente. En otros casos, la variable apunta a la cola del último elemento de la lista, por lo que establecen su siguiente valor para que apunte al nuevo elemento:

otra cosa products_tail-> siguiente = newproduct;

9 Actualización de la cola para que apunte al nuevo elemento último, en ambos casos:

products_tail = newproduct;

Acceder a la lista

10 Cree otra variable apuntando temporal a la estructura de datos:

* PRODUCT_DATA producto;

11 Configura la variable temporal a la variable de la cabeza:

producto = products_head;

12 Bucle a través de los elementos, la comprobación de cada uno, y luego poner la variable temporal al siguiente puntero para atravesar a la siguiente:

mientras que (producto) {if (producto-> product_code = 15) {producto = producto-> siguiente; }}

13 Compruebe si la variable es NULL. Si es así, nunca se encontró el elemento:

si el retorno 0 (producto); . De lo contrario, apunta al elemento que estabas buscando:

volver producto-> product_size;

Limpiar su trabajo

14 Desasignar la lista cuando finaliza el programa, ya que no todos los sistemas operativos van a manejar esto de forma automática.

15 Bucle mientras la variable de cabeza no es NULL:

while (products_head) {

dieciséis Almacenar su siguiente puntero de la cola en la variable temporal:

products_tail = products_head-> siguiente;

17 Desasignar el elemento:

libre (products_head);

18 Ajuste el puntero de cabecera al puntero guardó en el paso 4:

products_head = products_tail;
}

Consejos y advertencias

  • Es una buena idea para crear una función de C para añadir a la lista enlazada, a continuación, siempre usarlo en lugar de hacerlo directamente.
  • "lista doblemente enlazada" hacen eliminaciones y algunas búsquedas más eficiente mediante el uso de un "anterior" puntero a lo largo con el puntero "siguiente", pero hacen que añade menos eficiente.
  • Eliminación de la lista es similar a agregar a ella, pero tendrá que encontrar su predecesor y cambiar su siguiente puntero al siguiente puntero del elemento eliminado, sin pasar por ella, antes de desasignar ella. Eliminación de los primeros o últimos elementos requerirá actualizar las variables de cabeza o la cola en su lugar.
  • Es posible ordenar una lista enlazada C, y puede ser muy eficiente para hacerlo, ya que es sólo los punteros, no datos reales, que tiene que mover y copiar. Sin embargo, es un algoritmo complicado.