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 03-04-2013
blackx5n blackx5n is offline
Miembro
 
Registrado: feb 2008
Posts: 51
Poder: 17
blackx5n Va por buen camino
Lista Enlazada

Hola a todos, quiero hacer una lista enlazada que contenga datos enteros. Tengo varios problemas

1- Como puedo crear un procedimiento o funcion, donde pueda crear el primero nodo y posteriormente se vallan agregando los siguientes nodos.
Realize un procedimiento llamado insertar, pero creo que no es la forma correcta de hacerlo no he logrado agregar ningun dato ala lista.

2- Como puedo recorrer la lista ala inversa e imprimirla

Espero que alguno de ustedes me proporcione alguna idea o algun ejemplo de como realizar esto.


Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

uses
  crt;

type
   pNodo = ^Nodo;

   Nodo = record
     dato:Integer;
     Sig,AntNodo; // Sig: Siguiente   Ant:Anterior
   end;

var
   listaNodo;
   firt:Pointer;
   j:Integer;


 // Imprime lista
procedure Imprimir(xNodo);
begin
     while x<>nil do
     begin
      Writeln(x^.dato);
      x:=x^.Sig;
     end;
end;


procedure insertar(dat:Integer; vfNodo);
var
    f:Pointer;
    j,n:integer;
begin
   New(vf);
   vf^.dato:=dat;
   vf^.Sig:=nil;
   for j:=1 to 3 do
   begin
   f:=vf;
   New(vf);
   vf^.dato:=dat;
   vf^.Sig:=f;
   end;
end;


begin
  // Primer Nodo
  New(lista);
  lista^.dato:=23;
  lista^.Sig:=nil;

  firt:=lista;
  New(lista);
  lista^.dato:=14;
  lista^.Sig:=firt;

  firt:=lista;
  New(lista);
  lista^.dato:=18;
  lista^.Sig:=firt;

  firt:=lista;
  New(lista);
  lista^.dato:=97;
  lista^.Sig:=firt;

  {
  lista:=nil;
  for j:=1 to 3 do
  insertar(j,lista);
  }

  ClrScr;
  Writeln('Lista Enlazada');
  imprimir(lista);

  ReadKey;
end.
Responder Con Cita
  #2  
Antiguo 03-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por blackx5n Ver Mensaje
Hola a todos, quiero hacer una lista enlazada que contenga datos enteros. Tengo varios problemas

1- Como puedo crear un procedimiento o funcion, donde pueda crear el primero nodo y posteriormente se vallan agregando los siguientes nodos.
Realize un procedimiento llamado insertar, pero creo que no es la forma correcta de hacerlo no he logrado agregar ningun dato ala lista.

2- Como puedo recorrer la lista ala inversa e imprimirla
Hola blackx5n.

Código Delphi [-]
...
type
  pNodo = ^TNodo;

  TNodo = record
    dato: Integer;
    ant,
    sig : pNodo;
  end;

// Crear Lista 
procedure CrearLista(var lst: pNodo; valor: Integer);
begin
  New(lst);
  lst^.dato := valor;
  lst^.ant  := nil;
  lst^.sig  := nil
end;

// Agregar un nodo 
procedure AgregarNodo(var lst: pNodo; valor: Integer);
var
  ndo: pNodo;
begin
  New(ndo);
  ndo.dato := valor;
  lst.sig  := ndo;
  ndo.ant  := lst;
  ndo.sig  := nil;
  lst      := ndo
end;

// Mostrar invertida 
procedure MostrarInvertida(var lst: pNodo);
var
  aux : pNodo;
begin
  aux := lst;
  while lst.sig <> nil do lst := lst.sig; 
  while lst <> nil do
  begin
    write(lst.dato:3);
    lst := lst.ant
  end;
  lst := aux
end;

// Liberar
procedure LiberarLista(var lst: pNodo);
begin
  Dispose(lst)
end;

// Ej.: Crear lista, Insertar elementos y mostrar invertidos
var
  i: Integer;
  Lista: pNodo;
begin
  CrearLista(Lista, 1);
  for i:= 2 to 20 do
     AgregarNodo(Lista, i);
  MostrarInvertida(Lista);
  LiberarLista(Lista);
  readln
end.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 03-04-2013
blackx5n blackx5n is offline
Miembro
 
Registrado: feb 2008
Posts: 51
Poder: 17
blackx5n Va por buen camino
Lista Enlazada

Muchas gracias ecfisa, es lo que estaba buscando.

Problema resuelto mil gracias.
Responder Con Cita
  #4  
Antiguo 03-04-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
De nada blackx5n.

Pero hacía mucho tiempo que no implementaba listas..., voy a rectificar el código de liberación de la lista:
Código Delphi [-]
// Liberar
procedure LiberarLista(var lst: pNodo);
var
  act,sig: pNodo;
begin
  act := lst;
  while act <> nil  do
  begin
    sig := act.sig;
    Dispose(act);
    act := sig;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como Invertir Una Lista Enlazada Simple sant0s OOP 10 14-12-2011 20:55:24
Como hacer una lista enlazada dinamica en delphi rgstuamigo OOP 40 04-12-2008 20:20:25
¿Mejor heredar de una Lista o mejor introducir la Lista en un campo? Jome OOP 8 24-11-2005 17:11:16
lista dinamica Telemaco PHP 6 19-08-2004 23:20:33
lo que necesito es ayuda en el TDA de una lista doblemente enlazada circular program_tda Varios 12 17-02-2004 08:45:35


La franja horaria es GMT +2. Ahora son las 08:50:40.


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