1175: operación de lista enlazada

Tema Descripción

Hay dos listas enlazadas a y b, y los nodos en cada lista enlazada incluyen números de estudiantes y calificaciones. Es necesario fusionar las dos listas vinculadas y organizarlas en orden ascendente de números de estudiantes.

ingresar

En la primera línea, los números N y M de los dos elementos de la lista enlazada ayb están separados por espacios. Las siguientes N líneas son los datos de A y luego las M líneas son los datos de B. Cada línea de datos consta de dos partes: número de estudiante y grado

producción

Datos ordenados en orden ascendente por número de estudiante

entrada de muestra

2 35 1006 893 824 952 10

salida de muestra

2 103 824 955 1006 89

¡Inesperadamente, hoy es una actualización doble! ! !

Operación de lista enlazada, estaba confundido cuando lo hice por primera vez. Cuando se trata de lista enlazada, pienso en listas en otros idiomas.

No sé por qué pensé de nuevo en la lista enlazada en física. . .

Primero comprendamos la lista enlazada

1. El concepto de lista enlazada

definición:

La lista enlazada es un tipo de estructura de almacenamiento lineal que no es continua en el almacenamiento físico, y el orden lógico de los elementos de datos se realiza a través del orden de enlace de los punteros en la lista enlazada.

Características:

La lista enlazada consta de una serie de nodos (cada elemento de la lista enlazada se denomina nodo), y los nodos se generan dinámicamente (malloc) en tiempo de ejecución. Cada nodo incluye dos partes:

Uno es un campo de datos que almacena elementos de datos

El otro es un campo de puntero que almacena la dirección del siguiente nodo.

Por ejemplo

    typedef struct student{
     int num;
     char name[20];
     struct student *next;
     }STU;

Esta es una lista enlazada simple

Cómo usar puede ver este blog

https://blog.csdn.net/qq_61672347/article/details/125701955

Lo vi, y lo vi la primera vez que lo hice, ¡no me lo esperaba!

No hay mucho que decir, es el día de volver a cepillar las preguntas, directamente en el código de CA.

#include <stdio.h>
#include <malloc.h>
 
typedef struct Student
{
    int num;
    int grade;
    struct Student *next;
}*node,Node;
 
node a(int n);//创建链表
void sortf(node l1,node l2);//连接与排序
void print(node l);//输出
 void b(node l1,node l2)
{
    node q;
 
    q=l1;
    l2=l2->next;
 
    while(q->next!=NULL)
    {
        q=q->next;
    }
 
    q->next=l2;
    q=l1->next;
 
    node min,p;
    int t,n,g;
 
    while(q!=NULL)
    {
        p=q;
        t=p->num;
        min=p;
 
        while(p!=NULL)
        {
            if(p->num<t)
            {
                t=p->num;
                min=p;
            }
 
            p=p->next;
        }
 
        n=q->num;
        q->num=min->num;
        min->num=n;
        g=q->grade;
        q->grade=min->grade;
        min->grade=g;
        q=q->next;
    }
 
    print(l1);
}
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
 
    node head1,head2;
    head1=a(n);
    head2=a(m);
 
    b(head1,head2);
 
    return 0;
}
 
node a(int n)
{
    node h;
    h=(node)malloc(sizeof(Node));
    h->next=NULL;
 
    node p1=h,p2;
 
    int i;
    for(i=0;i<n;i++)
    {
        p2=(node)malloc(sizeof(Node));
        scanf("%d%d",&p2->num,&p2->grade);
 
        p2->next=p1->next;
        p1->next=p2;
        p1=p2;
    }
 
    return h;
}
 

 
void print(node l)
{
    l=l->next;
    node q;
    while(l!=NULL)
    {
        printf("%d %d\n",l->num,l->grade);
        q=l;
        l=l->next;
 
        free(q);
    }
}

Es sencillo"!

Recuerda darle me gusta + seguir

Actualiza todos los días, no te lo pierdas (tal vez más de un día, porque la escuela ha comenzado y estoy ocupado, a veces no actualizo, por favor, perdóname)

Supongo que te gusta

Origin blog.csdn.net/qiuweichen1215/article/details/129349303
Recomendado
Clasificación