Estructura de datos y diseño de algoritmos - Inserción de cabeza y cola de listas enlazadas

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;
}

Supongo que te gusta

Origin blog.csdn.net/qq_46061085/article/details/120471862
Recomendado
Clasificación