Estructura de datos y algoritmo: (3) 3.2.2 eliminación de la tabla completa de la lista enlazada individualmente

Cuando no utilizamos esta lista enlazada individualmente, necesitamos liberarla en la memoria para que pueda ser utilizada por otros programas y software.

El algoritmo para eliminar toda la tabla de una lista enlazada es el siguiente:

  • Declare los nodos p y q;
  • Asigne el primer nodo ap, y el siguiente nodo (es decir, el siguiente nodo del primer nodo) a q;
  • Realice las operaciones de soltar py (después de soltar p) asignar q ap en un bucle. (Es decir, el ciclo comienza desde el encabezado de la lista enlazada individualmente y libera cada uno, y luego lo libera hacia arriba)

El código ClearList.c es el siguiente:

Status ClearList(LinkList *L)
{
   LinkList p,q;//声明了两个结点一个是p一个是q
   p=(*L)->next;//将p指向了我们L单链表的next也就是第一个结点
   
   while(p)//只要p不为NULL也就是不为假的情况下,也就是有数据的情况下有数据就为真(编程规定为0就是假,非0就是真)
   {
       q=p->next;//指向第二个
       free(p);//把第一个给释放掉
       p=q;//第二个就继承了第一个的位置
   }
   (*L)->next=NULL;//最后的化这个单链表记得指向NULL,变成一个空表。空表就是Head指向NULL嘛,整个释放完之后
   return OK;
}

¿Qué tal cambiar el código detrás? ¿No es necesario que exista q? ?

free(p);
p=p->next;

¿Cómo escribir lo anterior? Como p es un nodo, además del campo de datos, también tiene un campo de puntero.Cuando lo liberamos (p), en realidad borra y libera la memoria de todo su nodo, y necesitamos uno para borrar toda la tabla. Se elimina un nodo, por lo que necesitamos q para registrar el siguiente nodo de p.

---------para resumir

Compare las ventajas y desventajas de la estructura de lista enlazada individualmente y la estructura de almacenamiento secuencial a partir de tres aspectos del método de asignación de almacenamiento, el rendimiento del tiempo y el rendimiento del espacio:

(1) Método de asignación de almacenamiento:

La estructura de almacenamiento secuencial utiliza una unidad de almacenamiento continua para almacenar secuencialmente los elementos de datos de la tabla lineal.

La lista enlazada individualmente usa una estructura de almacenamiento en cadena y usa un conjunto de unidades de almacenamiento arbitrarias para almacenar los elementos de la tabla lineal. (Sus datos pueden estar en cualquier lugar de la memoria y el espacio en las esquinas se puede conectar para ahorrar espacio)

(2) Rendimiento del tiempo:

Encontrar aspectos:

La complejidad temporal de la estructura de almacenamiento secuencial es O (1); (siempre que haya un subíndice, podemos encontrarlo)

La lista de un solo enlace es O (n); (la lista de un solo enlace no tiene subíndice, solo su nodo predecesor conoce la dirección de su nodo sucesor, por lo que es necesario buscar uno por uno desde el primero)

Inserción y eliminación:

La estructura de almacenamiento secuencial requiere que se mueva un promedio de la mitad de los elementos de la mesa, y el tiempo es O (n).

Después de calcular el puntero en una posición determinada en la lista enlazada individualmente, el tiempo de inserción y eliminación es solo O (1).

(3) Rendimiento espacial:

La estructura de almacenamiento secuencial requiere una asignación previa de espacio de almacenamiento. Las divisiones más grandes son propensas a desperdiciar espacio y las divisiones más pequeñas son propensas a desbordarse (desbordamiento del arreglo).

La lista enlazada individualmente no necesita asignar espacio de almacenamiento, siempre que lo tenga, se puede asignar y el número de elementos no está limitado.

Para resumir las conclusiones extraídas anteriormente:

Si la tabla lineal necesita búsquedas frecuentes y rara vez se inserta y elimina, se debe adoptar la estructura de almacenamiento secuencial.

Si necesita insertar y eliminar con frecuencia, debe adoptar una estructura de lista enlazada individualmente.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/m0_37957160/article/details/107880098
Recomendado
Clasificación