Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/04/2010, 16:11
batiguason
 
Fecha de Ingreso: marzo-2010
Mensajes: 10
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: ayuda con listas dinamicas en C :)

Muchas gacias amigo listo ahora entendí mejor :) ahora me pregunto como podria hacer, el código esta bien pero... me he dado cuenta que en mi funcion insertar_orden inserto los nodos, ahora mi duda seria como evitar que mi nuevo nodo no se perdiera al terminar mi función, porque es lo que pasa al terminar mi función mi nuevo nodo se pierde, mi segmentation fault se libro me podrian volver a ayudar plz.

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;
	}
	else {
		if (anterior==principal)
			if (nuevo_nodo->dato < principal->dato) {
				nuevo_nodo->sig=principal;
				principal->sig=NULL;
				return 0;
			}
		    else {
				principal->sig=nuevo_nodo;
				return 0;
			}
		while (principal!=NULL && principal->dato < nuevo_nodo->dato) {
			anterior=principal;
			principal=principal->sig;
		}
			if (principal->sig!=NULL) {
				anterior->sig=nuevo_nodo;
				nuevo_nodo->sig=principal;
			}
		    else
				principal->sig=nuevo_nodo;
	}
}
void imprimir() {
	NODO *aux;
	aux=raiz;
	printf("\nImprime:");
	while (aux->sig!=NULL) {
		printf("\n%i",aux->dato);
		aux=aux->sig;
	}
}
main () {
	int i,num;
	raiz=NULL;
	for (i=0;i<3;i++) {
		printf("\nDame un numero ");
		scanf("%i",&num);
		inserta_orden(num);
	}
	imprimir();
	return 0;
}
Desde ya muchas gracias :D