Programa en lenguaje C sobre lista enlazada
#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); p>
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!"); p>
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); p>
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; p> 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); }