Пример построения и работы со списком
Пример построения списка, содержащего квадраты натурального ряда чисел, включения нового элемента и исключения заданного элемента.
procedure TForm1.Button1Click(Sender: TObject);
type pn=^dp;
dp=record
i :integer;
p:pn
end;
var j,n,k,m:integer;
r,q,s:pn;st:string;
//формирование списка
procedure sn;
begin new(q); q^.i:=k*k;
q^.p:=r; r:=q;
end;
//вывод элементов списка
procedure scr;
var w:pn;
begin st:='';w:=q;
while w<>nil do
begin st:=st+IntToStr(w^.i)+' ';w:=w^.p;
end;
end;
//вставка элемента
procedure inn;
begin new(s); s^.i:=j; s^.p:=q^.p; q^.p:=s
end;
//удаление элемента
procedure del;
begin s:=q^.p; q^.p:=q^.p^.p; s^.p:=nil
end;
begin Memo1.Clear; Memo1.Font.Size:=12;
r:=nil; n:=6; j:=17; m:=3;
for k :=1 to n do sn;
scr; Memo1.Lines.Add(‘ Исходный список: ’+st);
for k:=1 to m-1 do q:=q^.p;
inn;
q:=r; scr; Memo1.Lines.Add(‘После вставки элемента:’+st);
m:=4;
q:=r; for k:=1 to m-1 do q:=q^.p; del;
q:=r; scr; Memo1.Lines.Add(‘После удаления элемента:’st);
end;
В программе: sn – процедура создания списка, scr – процедура вывода на экран значения элемента списка, inn - процедура включения в список нового элемента, del – процедура исключения элемента из списка, j – значение элемента, m – номер элемента списка, после которого вводится или выводится заданный элемент, n – количество элементов в исходном списке.
Результаты
Пример обработки файла данных
На дисковом файле записано нечетное количество целых чисел. Необходимо составить программу определения числа, занимающего в данной последовательности центральную позицию. Неопределенность длины последовательности усложняет использование массивов. Применение динамической памяти снимает эти проблемы.
Текст программы
procedure TForm1.Button1Click(Sender: TObject);
type pn=^dp;
dp=record
i:integer;
p:pn
end;
var j,n,k,m:integer;
r,q,s:pn;f:TextFile;
begin
AssignFile(f,'data.pas');
Reset(f);r:=nil;j:=0;
repeat j:=j+1; new(q); read(f,q^.i);q^.p:=r; r:=q
until eof(f); CloseFile(f);
for k:=1 to j div 2 do q:=q^.p;
Edit1.Text:=IntToStr(q^.i);
end;
Пример сортировки целых чисел
На дисковом файле записана последовательность целых чисел. Необходимо определить количество этих чисел и вывести их на экран в порядке возрастания. Для сортировки удобно использовать метод вставки. Из первого прочитанного элемента файла создается список из одного элемента. Очевидно, что этот список является упорядоченным. Затем следует повторение операций:
- чтение из файла одного очередного элемента;
- просмотр упорядоченного списка и сравнение элементов списка с очередным прочитанным элементом;
- включение прочитанного элемента в список перед первым же элементом списка, оказавшимся больше прочитанного.
Текст программы
procedure TForm1.Button1Click(Sender: TObject);
type pn=^dp;
dp=record
i:integer;
p:pn
end;
var t,r,q,s:pn; f:TextFile;
begin
AssignFile(f,'data.txt'); Reset(f);
new(r); read(f,r^.i); r^.p:=nil;
new(t); t^.p:=r; t^.i:=1;
repeat r:=t;
q:=r;
new(s); read(f,s^.i);
t^.i:=t^.i+1;
repeat
if r^.p^.i<s^.i then q:=q^.p;
r:=r^.p
until r^.p=nil;
s^.p:=q^.p; q^.p:=s
until eof(f);
CloseFile(f);
Memo1.Lines.Add('n='+IntToStr(t^.i));r:=t;
repeat r:=r^.p;
Memo1.Lines.Add(IntToStr(r^.i));
until r^.p=nil;
end;