Cómo crear una lista enlazada en la programación c
En la programación C, si desea agregar una segunda estructura para codificar ya ha creado, cree una lista enlazada - una serie de estructuras que contienen punteros a la otra. Junto con los datos básicos en una estructura, la estructura contiene un puntero, que contiene la dirección de la siguiente estructura en la lista.
Con un poco de malabarismo inteligente de nombres de puntero, más un NULL para tapar el final de la lista, que podría terminar con algo similar al código fuente en un primitivo Ejemplo-List Vinculado.
Un PRIMITIVO Ejemplo-lista enlazada
#include #include #include int main () {struct población {símbolo char [5] -INT cantidad-float precio-struct existencia * siguiente -} - estructura de la * primera estructura social * actual estructura de la nueva * - / * Crear la estructura en la memoria * / primera = (struct existencia *) malloc (sizeof (struct existencias)) - si (primera == NULL) {puts ("Algún tipo de malloc () error") - la salida (1) -} / * Asignar estructura de datos */current=first-strcpy(current->symbol,"GOOG")-current->quantity=100-current->price=801.19-current->next=NULL-new=(struct existencia *) malloc (sizeof (struct existencias)) - si (nuevo == NULL) {puts ("Otra malloc () error")-exit(1)-}current->next=new-current=new-strcpy(current->symbol,"MSFT")-current->quantity=100-current->price=28.77-current->next=NULL-/* Base de datos de pantalla * / puts ("Inversiones Portfolio")-printf("SymboltSharestPricetValuen")-current=first-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-current=current->next-printf("%-6st%5dt%.2ft%.2fn",current->symbol,current->quantity,current->price,current->quantity*current->price)-return(0)-}
Este código fuente es bastante largo, pero simplemente crea una segunda estructura, vinculado a la primera. No deje que la longitud del código fuente te intimide.
Líneas 13 a 15 declaran los punteros de tres estructura estándar que se requieren para una lista enlazada de baile. Tradicionalmente, son nombrados primero, actualizada y nueva. Juegan en el cuarto miembro en la estructura, al lado, que se encuentra en la línea 11, que es un puntero estructura.
No utilizar typedef para definir una nueva variable de estructura al crear una lista enlazada. Un primitivo Linked-List Ejemplo no utiliza typedef, así que no es un problema con el código, pero muchos programadores C utilizar typedef con estructuras. ¡Sé cuidadoso!
El nombre de la variable nueva, usada en la línea 15, es una palabra reservada en C ++, así que si quieres ser bilingüe, cambiar el nombre de la variable a new_struct o para algo que no sea la palabra nueva.
Cuando se llena la primera estructura, línea 30 asigna un puntero NULL al siguiente elemento. Ese valor NULL tapas al final de la lista enlazada.
Línea 32 crea una estructura, colocando su dirección en la nueva variable puntero. La dirección se guarda en la primera estructura en la línea 38. Así es como se mantiene la ubicación de la segunda estructura.
Líneas 40 a la 43 se llenan de información para el segundo indicador, la asignación de un valor NULL al siguiente elemento en la línea 43.
La unión se lleva a cabo como se muestran contenidos de las estructuras. Línea 48 capta la dirección de la primera estructura. Entonces Línea 54 capta la dirección del siguiente estructura dentro de la primera estructura.
Ejercicio 1: Escriba el código fuente de una primitiva Ejemplo-List Vinculado en su editor. Aunque es larga, escríbalo en porque tendrás que editarlo de nuevo más tarde (si no estás acostumbrado a que a estas alturas). Genere y ejecute.
A diferencia de las matrices, estructuras en una lista enlazada no están numeradas. En su lugar, cada estructura está vinculada a la siguiente estructura en la lista. Como siempre que se sepa la dirección de la primera estructura, se puede trabajar a través de la lista hasta el final, que se caracteriza por un valor NULL.
Un primitivo Ejemplo-List Vinculado muestra algún código fuente descuidada con un montón de código repetido. Cuando vea múltiples declaraciones como esta en su código, usted debe pensar de inmediato " # 148 funciones.;
UN EJEMPLO-lista enlazada MEJOR
#include #include #include #define ARTÍCULOS 5struct población {símbolo char [5] -INT cantidad-float precio-struct existencia * siguiente -} - estructura de la * primera estructura social * actual estructura social * nueva estructura social * make_structure (void) fill_structure -void (estructura social * a, int c) show_structure -void (struct existencia * a) -INT main () {int x-for (x = 0-xnext = new corriente = recién} fill_structure ( , x + 1) Corriente -} current-> siguiente = NULL - / * Pantalla de base de datos * / puts ("Cartera de Inversión") - printf ("El símbolo tShares tPrice TValue n") - actual = primer tiempo ( actual) {show_structure (actual) -actual = current-> next-} return (0) -} struct existencia * make_structure (void) {struct existencia * aa = (struct existencia *) malloc (sizeof (struct existencias)) - si (a == NULL) {puts ("Algún tipo de malloc () error") - la salida (1) -} return (a) -} void fill_structure (estructura social * a, int c) {printf ("Artículo #% d /% d: n ", c, ARTÍCULOS) -printf (" Símbolo de: ") -scanf ("% s ", a-> símbolo) -printf (" Número de acciones: ") -scanf ("% d ", a-> cantidad) -printf (" Precio de la acción: ") -scanf ("% f ", a-> precio) -} void show_structure (struct existencia * a) {printf ("% - 6s t% 5d t% .2f t% .2f n ", a-> símbolo, a-> cantidad, a-> precio, a-> cantidad * a-> precio) -}
Listas más vinculados se crean como se muestra en A Better Linked-List Ejemplo. La clave es utilizar tres variables de estructura, que se muestran en las líneas 13 a 15:
primero siempre contiene la dirección de la primera estructura en la lista. Siempre.
actual contiene la dirección de la estructura que se está trabajando, lleno de datos, o se muestra.
nueva es la dirección de una nueva estructura creada por el uso de la función malloc ().
Línea 7 declara la estructura de la población como global. De esa manera, se puede acceder desde las diversas funciones.
El bucle entre las líneas 25 y 39 crea nuevas estructuras, que los une. La estructura inicial es especial, por lo que su dirección se guarda en la línea 30. De lo contrario, una nueva estructura se asigna, gracias a la función make_structure ().
En la línea 35, la estructura anterior es updated- el valor de la corriente no se cambia hasta la línea 36. Antes de que eso ocurra, el puntero en la estructura actual se actualiza con la dirección de la siguiente estructura, nuevo.
En la línea 40, al final de la lista enlazada se caracteriza por restablecer el nuevo puntero en la última estructura a un NULL.
El bucle while en Línea 46 muestra todas las estructuras en la lista enlazada. La condición del bucle es el valor del puntero actual. Cuando se encuentra el NULL, el bucle se detiene.
El resto del código que se muestra en un ejemplo de la lista enlazada Mejor consta de funciones que son bastante auto-explicativo.
Ejercicio 2: Copia el código de un mejor ejemplo-List Vinculado en el editor. Genere y ejecute.
Tome nota de las declaraciones scanf () en la función fill_structure (). Recuerde que el -> es el " peeker " notación para un puntero. Para obtener la dirección, debe anteponer la variable con un en la función scanf ().