Programación General > Pascal
Crear Nodo Y Forma De Implementarlo
(1/1)
JrcsDev:
Qué tal??? siempre he tenido algo de problemas con la memoria dinámica. Alguien puede mostrarme algunos fragmentos de códigos necesarios para entender estas cosas bien???
Lo que necesito es lo siguiente:
- Código de la declaración del nodo
- Código de la inicialización del nodo
- Código para acceder a los campos del nodo
He visto que se usa el signo ^ para los apuntadores, pero no recuerdo si el signo se regiere a la direccion o al valor, en casos donde colocan ^p.inf
Espero que alguien puede ayudarme... Gracias :)
Danielo:
A ver si esto te sirve de ayuda :D :
--- Código: Text --- TYPE Punto=RECORD x,y:Integer; END; Coordenada=^Punto;VAR coord:Coordenada;BEGIN (* Creamos una localidad de memoria *) NEW(coord); (* Asignamos valores *) coord^.x:=10; coord^.y:=20; Write(coord^.x); Write(coord^.y); (* Liberamos la memoria *) Dispose(coord);END.
--- Citar ---He visto que se usa el signo ^ para los apuntadores, pero no recuerdo si el signo se regiere a la direccion o al valor, en casos donde colocan ^p.inf
--- Fin de la cita ---
Si tienes p y q variables de tipo puntero, cuando haces:
p:=q
estás apuntando p al "valor" de q, esto es conocido como alias. Y si llegaras a borrar el valor de lo que está apuntando p, tambien estarías eliminando lo que está apuntando q.
en cambio su haces esto:
^p:=^q
estás copiando sin compartir memoria en p lo que está apuntando q, en este caso si borras lo apuntado por p, no se borra lo apuntado por q.
Enko:
Este codigo es de object pascal. (Free Pascal, Delphi)
Es una pila coordenadas.
Pos: es el dato para el cual se hizo la lista.
Next: es la liga.
Parrent: es el predecesor del punto en cuestion en un grafico. Tomalo como si fuera un dato mas que no importa mucho, al igual que Pos.
PopFirst: saca el primer elemento en la lista
Add: añade un elemento en la lista, existe 2 tipos de este procedimiento, uno añade el punto y el pariente, y el otro añade directamente por el nodo.
Exists: devuelve TRUE si la coordenada existe en la lista.
--- Código: Text --- unit uPointList; interfaceuses Types; type PPointNode = ^TPointNode; TPointNode = record Pos: TPoint; Next: PPointNode; Parrent: PPointNode; end; TPointList = class private FFirst: PPointNode; FLast: PPointNode; FCount: Integer; function NewNode(ANext, AParrent: PPointNode; APoint: TPoint): PPointNode; public constructor Create; destructor Destroy; procedure Add(AParrent: PPointNode; APoint: TPoint); overload; procedure Add(var APointNode: PPointNode); overload; function ExistPoint(APoint: TPoint): Boolean; function PopFirst: PPointNode; property Count: Integer read FCount; end;implementationuses Dialogs;{ TPointList } procedure TPointList.Add(AParrent: PPointNode; APoint: TPoint);var Node: PPointNode;begin Node := NewNode(nil, Aparrent, APoint); if (FFirst <> nil) then FLast^.Next := Node else FFirst := Node; FLast := Node; Inc(FCount);end; procedure TPointList.Add(var APointNode: PPointNode);begin APointNode^.Next := nil; if (FFirst <> nil) then FLast^.Next := APointNode else FFirst := APointNode; FLast := APointNode; Inc(FCount); end; constructor TPointList.Create;begin inherited Create; FFirst := nil; FLast := nil; FCount := 0;end; destructor TPointList.Destroy;var p,q: PPointNode;begin p := FFirst; while p <> nil do begin q := p^.Next; Dispose(p); p := q; end; FCount := -1; inherited Destroy;end; function TPointList.ExistPoint(APoint: TPoint): Boolean;var p,q: PPointNode;begin p := FFirst; Result := False; while p <> nil do begin q := p^.Next; if (p^.Pos.X = APoint.X) and (p^.Pos.Y = APoint.Y) then Result := True; p := q; end;end; function TPointList.NewNode(ANext, AParrent: PPointNode; APoint: TPoint): PPointNode;var p: PPointNode;begin New(p); p^.Pos := Apoint; p^.Next := ANext; p^.Parrent := AParrent; Result := p;end; function TPointList.PopFirst: PPointNode;begin Result := FFirst; FFirst := FFirst^.Next; Dec(FCount);end; end.
JrcsDev:
Gracias Amigos... es justo lo que necesitaba... :)... Se les agradece... Saludos... :kicking:
Navegación
Ir a la versión completa