Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ordenación

Estas en el tema de Ordenación en el foro de Programación General en Foros del Web. Esto va de ordenación de una lista (siguiendo con el tema de mi post anterior, qué le vamos a hacer ). El caso es que ...
  #1 (permalink)  
Antiguo 22/03/2005, 05:26
 
Fecha de Ingreso: noviembre-2004
Mensajes: 28
Antigüedad: 19 años, 6 meses
Puntos: 0
Ordenación

Esto va de ordenación de una lista (siguiendo con el tema de mi post anterior, qué le vamos a hacer ). El caso es que no me funciona y no sé por qué, ¿veis dónde puede estar el error?

short sw;
do
{
for(nuevo=primero,sw=0;nuevo->sig!=0;nuevo=nuevo->sig)
{
ultimo=nuevo->sig;
if(nuevo->n > ultimo->n)
{
aux=ultimo->n;
ultimo->n=aux;
sw=1;
}
}
}
while(sw==1);
}
  #2 (permalink)  
Antiguo 22/03/2005, 08:34
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Pone todo el codigo por favor, especialmente que son nuevo, primero y ultimo (supongo que punteros a nodo) y a que estan inicializados.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/03/2005, 09:13
 
Fecha de Ingreso: noviembre-2004
Mensajes: 28
Antigüedad: 19 años, 6 meses
Puntos: 0
Ok, ahí va el programa entero :-)

#include<stdio.h>
#include<conio.h>
#include<alloc.h>

visualizar();
clasificar();

struct nodo
{
short n;
struct nodo *sig;
};

short aux;
struct nodo *nuevo, *ultimo, *primero=0;

void main(void)
{
clrscr();
printf("Introducir numero o 0 para terminar: ");
scanf("%d",&aux);

while(aux!=0)
{
nuevo=(struct nodo*)malloc(sizeof(struct nodo));
nuevo->n=aux;
nuevo->sig=0;

if(primero==0)
{
primero=nuevo;
ultimo=nuevo;
}
else
{
ultimo->sig=nuevo;
ultimo=nuevo;
}
clrscr();

printf("Introducir numero o 0 para terminar: ");
scanf("%d",&aux);
}

clasificar();
visualizar();
}


clasificar()
{
short sw;
do
{
for(nuevo=primero,sw=0;nuevo->sig!=0;nuevo=nuevo->sig)
{
ultimo=nuevo->sig;
if(nuevo->n > ultimo->n)
{
aux=ultimo->n;
ultimo->n=aux;
sw=1;
}
}
}
while(sw==1);
}

visualizar()
{
for(nuevo=primero;nuevo!=0;nuevo=ultimo)
{
printf("%d ",nuevo->n);
ultimo=nuevo->sig;
free(nuevo);
}
}
  #4 (permalink)  
Antiguo 22/03/2005, 09:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
A ver que tal asi, en la funcion clasificacion en vez de esto:

Código:
aux=ultimo->n;
ultimo->n=aux;
esto:
Código:
aux = ultimo->n;
ultimo->n = nuevo->n;
nuevo->n = aux;
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 23/03/2005, 01:41
 
Fecha de Ingreso: noviembre-2004
Mensajes: 28
Antigüedad: 19 años, 6 meses
Puntos: 0
Probaré tu sugerencia

Mil gracias y que tengas una feliz Pascua
  #6 (permalink)  
Antiguo 23/03/2005, 03:41
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Gracias, igualmente
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 03:09.