Hola vanchopper, tuve un poco de tiempo libre y echaba de menos Pascal así que hice este pequeño programa:
program Colas;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TPalabra = packed record
Palabra: PAnsiChar; //^AnsiChar;
SiguientePalabra: ^TPalabra;
end;
PCola = ^TPalabra;
var
Cola: PCola;
PrimeraPalabra, UltimaPalabra: PCola;
function AñadirPalabra(Palabra: PAnsiChar): boolean;
var
P: PCola;
begin
result:= false;
if Palabra <> nil then
begin
New(P);
if P = nil then
begin
WriteLn('No se pudo reservar memoria para la cola');
Exit;
end;
GetMem(P^.Palabra, StrLen(Palabra) + 1); //+1 para el caracter #0 de final de cadena
if P^.Palabra = nil then
begin
WriteLn('No se pudo reservar memoria para la palabra');
Exit();
end;
StrCopy(P^.Palabra, Palabra);
if PrimeraPalabra = nil then
begin
Cola:= P;
PrimeraPalabra:= Cola;
end else
begin
Cola^.SiguientePalabra:= Pointer(P);
Cola:= PCola(Cola^.SiguientePalabra);
UltimaPalabra:= PCola(Cola^.SiguientePalabra);
end;
result:= true;
end;
end;
procedure LiberarMemoria;
var
P, PAux: PCola;
begin
P:= PrimeraPalabra;
while P <> nil do
begin
FreeMem(P^.Palabra);
PAux:= PCola(P^.SiguientePalabra);
Dispose(P);
P:= PAux;
end;
end;
var
P: PCola;
begin
AñadirPalabra('Primera palabra');
AñadirPalabra('Palabra de prueba');
AñadirPalabra('qwdqwd');
AñadirPalabra('qwdqwd');
AñadirPalabra('qwdqwd');
AñadirPalabra('by Khronos');
P:= PrimeraPalabra;
while P <> nil do
begin
WriteLn(P^.Palabra);
P:= PCola(P^.SiguientePalabra);
end;
ReadLn;
LiberarMemoria();
end.
Aquí tienes un pequeño programa que trabaja con Colas. El código está hecho en Delphi 2010, pero si trabajas con FreePascal no deberías tener ningún problema. Quizás deberías buscar en Internet información sobre las funciones New, Dispose, GetMem y FreeMem...
Con estas funciones, deberías ser capaz de hacer tu ejercicio.
Saludos.