Red de conocimiento informático - Consumibles informáticos - Ejemplo de programación de listas enlazadas

Ejemplo de programación de listas enlazadas

typedef nodo de estructura {

int elem

nodo de estructura * siguiente

} nodo, * LinkList

Para lista enlazada L: L es apuntando a Un puntero a una estructura de nodo definida, puede usar el operador -> para acceder a los miembros de la estructura, es decir, l ​​-> Elem, y (*L) es una estructura de tipo de nodo. Puede acceder a los miembros de esta estructura utilizando el operador de punto, es decir, (*L). elem

Para LinkList *L:L es un puntero a la estructura de nodo definida, por lo que (*L) es un puntero a la estructura de nodo. Puede utilizar el operador ->; es decir (* l)->; Por supuesto, elem((* L) es una estructura de nodo, por lo que puede utilizar el operador de punto para acceder a los miembros de la estructura, es decir (**L). elem

En las operaciones de listas vinculadas, a menudo usamos listas vinculadas para cambiar los parámetros de la función de recorte. En este momento, vale la pena considerar si usar LinkList L o LinkList * L. Si una no se usa correctamente, la función. tiene errores lógicos:

Si la función cambiará el valor del puntero L y desea guardar el valor de L después de llamar a la función, entonces debe usar LinkList *L, para que el La dirección del puntero se pasa a la función y el valor del puntero puede cambiar naturalmente después de que se completa la llamada;

Si la función solo modifica el contenido al que apunta el puntero, pero no cambia. el valor del puntero, entonces LinkList L funcionará;

Demos un ejemplo específico

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

typedef int ElemType

nodo de estructura typedef{

ElemType elem

nodo de estructura * siguiente

} nodo, * LinkList

// Después de llamar a la función, L apuntará a una lista vinculada vacía, esta lista vinculada vacía cambiará el valor del puntero, así que use *. L.

void InitList(LinkList *L)

{

* L =( LinkList)malloc(sizeof(Node));

(* L)-& gt; next = NULL

}

// Borra la lista enlazada L, de modo que L vuelva a ser una lista enlazada vacía. llamado, el valor del puntero L no cambiará, solo se cambiará el contenido señalado por el puntero L (es decir, el valor de L->; siguiente)

Lista clara no válida (lista vinculada) L)

{

Lista enlazada p;

mientras(p = L-& gt; siguiente){

l-& gt; siguiente = p-& gt; siguiente;

Gratis (p);

}

//Destruir vinculado lista L, libera la memoria utilizada por la lista vinculada L y deja que el valor de L vuelva a ser NULL, lo que cambiará el valor de L, por lo que debes usar * L

void DestroyLlist(lista vinculada * L)

{

Lista enlazada p;

mientras(p = (*L)) {

(* L) =(* L) ->Siguiente;

Gratis(p);

}

Gratis(*L);

*L = NULL

}

int main()

{

Lista L = vacía;

InitList(& amp; l);

Borrar lista (L);

Destruir lista (& ampl);