bueno supongo que no es elcódigo más optimo pero para empezar creo que esta bn
Código:
#include<stdio.h>
#include<stdlib.h>
typedef struct n{
int dato;
struct n *sig;
}NODO;
NODO *raiz;
int inserta_orden(int nv) {
NODO *principal,*anterior,*nuevo_nodo;
nuevo_nodo=(NODO*)malloc(sizeof(NODO));
nuevo_nodo->dato=nv;
nuevo_nodo->sig=NULL;
principal=raiz;
anterior=raiz;
if (raiz==NULL) {
raiz=nuevo_nodo;
return 0;
}
if (nuevo_nodo->dato < principal->dato) {
raiz=nuevo_nodo;
raiz->sig=principal;
return 0;
}
while (principal->dato < nuevo_nodo->dato) {
if (principal->sig==NULL)
break;
anterior=principal;
principal=principal->sig;
}
if (principal->sig!=NULL) {
anterior->sig=nuevo_nodo;
nuevo_nodo->sig=principal;
}
else
principal->sig=nuevo_nodo;
}
void imprimir(int num) {
NODO *aux;
int i;
aux=raiz;
printf("\nImprime:");
for(i=0;i<num;i++) {
printf("\n%i",aux->dato);
aux=aux->sig;
}
}
int eliminar(int del) {
NODO *principal,*anterior;
if (raiz==NULL) {
printf("\nTu lista esta vacia");
return 0;
}
principal=raiz;
anterior=raiz;
if (principal->sig==NULL && principal->dato==del) {
free(principal);
raiz=NULL;
}
else {
while (principal->dato!=del&&principal->sig!=NULL) {
anterior=principal;
principal=principal->sig;
}
if (principal->dato==del)
if(principal->sig==NULL) {
anterior->sig=NULL;
free(principal);
}
else if(principal==raiz)
free(principal);
else {
anterior->sig=principal->sig;
free(principal);
}
else
printf("\nDato no encontrado");
}
}
main () {
int i,num,veces,borrar;
raiz=NULL;
printf("\nCuantos números deseas leer? ");
scanf("%i",&veces);
for(i=0;i<veces;i++) {
printf("\nDame un numero ");
scanf("%i",&num);
inserta_orden(num);
}
imprimir(num);
return 0;
}
Por cierto mi fúncion eliminar no funciono :S jahajajaja sali de un problema para entrar en otro me podrian ayudar o decirme si tengo algún error plz :)