#include <stdio.h> #include <la iostream> #include <easyx.h> #include <la graphics.h> #include <Lista> // declarar doblemente enlazada lista de nodos struct Nodo { int X; int Y; el Nodo * Siguiente; // definición de un puntero estructura al siguiente nodo del nodo actual; el nodo * PREV; // definición de una estructura en un puntero al nodo actual; }; // lista doblemente enlazada declarar estructura de almacenamiento de puntero struct LinkList // bis estructura de lista enlazada; { el nodo* Head; // definir un puntero nodo principal; el Nodo * cola; // nodo define el final de un puntero nodo hijo; int tamaño; // definir una variable para contener el número de nodos en la lista doblemente enlazada; }; // 1. inicializar un bis nodo de lista; el nodo * la CreateNode ( int x, int Y) // crear una lista doblemente enlazada de nodos secundarios; { el nodo * TEMP = (el nodo *) el malloc ( el sizeof (el nodo)); TEMP -> x = x; // la asignación x x a la estructura; TEMP-> = y y; // y asignar a la estructura y; TEMP-> la Siguiente = NULL; // puntos de nodo delantero y trasero a una dirección de vacío; TEMP-> prev = NULL; devolver la TEMP; // serán creados la estructura de retorno; } // 2. enlace de dos nodos; void node_link (n1 * el nodo, el nodo * N2) { n1 -> siguiente = N2; // a punto al siguiente nodo N1, N2 N2-> PREV = n1 ; // a punto para el nodo N2, un N1 } // 3. inicializado vaciar lista doblemente enlazada; vacío Linklist_init (Lista de enlaces * Lista) { Lista -> cabeza = NULL; // puntero de cabeza es NULL; lista-> cola = NULL; // puntero de cola también es nula; lista-> size = 0 ; // definir variables para contener la el número de nodos en el nodo; } void push_head (lista lista de enlaces *, int X, int Y) { iF (lista-> tamaño == 0 ) // determina si el puntero de lista de cabeza doblemente enlazada es nulo, entonces el nuevo actual el primer nodo { Lista -> cabeza = la CreateNode (X, Y); Lista-> = cola lista-> cabeza; // Desde se crea el primer nodo, a continuación, el primer nodo y un nodo está vacía; lista-> size = 1 ; // lista doblemente enlazada almacenada en el tamaño de los ganglios se convierte en 1; } la otra cosa { el nodo * la TEMP CreateNode = (X, Y); // crear una lista de nodos doblemente enlazada node_link (TEMP, lista-> cabeza); // lista doblemente enlazada porque el soporte de la cabeza, el nodo cuando el anterior paso de parámetros , lista después de la lista lista-> cabeza = TEMP; // cabeza del nodo de cabecera se convierte en TEMP lista-> tamaño ++; // número de bis lista de nodos hecho +1; } } void push_end (lista de enlaces lista *, int X, int Y) { SI (lista-> == tamaño0 ) { Lista -> cabeza = la CreateNode (X, Y); Lista -> cola = lista-> cabeza; // Desde se crea el primer nodo, a continuación, el primer nodo y un nodo está vacía; lista-> Tamaño = 1 ; // lista doblemente enlazada almacenada en el tamaño de los ganglios se convierte en 1; } la otra cosa { el nodo * TEMP = la CreateNode (X, Y); node_link (lista -> cola, TEMP); // doble lista enlazada desde montado la cola , el nodo en la referencia de transmisión, la lista de la parte delantera lista-> cola = TEMP; // nodo original se convierte en el final de la lista TEMP lista-> tamaño ++; // número 1 doblemente enlazadas nodos lista; } } // cabeza empieza a imprimir lista doblemente enlazada * Print_list_head LinkList (LinkList * Lista) { SI (lista-> cabeza == NULL) de retorno Lista; el Nodo * TEMP = lista-> cabeza; // aplicación de un puntero al nodo principal de ese tiempo (! TEMP = NULL) // determina la corriente si el nodo está vacía, si no se sale del bucle { el printf ( " % D% D-> " , TEMP-> X, TEMP-> Y); temp = TEMP-> siguiente; // el puntero a un nodo en la temp } el printf ( " NULL \ n " ); } vacío de prueba (* Lista de enlaces Lista) { el tiempo ( 1.) { Para (Nodo * temp = lista-> cabeza;! Temp = NULL; temp = TEMP-> siguiente) { printf ( " % d,% d-> " , TEMP-> x, TEMP-> y); } Para (Nodo * temp = lista-> cola; temp = NULL;! Temp = TEMP-> prev) { printf ( " % d,% d-> " , TEMP-> x, TEMP-> y); } Sleep ( 1000 ); } } // 从尾部向前打印双链表 Lista de enlaces * print_list_end (Lista de enlaces * lista) { si (lista-> cabeza == NULL)retorno Lista; // si el nodo principal está vacía, la lista doblemente enlazada es vaciar el Nodo * TEMP = lista-> cola; // definir un puntero de nodo para el puntero de cola nodo al mismo tiempo (! TEMP = NULL) // determina si el nodo actual está vacía { el printf ( " % D% D-> " , TEMP-> X, TEMP-> Y); temp = TEMP-> PREV; // el puntero a un nodo en la temp }; el printf ( " NULL \ n- " ); } Lista de enlaces * free_someone (Lista de enlaces Lista *, int X, int Y) { retorno Lista; } int main () { Lista de enlaces * Lista1 = (Lista de enlaces *) el malloc ( el sizeof (Lista de enlaces)); // Solicitar dinámicamente una lista doblemente enlazada; Linklist_init (Lista1); para ( int I = 1. ; I < 10 ; I ++ ) { push_head (Lista1, I, I); } Prueba (Lista1); retorno 0 ; }