Capítulo 3: 4. Lista enlazada circular y lista doblemente enlazada

Este artículo hace referencia a la "Estructura de datos de Dahua", gracias al autor, el Sr. Cheng Jie.

Uno: Lista enlazada circular:
cambie el extremo del puntero del nodo terminal en la lista enlazada individualmente de un puntero nulo para apuntar al nodo principal, lo que hace que toda la lista enlazada individualmente forme un anillo.
Este tipo de lista enlazada individualmente se llama un lista enlazada circular única, abreviada como una lista enlazada única Lista enlazada circular (lista enlazada circular).

Ilustración:
Inserte la descripción de la imagen aquí
Dos: combine las siguientes dos listas enlazadas circulares simples:

Inserte la descripción de la imagen aquí
El proceso es el siguiente:

p = rearA->next;					// 保存A表的头结点,即① 
rearA->next = rearB->next->next;	//将本是指向B表的第一个节点(不是头结点),赋值给 rearA->next,即② 
rearB->next = p;					//将原A表的头结点赋值给 rearB->next,即③ 

free(p);							//释放p

Tres: lista enlazada doble:
en cada nodo de la lista enlazada individualmente, establezca un puntero a su nodo predecesor. Por tanto, los nodos de la lista doblemente enlazada tienen dos campos de puntero,
uno al sucesor inmediato y otro al predecesor inmediato.

/*线性表的双向链表存储结构*/
typedef struct DulNode
{
    
    
		ElemType data;
		struct DuLNode *prior;    	/*直接前驱指针*/
		struct DuLNode *next;		/*直接后继指针*/
} DulNode, *DuLinkList;

Cuatro: la lista enlazada bidireccional del nodo principal del ciclo no vacío es la siguiente: al
Inserte la descripción de la imagen aquí
igual que la vida, tienes que trabajar duro si quieres disfrutarla, y tienes que pagar el precio si quieres cosechar .
Dado que la lista de enlaces dobles tiene más estructuras de datos, como la búsqueda transversal inversa, que la lista de enlaces individuales, debe pagar un precio.
Al insertar y eliminar, debe cambiar dos variables de puntero.

Cinco: Inserción de lista de doble enlace: La
operación de inserción no es complicada, pero el orden es muy importante y no debe ser incorrecto.

Suponiendo que el nodo del elemento de almacenamiento e es s, se requieren los siguientes pasos para insertar el nodo s entre los nodos p y p-> siguiente:
Inserte la descripción de la imagen aquí

Hay cuatro pasos en total:

s->prior 		= p;		//把p赋值给s的前驱,如图中1
s->next 		= p->next;	//把p->next赋值给s的后继,如图中2
p->next->prior 	= s;		//把s赋值给p->next的前驱,如图中3
p-next 			= s;		//把s赋值给p的后继,如图中4

Técnica 1: El orden de asignación (método telescópico de doble brazo)
1. Expanda el brazo izquierdo;
2. Expanda el brazo derecho;
3. Retraiga el brazo derecho;
4. Retraiga el brazo izquierdo;
solo corresponde a las 4 flechas en la figura de arriba.

Consejo 2: Asignación de cada paso (vea la flecha que apunta)
A ------------------------------------- ----------------------------> B
El predecesor / sucesor de A (dependiendo de dónde comience la flecha desde A) = B (directo Escriba el identificación del nodo);

Seis: Eliminación de la lista de doble enlace:
Para eliminar el nodo p, solo se requieren los siguientes dos pasos: Hay
Inserte la descripción de la imagen aquí
tres pasos en total:

p->prior->next = p->next;	//把p->next赋值给p->prior的后继,如图1
p->next->prior = p->prior;	//把p->prior赋值给p->next的前驱,如图2

free(p);					//释放节点p

Nota:
1. El orden de eliminación es hacia arriba y luego hacia abajo (flecha)
2. La técnica 2 también se aplica a la eliminación;

Supongo que te gusta

Origin blog.csdn.net/yanghangwww/article/details/110305261
Recomendado
Clasificación