Uno: Los componentes de la lista enlazada
La lista enlazada se compone de varios nodos, y cada nodo se divide en dos partes: el campo de datos y el campo de puntero. El campo de datos se utiliza para almacenar elementos de datos, y el puntero almacena la dirección del siguiente nodo (próximos datos) para facilitar la búsqueda de datos.
struct Link{
int date;
struct Link *next;
};
Dos: Crear una lista enlazada
1. Creación del método de inserción de la cola
struct Link * create_Link_tail(struct Link *head)
{
struct Link* tail = (struct Link*)malloc(sizeof(Link));
tail = head;
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
tail->next=temp;
tail = temp;
}
tail->next =NULL;
return head;
}
Cree un puntero de transición que sea exactamente igual que el puntero principal entrante, siempre apuntando al nuevo nodo temporal (es decir, siempre apuntando al final de la lista vinculada), y puede agregar un nuevo nodo detrás del puntero principal sin moverse el puntero de la cabeza.
2. Método de inserción de la cabeza
struct Link* create_Link_head(struct Link* head)
{
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
temp->next = head->next;
head->next = temp;
}
return head;
}
El siguiente puntero del nodo recién creado apunta a encabezado->siguiente (es decir, el primer nodo de enlace), luego el nodo recién creado se convierte naturalmente en el nuevo primer nodo, es decir, encabezado->siguiente.
Tres: recorrido de lista enlazada
void traverse_Link(struct Link* head) //遍历链表
{
struct Link* ptr = (struct Link*)malloc(sizeof(Link));
ptr = head->next;
while(ptr!=NULL)
{
cout<<ptr->date<<endl;
ptr = ptr->next;
}
}
Cree un puntero temporal para apuntar a la cabeza->siguiente, es decir, el primer elemento, la cabeza es la cabeza, no el primero. Luego use el ciclo while para juzgar si ptr está vacío, si no, saque el valor de la fecha dentro y salga del ciclo si está vacío, y el recorrido finaliza.
Cuatro: Resumen
La lista enlazada y mi código anterior son muy simples y fáciles de entender. Si no lo entiende, puede probar este método: Si crea un nodo: Enlace jiedian1; el siguiente nodo de este nodo es jiedian2. Memorización de memoria: jiedian->siguiente se refiere a jiedian2, es decir, jiedian1->siguiente->fecha es jiedian2->fecha. Recuerde mirar el código y será obvio.
Todo el código es el siguiente:
#include <iostream>
using namespace std;
struct Link{
int date;
struct Link *next;
};
struct Link * create_Link_tail(struct Link *head)
{
struct Link* tail = (struct Link*)malloc(sizeof(Link));
tail = head;
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
tail->next=temp;
tail = temp;
}
tail->next =NULL;
return head;
}
struct Link* create_Link_head(struct Link* head)
{
int len;
cout<<"len:"<<endl;
cin>>len;
for(int i=0;i<len;++i)
{
struct Link* temp = (struct Link*)malloc(sizeof(Link));
cin>>temp->date;
temp->next = head->next;
head->next = temp;
}
return head;
}
void traverse_Link(struct Link* head) //遍历链表
{
struct Link* ptr = (struct Link*)malloc(sizeof(Link));
ptr = head->next;
while(ptr!=NULL)
{
cout<<ptr->date<<endl;
ptr = ptr->next;
}
}
int main(int argc, char const *argv[])
{
struct Link *Head = (struct Link*)(malloc(sizeof(Link)));
create_Link_head(Head);
traverse_Link(Head);
return 0;
}