Распаковка сжатого файла.
Файл представляет собой последовательность цепочек вида: <Число><Символ>. Переписать содержимое файла в очередь и преобразовать последовательность по правилу: каждую цепочку заменить на указанное число символов. Например: ‘7a12c4d’ заменяется на ‘aaaaaaaccccccccccccdddd’. Результат записать в выходной файл.
Сделал очередь, из файла читается все нормально. Но абсолютно не могу представить даже приблизительной реализации алгоритма задачи.
Help plz
Код
Uses Crt;
Type
Inf = String;
Ptr = ^EL;
EL = record
Dn : Inf;
Nx : Ptr;
end;
Queue = object
p : ptr;
Constructor Init;
Function Empty : boolean;
Procedure Push(D : Inf);
Procedure Print;
Function Pop : Inf;
Destructor Done;
end;
Constructor Queue.Init;
begin
p := nil
end;
Destructor Queue.Done;
var q : Ptr;
begin
while p <> nil do
begin
q := p;
p := p^.Nx;
dispose(q);
end;
p := nil;
end;
Function Queue.Empty : boolean;
begin
If p = nil then
Empty := false
else Empty := true;
end;
Procedure Queue.Push(D : Inf);
var q : Ptr;
begin
New(q);
q^.Dn := D;
q^.Nx := p;
p := q;
end;
Function Queue.Pop : Inf;
var q : Ptr;
begin
q := p;
If q^.Nx = nil then
begin
Pop := q^.Dn;
dispose(q);
p := nil;
end;
While q^.Nx^.Nx <> nil do q := q^.Nx;
Pop := q^.Dn;
dispose (q^.Nx);
q^.Nx := nil;
end;
Procedure Queue.Print;
var q : Ptr;
begin
q := p;
while q <> nil do
begin
write(q^.Dn : 4, ' ');
q := q^.Nx;
end;
writeln;
end;
var Q1 : Queue;
input, output : text;
s, sl : string;
i, code : integer;
BEGIN
ClrScr;
assign(input, 'input.txt');
reset(input);
assign(output, 'output.txt');
rewrite(output);
Q1.Init;
writeln('DO= ',MemAvail);
writeln;
While not EOF(input) do
begin
sl := '';
readln(input, s);
If s[length(s)] <> ' '
then s := s + ' ';
For i := 1 to length(s) do
If s[i] <> ' '
then
sl := sl + s[i]
else
If length(sl) <> 0 then
begin
Q1.Push(sl);
sl := '';
end;
end;
Q1.Print;
Q1.Done;
Close(input);
writeln;
writeln('POSLE= ',MemAvail);
readkey;
END.