Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-11-2004
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Lightbulb Manejo de listas

hola, tengo que aprender a manejar listas, si otra vez con las listas, es que no me ha quedado claro, bueno ahi va: encontré un ejemplo de listas enlazadas, de las simples no dobles, pero no se si estoy entendiendo bien, lo que estoy preguntando hasta ahora es lo como me imagino que funciona el programa pero quiero asegurarme para asi poder aprender, así que en las lineas de codigo que tengo duda insertaré una pregunta va? a ver si me pueden ayudar...


type

TApunt=^TNodo;
TNodo=record
Info: String;
Liga: TApunt;
end;

var
Inicio, Fin: TApunt; // aqui declaro las variables de tipo apuntador, pues cuando lo hago, ¿ya apuntan a nil?
  • procedure Agregar(Elem: String);
    Var Aux: TApunt; // Aux es un apuntador al nodo que se creará?
    begin
    New(Aux); // aqui, el nodo se puede llamar de otro modo, por ejemplo p? es decir que fuera: New(p);
    Aux^.Liga:=Nil;
    Aux^.Info:=Elem;
    if Inicio=Nil then Inicio:=Aux // aqui, con Inicio:=Aux digo que inicio apunta a aux?
    else Fin^.Liga:=Aux;
    Fin:=Aux; //por lo tanto, aqui digo que fin apunta a aux...
    end;
Por el momento es todo, muchas gracias
Responder Con Cita
  #2  
Antiguo 20-11-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En principio hay otras técnicas que evitan el uso de punteros, como el TobjectList. Pero si necesitas eso...

Tapunt, yo le cambiaría el nombre, es decir, PTnodo = ^Tnodo
con esta nomenclatura es mas claro,
Tnodo es un Tipo de datos
PTNodo es un Puntero al Tipo de datos Nodo


type

TApunt=^TNodo;
TNodo=record
Info: String;
Liga: TApunt;
end;

var
Inicio, Fin: TApunt; // aqui declaro las variables de tipo apuntador, pues cuando lo hago, ¿ya apuntan a nil? SI, Delphi lo inicializa a nil al declarar la variable.

  • procedure Agregar(Elem: String);

    Var Aux: TApunt; // Aux es un apuntador al nodo que se creará? SI
    begin

    New(Aux); // aqui, el nodo se puede llamar de otro modo, por ejemplo p? es decir que fuera: New(p);NO VER EJEMPLO
    Aux^.Liga:=Nil;

    Aux^.Info:=Elem;

    if Inicio=Nil then Inicio:=Aux // aqui, con Inicio:=Aux digo que inicio apunta a aux? EXACTO
    else Fin^.Liga:=Aux;

    Fin:=Aux; //por lo tanto, aqui digo que fin apunta a aux...SIP
    end;




    Puedes hacerte un esquema grafico para aclararte un poco

    Código:
      
     Tnodo
      
     -------------
      
      | info	  |
      
      | Liga	  |
      
      -------------
      
      
      
      Pointer
      
      ------
      
      |   |
      
      ------
      
      
      
      Tapunt
      
      ------			------------- 
      
      | ---------------->	| info	 | 
      
      ------			| Liga	 |
      
      			-------------
De esta forma, estas viendo que Tapunt está compuesto por un tipo Pointer + un Tipo Registro.

Aux es una variable, imagina que delphi reserva espacio para esa variable en la posicion 100 de la memoria.
  • Código:
      
     direccion	nombre de	contenido 
      
      de memoria	la variable	de la memoria
      
      
      
      0				ocupada por windows
      
      100		Aux		inicialmente NIL
      
      150				ocupada por windows
      
      200				--libre--
    Cuando haces New(Aux) se reserva espacio para guardar el nodo, y se hace al conjunto completo:

    - Reserva espacio para el registro ( supongamos en la posicion 200)

    - Modifica el contenido de aux para que apunte a esa zona de memoria recien creada.

    Código:
      
      
      
      direccion	nombre de	contenido 
      
      de memoria	la variable	de la memoria
      
      
      
      0				ocupada por windows
      
      100		Aux		200
      
      150				ocupada por windows
      
      200		aux^		el nodo recien creado


    de tal forma que cuando dices:

    Código Delphi [-]
      
      aux^.info:= 'elemento'



    - Primero, va a aux, Delphi sabe Aux está en la posición 100

    - lee el contenido de Aux (200)

    - Como encuentra el operador ^. lo que hace es ir a la posicion de memoria 200 y tratar esa porcion de memoria como si fuera un registro

    - Accede al campo infoy le asigna la cadena 'elemento'.



    Lo que si puedes hacer es extraer el registro de la lista, de esta forma:

    Código Delphi [-]
      
      var 
      
          Aux:TApunt;
      
          Reg: TNodo;
      
      begin
      
      if Inicio <> nil then
      
      begin
      
         Reg := inicio^;
      
         showMessage(reg.elemento);
      
      end;

    Mira atentamente de qué tipo es cada variable.



    Espero te ayude.




Última edición por Lepe fecha: 20-11-2004 a las 14:44:53.
Responder Con Cita
  #3  
Antiguo 22-11-2004
Luli Luli is offline
Miembro
 
Registrado: oct 2004
Posts: 76
Poder: 20
Luli Va por buen camino
Smile Ejemplo ilustrativo

hola, muchisimas gracias, muy ilustrativo tu ejemplo, me ha sido de mucha utilidad, gracias otra vez y nos vemos por aqui pronto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:41:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi