Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con lista enlazada simple C

Estas en el tema de Problema con lista enlazada simple C en el foro de C/C++ en Foros del Web. Hola amigos ,vereis tengo un problema , tengo una lista enlazada con un dato que es un ano dentro y quiero ordenarla por ese año ...
  #1 (permalink)  
Antiguo 25/04/2013, 11:21
 
Fecha de Ingreso: marzo-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Problema con lista enlazada simple C

Hola amigos ,vereis tengo un problema , tengo una lista enlazada con un dato que es un ano dentro y
quiero ordenarla por ese año de menor a mayor , el dato se va leyendo de un fichero dato a dato y
tengo un insertar en la lista enlazada que lo que hace es ordenar segun voy insertando el problema que tengo
es que me lo ordena todo bien menos el primer elemento que directamente no lo ordena el codigo que tengo es el siguente:

Código:
struct dado {

int ano;
struct dado *sig;

};


typedef struct dado dados;
dados* dado2;

//nserta ordenando por ano
dados* insertar(int anos,dados* lista){

	
	dados *listaNueva,*listaAux;
	
	listaNueva=(dados* )malloc(sizeof(dados));
	if(listaNueva!=NULL){
		
		listaNueva->ano=anos;
		listaNueva->sig=NULL;

		if(lista==NULL){
			lista=listaNueva;
			
		
		}else{
		
			listaAux=lista;
			while(listaAux->sig && listaAux->sig->ano < anos){
				
				listaAux=listaAux->sig;			
				
			}//cierre while

			listaNueva->sig=listaAux->sig;		
			listaAux->sig=listaNueva;
			
		}//cierre del else
		

	}


	return lista;
}
el problema que tengo es que si de el fichero me leen los datos que son :

2012,2011,2006,1968 entre otros

y el resultado me sale 2012,1968,2006,2011

es decir me lo ordena todo bien menos el primer elemento y no se porque no ordena bien el primer elemento simplemento
lo que hace en el primer elemento es poner en la lista el primer elemento que lee y no se porque pasa eso
  #2 (permalink)  
Antiguo 26/04/2013, 14:47
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Problema con lista enlazada simple C

Solo lo he mirado por encima pero me parece que el problema lo tienes en la linea

Código:
while(listaAux->sig && listaAux->sig->ano < anos) {
Estas considerando el mismo caso tanto si no hay siguiente como si el año es menor, si se da el caso de un año mayor sin siguiente lo considera como año menor no? Si tengo un momento me lo miro, pero mientras repasa tu un poco esta linea.

Saludos
vosk
  #3 (permalink)  
Antiguo 27/04/2013, 05:44
 
Fecha de Ingreso: marzo-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Problema con lista enlazada simple C

Hola , nada no hay problema ya lo habia solucionado , era porque el while ese que dices solo trata para los datos de la lista a partir de la segundo posicion asi que llegaba el primer dato a la lista y insertaba en la primera posicion y luego ya para las demas miraba simplemente a partir de la segunda en adelante y ordenaba por eso el primer elemento nunca estaba ordenado :)
  #4 (permalink)  
Antiguo 27/04/2013, 08:18
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 7 meses
Puntos: 83
Respuesta: Problema con lista enlazada simple C

Muy bueno parece un chiste :)) Yo tampoco me habia dado cuenta de eso

Código:
while(listaAux->sig//siempre se salta el primer elemento
Saludos
vosk

Etiquetas: enlazada, int, lista, simple, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:36.