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.