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

problema con insertar en una lista simple

Estas en el tema de problema con insertar en una lista simple en el foro de C/C++ en Foros del Web. Hola soy un principiante y bueno es la primera vez que entro en el foro, y quisiera saber si alguien me ayuda con esto. veran ...
  #1 (permalink)  
Antiguo 17/02/2015, 11:39
 
Fecha de Ingreso: febrero-2015
Mensajes: 20
Antigüedad: 9 años, 2 meses
Puntos: 0
problema con insertar en una lista simple

Hola soy un principiante y bueno es la primera vez que entro en el foro, y quisiera saber si alguien me ayuda con esto.

veran esta es una lista simple que almacenara tareas, y esas tareas tienen una hora (que es el tiempo que la persona tarda en hacer la tarea) y ganancia (el dinero que obtiene el vendedor de la tienda cuando la hace)

buenoe le nunciado de mi tarea dice que el encargado hara primero la tarea que tenga mayor ganancia , si la ganacia es igual a la de otra tarea entonces hara primero la que tenga mayor hora, y si las horas de ambas tarea tambien son iguales entonces primera irá la la que apareció antes en la lista.

y bueno mas o menos funciona mi codigo pero hay casos de prueba que fallan:


aaa 2 28
bbb 3 20
ccc 1 10
*
aaa
ccc
bbb

bbb tiene mas ganacia que ccc pero me la coloca de segundo

a 2 14
b 2 30
c 3 5
*
b
c
a

aqui tambien no se que pasa.
donut 4 50
chocolate 1 50
*
donut
chocolate

chocolate 1 50
donut 4 50
*
donut
chocolate

aqui si esta bien ya que tienen la misma ganancia pero como donut tiene mas horas que chocolate la pone de primero

si pueden soluciona este problema se los agradeceria mucho, espero su respuesta .

imprimir , Print my list (is for prove if insertion is correct)

Código C++:
Ver original
  1. void insert3 ( string tarea , int tiempo, int dinero) {
  2.         nodo *n_nuevo;
  3.         n_nuevo = new nodo (tarea, tiempo, dinero );
  4.         n_nuevo ->sig = NULL;
  5.         if (head == NULL){                                                      // ve si es vacia
  6.             head = tail = n_nuevo;
  7.         }else {
  8.             if ( n_nuevo -> ganancia > head->ganancia ){                        // si la ganacia es mayor
  9.                 n_nuevo -> sig = head;
  10.                 head = n_nuevo;
  11.             }else if (n_nuevo ->ganancia == head->ganancia){                                            // si la ganancia es igual
  12.                 if (n_nuevo->hora > head->hora) {                                                       // si la hora es mayor
  13.                     n_nuevo->sig = head;
  14.                     head =n_nuevo;
  15.                 }else if (n_nuevo ->hora == head->hora ){                                       // si las horas son iguales ira despues que la que esta primera
  16.                     n_nuevo->sig =head->sig;
  17.                     head->sig = n_nuevo;
  18.                 }else {
  19.                         n_nuevo->sig =head ->sig;
  20.                         head->sig = n_nuevo;
  21.                 }
  22.             }else {
  23.                     n_nuevo->sig= head ->sig ;
  24.                     head->sig = n_nuevo;
  25.             }
  26.         }              
  27.     }  
  28.    
  29.         void imprimir3()
  30.         nodo *ptemp ;
  31.         ptemp = new nodo ();
  32.         ptemp= head ;
  33.         if (head ==NULL)
  34.         {
  35.             cout<< "vacia"<<endl;
  36.         }
  37.        
  38.         while (ptemp!=NULL){
  39.             cout<<ptemp->name <<endl;
  40.             ptemp=ptemp->sig;
  41.         }
  42.     }

Última edición por jose_27; 17/02/2015 a las 11:59
  #2 (permalink)  
Antiguo 18/02/2015, 00:53
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: problema con insertar en una lista simple

Si te fijas, verás que a la hora de insertar un nuevo elemento únicamente estás haciendo comparaciones con el primer elemento de la lista... si tienes, por ejemplo, unas ganancias de 20 y 10 e insertas una tarea con ganancias 5, se va a insertar en la segunda posición... cuando tendría que ir colocada al final de la lista.

Para poder colocar el elemento en la posición de la lista tienes que poder iterar a lo largo de toda la lista y para eso necesitas tirar de algún bucle (yo eligiría while) o de recursividad.

Un saludo.

Etiquetas: c++, listas
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 12:30.