Red de conocimiento informático - Material del sitio web - Cómo crear una lista vinculada para agregar, eliminar, cambiar y verificar en lenguaje C

Cómo crear una lista vinculada para agregar, eliminar, cambiar y verificar en lenguaje C

#includelt;stdio.hgt;

#includelt;string.hgt;

#includelt;malloc.hgt;

//Primero, define un tipo de estudiante , que representa la información de un estudiante de la siguiente manera:

Typedef struct Student

{

int num //representa el número de estudiante

Int num; //representa el número de estudiante.p>typedef struct Student

{

int num; //representa el número de estudiante

char name[30]; /Representar nombre

puntuación flotante; //Representar puntuación

}estudiante;

/Primero defina un tipo de NODO para representar la información del nodo, como se muestra a continuación:

typedef struct node

{

student st; //representa la información de un estudiante

struct node *next; //representa un puntero a un tipo NODE

}NODE;

struct node *next; //representa un puntero de tipo NODE

}NODE.

/1. Escriba una función para construir una lista enlazada lineal con un nodo principal, donde cada nodo incluya tres campos de datos: número de estudiante, nombre y puntuación.

La forma de la función es la siguiente:

NODE *creat_link(int dirección)

{

NODE *head, *p, *tail;

int xh, i=1;

if(direction==1) //Cuando el valor de dirección es 1, el nodo recién creado se conectará a la cola

{

tail=head=(NODE *)malloc(sizeof(NODE));

head-gt; next=NULL;

printf ("Ingrese el número de estudiante del estudiante désimo: ",i);

scanf("d",amp;xh);

while(xhgt;0)// Ingresar estudiantes temporalmente desde el teclado En este caso, cuando el número de estudiante ingresado sea un número no positivo, se establecerá una lista vinculada

{

p=(NODE *)malloc (sizeof(NODE));

p- gt; st.num=xh;

printf ("Ingrese el nombre del désimo estudiante: ", i); p>

scanf ("s", p -gt; st.name);

printf ("Ingrese la puntuación del désimo estudiante: ", i) >scanf ("f", amp; p-gt ; st.nombre);

scanf ("f", amp; p-gt; st.score);

p); -gt; siguiente=NULL;

cola-gt; siguiente=p

cola=p; >i=i 1;

printf("Ingrese el número de estudiante del désimo estudiante: ", i

scanf("d", amp;

}

}

else if(direction==0) //Cuando la dirección es 0, el nodo recién creado se convertirá en el primer nodo

{

head =(NODE *)malloc( sizeof(NODE));

head-gt; next=NULL;

printf("Por favor, ingrese el número de estudiante del estudiante dth:", i);

scanf("d", amp; xh);

while(xhgt; 0)//Ingrese temporalmente al estudiante número desde el teclado Cuando sea un número no positivo, cree una lista enlazada

{

p=(NODE *)malloc(sizeof(NODE));

p-gt; st .num=xh;

printf ("Ingrese el nombre del estudiante désimo: ",

scanf ("s"); , p-gt; st.name) ;

printf ("Ingrese la puntuación del désimo estudiante: ", i

scanf ("f", amp; p); -gt; st.puntuación);

p-gt; siguiente=cabeza-gt;

siguiente=p; =i 1;

printf("Por favor

ingrese el número de estudiante del estudiante dth: ", i);

scanf ("d", amp; xh);

}

}

p>

return head;

}

//2. Escribe una función para generar el valor del campo de datos de cada nodo en el enlace anterior. lista.

La función correspondiente a esta función requiere un parámetro formal, que representa el puntero principal de la lista vinculada, y su forma es la siguiente:

void print_link(NODE *head)

{

NODO *p;

p=head-gt;next;

printf("-10s- 20s-10s\n", "número", "nombre", "puntuación");

mientras(p!=NULL)

{

printf("-10d-20s-10.1f\n ", p- gt;st.num,p-gt;st.nombre,p-gt;st.score);

p=p-gt;next;

}

//Esta función genera todos los valores de nodo de la lista vinculada a la que apunta el encabezado, en el siguiente formato:

//*Esta función genera todos los datos en la tabla lineal sq, en el siguiente formato:

Nº de estudiante Nombre Puntuación

12 Zhang Zhang 234,5

18 Li Si 987,7

.. ....... ... ... ....*//p>

}

/3. Escribe una función para eliminar un nodo en el enlace. lista

int del_link (NODE *head, char nombre[])

{

NODE *p, *p1;

p =head-gt;siguiente;

p1=head;

mientras(p!=NULL)

{

if(strcmp (p-gt;st.nombre, nombre )! = 0)

{

p1=p;

p=p-gt;siguiente;

}

else

{

descanso;

}

}

if(p!= NULL)

{

Nombre del nodo, devuelve 1 si se elimina correctamente, 0 si falla

}

//4. Escribe un algoritmo para insertar nodos en una lista enlazada

int insert(NODE *head, Student x, int wz)

{

NODO *p=cabeza;

p>

int i=0,jg;

if(wzlt;=0)

{

jg=0;

}

else

{

mientras(ilt;wz-1amp;amp; ¡pag! =NULL)

{

{

i;

p=p-gt;siguiente;

}

si(p==NULL)

{

jg=0;

}

si (i=wz-1)

{

/encuentra el nodo delante de wz y p apunta a él

NODO *q;

q=(NODO *)malloc(sizeof(NODO));

q-gt; st.num=x.num;

strcpy(q-gt;st. nombre, x.nombre);

q-gt; st.score;

q-gt; siguiente=p-gt;

siguiente;

p-gt; siguiente=q;

jg=1; >}

return jg;

// Esta función puede insertar un nuevo nodo antes del nodo wz

}

Esta función puede insertar un nuevo nodo antes del nodo wz con el campo de datos x. Devuelve 1 si la inserción es exitosa y 0 si la inserción no es exitosa.

}

//5. Escriba la función principal para llamar al programa correspondiente al algoritmo anterior, establezca la lista vinculada y genere el valor de la lista vinculada.

void main()

{

NODE *head; //definir una variable de puntero head

int wz; la posición de inserción

char xm[30];

student st; //definir una variable st para representar la información de un estudiante

head=creat_link(1) ;

print_link(head);//Llamar a una función para crear una lista enlazada y dar el valor de retorno al encabezado;

//Llamar a una función para generar el valor del nodo en la lista vinculada

//Ingrese la información de un estudiante y entréguela al miembro relevante de la variable st member

printf("\n\nIngrese la posición a insertar: ");

scanf("d",amp;wz);//Ingrese el valor de wz

printf("Ingrese el número de estudiante que se insertará:");

scanf("d",amp;st.num);

printf("Por favor, introduzca el nombre del estudiante que se insertará:");

scanf("s",amp ; st.name);

printf ("Ingrese la puntuación del estudiante que desea insertar:

scanf ("f", & st.score);

//Llame a la función para insertar el valor de st del estudiante como un nodo en la lista vinculada. Si la inserción se realiza correctamente, se generará una nueva lista vinculada.

if(insert(head, st, wz)==1)

{

printf("\n Inserción exitosa, la nueva tabla es:\n");

print_link(head);

}

else

{

printf("Inserción fallida");

}

// //, llama a una función para eliminar el valor del nodo especificado de la lista vinculada. Si la eliminación se realiza correctamente, se generará una nueva lista vinculada.

printf("Ingrese el nombre del estudiante que desea eliminar. Nombre del estudiante: "

getchar();

gets(xm);<); /p>

if(del_link(head,xm)==1)

{

printf("(n) se eliminó correctamente, la nueva tabla es: \n ");

print_link (head);

}

else

{

printf("Eliminación sin éxito");

}

}

}