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)