Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 1 votos - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Consulta sobre Listas - Algoritmos
Autor Mensaje
guilleg1988 Sin conexión
Empleado de Fotocopiadora
con estado
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 25
Agradecimientos dados: 19
Agradecimientos: 0 en 0 posts
Registro en: Dec 2010
Mensaje: #1
Consulta sobre Listas - Algoritmos Dudas y recomendaciones Algoritmos y Estructuras de Datos
Hola a todos,

les hago una consulta:

En un final que estoy planteando tengo que recorrer una lista con posiciones de equipos de futbol en base a su puntaje, entonces cuando consigo el nodo que tiene el valor maximo de puntaje tengo que sacarlo de la lista y mostrar por pantalla su puntaje, entre otras cosas.Yo lo plantee de una forma pero tengo serias dudas y prefiero ver si alguien me puede dar una mano.

Lo que venia haciendo es asignar a un puntero L la lista,
e ir moviendome con ese puntero.
Entonces en un while, mientras L es distinto de nil, pregunto si L^.info.pje > max, opero como corresponda, y me muevo al siguiente de la lista asignandole a L, L^.sgte.

Ahora bien, de esta manera al terminar la primer recorrida y tener el maximo puntaje, lo saco de la lista y lo muestro, pero no estaria volviendo a recorrer la lista para sacar al segundo, tercero, etc..
Entonces agregué otro puntero P, y un ciclo while interno, en el cual voy a operar con el puntaje maximo, y voy a avanzar al siguiente hasta llegar al final de la lista.
De esta forma me moveria con el puntero P, llegaria al final, moveria el puntero L al siguiente nodo, volveria a moverme con P hasta el final, y asi sucesivamente hasta que la lista quede sin nodos.
En resumen, queria saber si no me estoy mandando un moco gigante operando con tantos punteros, intentando emular la busqueda de maximos en un vector.

Muchas gracias de antemano,

Saludos
16-12-2010 11:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.852
Agradecimientos dados: 55
Agradecimientos: 195 en 50 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #2
RE: Consulta sobre Listas - Algoritmos
tenés que tener un puntero para recorrer la lista, y otro puntero para marcar el nodo que tiene el máximo. no hace falta que te guardes el máximo, porque tenés el puntero que lo está marcando.

es como buscar un máximo en un array, no hace falta guardar el valor máximo, pero sí el índice del array donde está ubicado.

en resumen. voy con un ejemplo:

L-> | 5 |->| 9 |->| 4 |->| 1 |->| 3 |

tenés el puntero R para recorrer y M para marcar.
inicialmente M apunta a donde apunta L, porque es el primer elemento y en ese caso es el máximo.
R también empieza apuntando a donde apunta L, y empezás a preguntar:
M^.valor > R^.valor ==> M apunta a donde apunta R
avanzo R y vuelvo a preguntar. obviamente todo eso en un ciclo mientras que R no apunte a nil.

cuando terminaste de recorrer, vas a tener M apuntando al nodo con el máximo.
ahí lo sacás, rearmás la lista, bla bla bla.
y después volvés a hacer lo mismo.

16-12-2010 17:30
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
guilleg1988 Sin conexión
Empleado de Fotocopiadora
con estado
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 25
Agradecimientos dados: 19
Agradecimientos: 0 en 0 posts
Registro en: Dec 2010
Mensaje: #3
RE: Consulta sobre Listas - Algoritmos
LeaTex, antes que nada gracias por responder.

Te hago una re-pregunta sobre el tema, si bien entendi la forma en que lo pensaste, suponete que vos ubicas el nodo con el valor 9 (yo aca deberia sacarlo de la lista para mostrar ciertos datos), en el caso particular de este final, tengo que mostrar una especie de tabla de posiciones, por lo que siguiendo tu ejemplo deberia mostrar:
9
5
4
3
1
Ahora bien, vos recorres la primera vez, y sacas el Nodo que contiene el valor 9. Lo que yo deberia hacer es mover nuevamente el puntero M y el puntero R para que apunten a L de nuevo?
De esta manera voy a obligar a recorrer la lista hasta que no quede ningun nodo, y voy a sacarlos ordenados.
Esa es la unica duda que me quedó picando.

Gracias de nuevo
17-12-2010 11:55
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.852
Agradecimientos dados: 55
Agradecimientos: 195 en 50 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #4
RE: Consulta sobre Listas - Algoritmos
(17-12-2010 11:55)guilleg1988 escribió:  LeaTex, antes que nada gracias por responder.

Te hago una re-pregunta sobre el tema, si bien entendi la forma en que lo pensaste, suponete que vos ubicas el nodo con el valor 9 (yo aca deberia sacarlo de la lista para mostrar ciertos datos), en el caso particular de este final, tengo que mostrar una especie de tabla de posiciones, por lo que siguiendo tu ejemplo deberia mostrar:
9
5
4
3
1
Ahora bien, vos recorres la primera vez, y sacas el Nodo que contiene el valor 9. Lo que yo deberia hacer es mover nuevamente el puntero M y el puntero R para que apunten a L de nuevo?
De esta manera voy a obligar a recorrer la lista hasta que no quede ningun nodo, y voy a sacarlos ordenados.
Esa es la unica duda que me quedó picando.

Gracias de nuevo

claro! eso que puse sirve para sacar uno solo. o sea, metés todo eso dentro de un subproceso o función, a la que le pasás como parámetro la lista. onda: obtenerMaximoDe(unaLista)

y esa función retorna el puntero al nodo con el máximo. o sea que M y R serían variables locales de la función. cada vez que la llamás esas variables apuntan a nil y el primer paso de la función es hacer que apunten a L para empezar a recorrerla.

17-12-2010 12:32
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Anirus Sin conexión
Super Moderador
Sin estado :)
*********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.162
Agradecimientos dados: 77
Agradecimientos: 194 en 69 posts
Registro en: Nov 2009
Mensaje: #5
RE: Consulta sobre Listas - Algoritmos
Por ahi entendí cualquier cosa, ¿vos querés buscar todos los máximos para tener todo ordenado por puntos? si es así creo que es más fácil sacar el primer nodo de la lista y usar insertar ordenado en otra hasta que te quede vacía y después hacer lista:=listaOrdenada. Aunque no sé qué es más optimo. Yo para no crear nuevos nodos no les hago dispose sino que hago un insertar ordenado que reciba un nodo y lo inserte en vez de recibir info y crear un nodo nuevo para insertar.
Antes de avivarme de que podía hacer eso me había hecho un ordenamiento burbuja para listas xD
Si entendí mal y sólo querías no sé, los primeros 10 con mayor puntaje, ahi sí conviene buscar máximos para no insertar nodos demás.
(Este mensaje fue modificado por última vez en: 17-12-2010 19:51 por Anirus.)
17-12-2010 19:49
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
guilleg1988 Sin conexión
Empleado de Fotocopiadora
con estado
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 25
Agradecimientos dados: 19
Agradecimientos: 0 en 0 posts
Registro en: Dec 2010
Mensaje: #6
RE: Consulta sobre Listas - Algoritmos
Claro lo que estaba necesitando era obtener digamos una tabla de posiciones, en base a los puntos de cada equipo. Esa lista me venia ordenada por el orden natural en que se fueron agregando, que en este caso era alfabeticamente. Al final lo terminé resolviendo de la primer manera, es decir marcando el nodo con puntaje maximo, pero me parece que la forma que propones vos tambien deberia funcar.
20-12-2010 08:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.