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

Ps modifique mi código raramente solo funciono una vez y luego mi viejo amigo segmentation fault salio :D muchas gracias a las respuestas anteriores por cierto me sirvieron para hacerlo un poco mas simple mi código :D.

Código:
#include <stdio.h>
#include <stdlib.h>

typedef struct n{
       int dato;
       struct n *sig;
       }NODO;
 
NODO *raiz;

void insertaInicio(int d) {
  NODO *aux;
  
  aux=(NODO *)malloc(sizeof(NODO));
  aux->dato=d;
  aux->sig=NULL;
  if (raiz==NULL) raiz=aux;
  else {
    aux->sig=raiz;
    raiz=aux;
  }
}      

void imprimeLista() {
  NODO *aux;
  
  aux=raiz;
  printf("\nImprime");
  while (aux!=NULL) {
    printf("\nDato: %d", aux->dato);
    aux=aux->sig;
  }
}
void eliminar() {
	int eliminar;
	NODO *auxiliar,*anterior;
	printf("\nQue dato desea eliminar ?");
	scanf("%i",&eliminar);
	printf("\n%i",eliminar);
	auxiliar=raiz;
	anterior=raiz;
	while(auxiliar->sig!=NULL) {
		printf("\nciclo bien");
		if(auxiliar->dato == eliminar){
				printf("\nentre");
				anterior->sig=auxiliar->sig;
				free(auxiliar);
				break;
		}	
		anterior=auxiliar;
		auxiliar=auxiliar->sig;
	}
	if (eliminar==auxiliar->dato){
		
	}
}
void insertar_orden(int nuevo_valor) {
	NODO *principal,*anterior,*nuevo_nodo;
	nuevo_nodo=(NODO *)malloc(sizeof(NODO));
	anterior=raiz;
	principal=raiz;
	if (principal==NULL) {
		principal->dato=nuevo_valor;
		principal->sig=principal;
	}
	else {
		nuevo_nodo->dato=nuevo_valor;
		while (principal->sig!=NULL)
			if (principal->dato <= nuevo_nodo->dato) {
				anterior=principal;
				principal=principal->sig;
			}
			else {
				anterior->sig=nuevo_nodo;
				nuevo_nodo->sig=principal;
				raiz=nuevo_nodo;
				break;
			}
		}
}
void eliminaFinal() {
     NODO *aux;
     NODO *ant;
     
     aux=raiz; 
     ant=raiz;
     if (raiz!= NULL) {  //la lista no esta vacia
       while (aux->sig !=NULL)  {
         ant=aux;     
         aux=aux->sig;
       }       
       if (raiz->sig==NULL) {
         free(aux);    //quiere decir que la lista solo tiene un nodo
         raiz=NULL;
       }
       else {
         free(aux);
         ant->sig=NULL;
       }
     }
}

main() {
	int i,valor;
	raiz->sig=NULL;
	for (i=0;i<3;i++) {
		printf("\nDame el valor a insertar ");
		scanf("%i",&valor);
		insertar_orden(valor);
	}
	eliminar();
  imprimeLista();
  getchar();
}