Red de conocimientos turísticos - Información de alquiler - Programa en lenguaje C sobre lista enlazada

Programa en lenguaje C sobre lista enlazada

// Hermanos, observen bien la diferencia entre una lista vinculada con un nodo principal y una lista vinculada sin un nodo principal. Si configura la variable global n para registrar la longitud de la lista vinculada, la función longitud () lo hará. ser redundante Al eliminar datos, puede poner n-1 e insertar datos. Simplemente coloque n+1, ¡eche un vistazo!

#include

#include

#include

typedef nodo de estructura

{

int datos;

nodo de estructura *siguiente;

}slink;

int n;

slink *creat(); //crea una tabla de cadenas

int insert(slink *head,int i,int x);

int del(slink *head,int i,int *x); //Elimina el i-ésimo nodo y devuelve el valor del nodo

Link *get(slink *head,int i);

int length( slink *head); //encuentra el i-ésimo nodo y regresa

int length( slink *head); //encuentra la longitud de la tabla de enlaces

void print(slink *head); // genera la tabla de enlaces

int main()

{

slink *head;

int de,num=0,ins,len; //de es el nodo que se eliminará de,num=0,ins,len; //de es el nodo que se eliminará, ins es el nodo que se insertará

//El número aquí debe ser un número con forma especial, no un puntero

printf("input records:\n");

head= creat();

print(head);

printf("\ningrese el número de eliminación:(\n)");

printf("\ ningrese el número de eliminación: (el número <%d)",n);

scanf("%d",&de); //falta un carácter & aquí

if (del(cabeza,de,&num )==1)

{

print(cabeza);

printf("%d",num);

}

else

printf("¡eliminar error! ");

printf("/nintroduzca el registro insertado:" );

scanf("%d",&ins);

if(insert( head,2,ins)==1)

print(head);

else

printf("¡la inserción ha fallado!");

len=length(head);

printf("la longitud es %d\n",len);

retu

rn 0;

}

slink *creat() /*Define una función que devuelve una lista enlazada con un nodo principal*//Hermano, la lista enlazada que creaste no tiene un nodo principal, pero tiene un nodo principal ¡¡¡El nodo principal de la lista vinculada de nodos no guarda datos !!!

{

deslizarse *cabeza;

deslizarse *p1,*p2;

n=0;

head=NULL;

p1=p2=(slink*)malloc(sizeof(slink));

scanf( "%d",&p1->datos);

mientras(p1->datos!=0)

{

n=n+1;

si(n==1) head=p1;

else p2->next=p1;

p2 =p1;

p1=(slink*)malloc(sizeof(slink)) ;

scanf("%d",&p1->data);

}

p2->next=NULL;

return (head );

}

int insert(slink *head,int i,int x)

{

slink *p,*pre,*q;

int j=0;

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

p ->data=x;

pre=head; /*pre apunta al nodo anterior del nodo a insertar*/

q=head->next; apunta al nodo de comparación actual*/

while(q&&j

{pre=q;

q= q->siguiente;

j++;

}

if(j!=i-1||i<1) return 0; /* Insertar sin éxito*/

else

{p->next=q /* Insertar p nodo en la lista vinculada*/

pre->next=p;

}

Devuelve 1; /* Inserción exitosa*/

}

int del( slink *head,int i,int *x) /* Elimina el i-ésimo nodo y devuelve el valor hasta x*/

{

slink *p,*q;

int j=0 ;

p=head;

while(p->next&&j

{

p=p->siguiente;

j++;

}

si(! (p->siguiente)||j>i-1) return 0; /* eliminar posición inapropiada */

q=p->siguiente /* eliminar y liberar nodo */

p->siguiente=q->siguiente;

*x=q->datos;

libre(q);

n-- ; //datos eliminados, el total n debe ser

menos 1, ¿verdad?

return 1;

}

slink *get(slink *head,int i) /*Encuentra el i-ésimo nodo*

{slink *p;

int j=0;

p=head;

mientras(p->.next&&j< i -1) /* Encuentra el nodo anterior del i-ésimo nodo**

{p=p->next; j++;}

if(!(p-> next) &&j>i-1) return NULL;

return p->next;

}

int length(slink *head) /* La longitud de la tabla de búsqueda **

{int len=0;

slink *p;

p=head /* Establecer encabezado*/

while(p){p=p->next; len++;}//Estás construyendo una tabla encadenada sin encabezado, por lo que falta uno aquí

return len;

}

void print(slink *head)

{slink *p;

printf("\ahora, estos %d registros son: \n" ,n);

p=cabeza;

if(cabeza!=NULL)

hacer

{printf( "%d \n",p->datos);

p=p->siguiente;

}mientras(p!=NULL);

}

p>