Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

[ALGORITMO] Listas

Participa en el tema [ALGORITMO] Listas en el foro Programación.
Buenas, estoy como loco con arrays , especialmente con los dinamicos (Listas) y tengo una ...

Buscar en este tema:
 
  •  
    kazaamza escribió el 28/08/2006 a las 15:54 hs.
     
    ¿Mensaje inapropiado?
    #1 [ALGORITMO] Listas
    Buenas, estoy como loco con arrays , especialmente con los dinamicos (Listas) y tengo una duda terrible.

    Tengo que desarrollar un algoritmo que inserte elementos en una lista dinamica.

    Ejemplo, ingreso una serie de alumnos con su respectivo legajo, la lista tiene que ir ordenandoce automaticamente de menor a mayor segun el legajo.

    Es decir, agrego el primer alumno :

    Nombre : Martin
    Legajo : 12

    Ahora quiero agregar otro alumno

    Nombre : Matias
    Legajo : 11

    Lo que tengo que realizar, es que luego de Agregar Martin, al hacerlo con Matias, se ponga en la primer posicion en el caso de que sea menor que el siguiente, y si no, que avance un lugar y se compare con el que le sigue.


    Código:
     
     Programa < Lista >
    
    Declaraciones
     
     Estructura Nodo
        Caracter Nom
        Entero Leg
        Punt prim // Puntero que apunta a nodo de tipo "PUNT"
     Fin estructura
     
     caracter nom
     entero leg
     punt puntero a nodo // puntero que apunta a NODO
     L lista a nodo // declaracion formal de que trabajare con una lista
     
     Procedimiento Agregar (entero leg, caracter nom)
     
     Inicio
    
    prim = null // Creo la lista de elementos
     leer nom
     leer leg
     agregar (leg,nom)
     
     Procedimiento Agregar (Entero leg, caracter nom) // Hago llamado al procedimiento
    
    Declaraciones
    
    punt aux
     punt ant
     punt act
     
    Inicio
    
       Si prim = null // En el caso de que no se halla agregado ningun elemento,  ingreso lo  escrito en la primera posicion
    
       prim.leg = leg //asignos valores al primer nodo
        prim.nom = nom
        prim.sig = null // Reservo el proximo lugar de la lista
        
        Si no 
     
        esta es la parte que se complica, ya que debo usar una sentencia comparativa, y a su ves tengo que ir guardando en otros punteros, las posiciones del elemento anterior y del elemento siguiente para unirlas al nuevo nodo. Por eso, declaro un puntero aux, un puntero ant y un puntero act.
    
     Lo que tengo q hacer, que lo se, pero no se me ocurre como plasmarlo en el algoritmo, es en un principio ir comparando :
    
     Leg 14
    
     Leg 18
    
     Leg 20
    
     Legajo a Agregar : 19
    
     Tengo que comparar el 19 con el 14, si es mayor, compararlo con el siguiente a 14, si es menor, ingresarlo en el medio, guardando la posicion del 14 en un puntero ant, y reservando la posicion del siguiente en un puntero act, y unir el nuevo elemento con el siguiente y con el anterior.
    
     En el caso que no sea, que evalue el 18 y el 20 y asi sucesivamente :(
    
     
    Espero haberme explicado lo mejor posible y esperar una respuesta, por que me esta volviendo loco
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/376371-algoritmo-listas.html
    | Más
  • epzee escribió el 28/08/2006 a las 16:32 hs. ¿Mensaje inapropiado?

    #2 Re: Listas

    Código:
    Procedimiento Agregar (Entero leg, caracter nom, puntero a nodo pri);
       ant, aux, act punteros a nodo
     begin
    
          aux.leg := leg;
          aux.nom := nom;
          act := pri;
          ant := pri;
    
        {Recorro mientras no se termine y no encuentro la posición correcta}
         while (act<>NIL) and (act.leg < aux.leg) do
         begin
              ant := act;
              act := act.sig ;
         end;
    
         if (ant = act) then pri := aux
                             else  ant.sig  := aux;
         aux.sig := act ;
    
      end;
    
    Si no entendés chiflá.
    Me gusta este mensaje
  • Nowhere Man escribió el 29/08/2006 a las 06:52 hs. ¿Mensaje inapropiado?

    #3 Re: Listas

    Hola!!

    Date una vuelta por: http://c.conclase.net/orden/index.html

    Un buen tutorial de Estructuras Dinámicas de Datos podés encontrar en:
    http://c.conclase.net/edd/index.php?cap=000

    Suerte!!
    Me gusta este mensaje
  • kazaamza escribió el 29/08/2006 a las 09:13 hs. ¿Mensaje inapropiado?

    #4 Re: Listas

    Originalmente publicado por epzee...
    Código:
    Procedimiento Agregar (Entero leg, caracter nom, puntero a nodo pri);
       ant, aux, act punteros a nodo
     begin
    
          aux.leg := leg;
          aux.nom := nom;
          act := pri;
          ant := pri;
    
        {Recorro mientras no se termine y no encuentro la posición correcta}
         while (act<>NIL) and (act.leg < aux.leg) do
         begin
              ant := act;
              act := act.sig ;
         end;
    
         if (ant = act) then pri := aux
                             else  ant.sig  := aux;
         aux.sig := act ;
    
      end;
    
    Si no entendés chiflá.
    Explicame con simples palabras como trabajada, por que sigo sin entender, esto me va a volver loco, encima C se poco, si no lo probaria en C :'(
    Me gusta este mensaje
  • kazaamza escribió el 31/08/2006 a las 08:46 hs. ¿Mensaje inapropiado?

    #5 Re: Listas

    epzee, el algoritmo q me pasastes no funciona, hice la prueba y no anda como deberia, tiene una falla y no se donde, ya me he leido todos los tutos posibles y sigo sin poder hacerlo . :@
    Me gusta este mensaje
  • Whisky escribió el 31/08/2006 a las 12:48 hs. ¿Mensaje inapropiado?

    #6 Re: Listas

    Mira no se si te sirve, vos necesitas un algoritmo para insertar en una lista ordenado por que clave ?? por numero de Legajo o Nombre ???

    te dejo algo aca :

    Código:
      
     
    /* Declaracion de estructura */
    typedef struct nodo {
     int leg;
     char nom[20];
     struct *nodo sig;
    } nodo;
     
    void agregarOrdenado(struct nodo *lista, //Puntero a la lista
    	  struct nodo *newNodo)  //Nuevo nodo Creado
    { 
     if (lista == null) { //Si la lista esta vacia lo agregamos al principio
      lista = newNodo;
     } else { //sino
      if (lista->leg >= newNodo->leg) { //Si es menor o igual al primero
    			//lo agregamos a la delantera
       newNodo->sig = lista->sig;
       lista = newNodo;
      } else { //Sino (es mayor al primero
       struct nodo *p; //Creamos una variable auxiliar
       p = lista; //Le asignamos la cabecera de la lista
       while ((p->sig != null) && (p->leg > newNodo->leg)) { //Mientas el siguiente no sea null
    				   //y el legajo actual sea mayor al nuevo
    	p = p->sig; //nos adelantamos 1 pociocion en la lista
       }
       newNodo->sig = p->sig; //al nuevo nodo siguiente le asigamos el puntero siguiente
       p->sig = newNodo; //al puntero siguiente le asignamos el nuevo nodo
      }
     }
    
    Ejemplo :

    lista : {1,Maximiliano} -> {3,enrique} -> {}

    newNodo : {2,Pedro}->


    la lista quedaria algo como

    lista : {1,maximiliano}->{2,Pedro}->{3,enrique}->{}


    Si no entendes algo avisame
    Me gusta este mensaje
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 5 RESPUESTAS
  • 1992 VISTAS
  • 4 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB