Формирование списка из файла
Отметим, что первый элемент создается
отдельно и затем не меняется.
Program список;
Type ссылка=^элсписка;
элсписка=record
фам: string;
адрес: ссылка; end;
var F: file of string;
начало, конец, очередэл, новэл: ссылка;
искфам, новфам: string;
begin assign(F, ’досье’);
reset(F);
начало: = NIL;
конец: =NIL;
while not eof(F) do
begin
if начало=NIL then {создание 1-ого элем}
begin
New(очередэл);
read(F, очередэл^. фам);
очередэл^. адрес: =конец;
начало: =очередэл;
end;
else {очередной элемент} begin
New(вспомэл);
read(F, вспомэл^. фам);
очередэл^. адрес: =вспомэл;
вспомэл^. адрес: =конец;
очередэл: =вспомэл;
end; end; {от while} end.
|
Поиск элемента в списке
Считываем адрес и проверяем, не NIL ли он.
Program список;
Type ссылка=^элсписка;
элсписка=record
фам: string;
адрес: ссылка; end;
var F: file of string;
начало, конец, очередэл, новэл: ссылка;
искфам, новфам: string;
begin assign(F, ’досье’);
reset(F);
начало: = NIL;
конец: =NIL;
while not eof(F) do
begin if начало=NIL then {создание 1-ого эл}
begin
New(очередэл);
read(F, очередэл^. фам);
очередэл^. адрес: =конец;
начало: =очередэл;
end;
else {очередной элемент}
begin
New(вспомэл);
read(F, вспомэл^. фам);
очередэл^. адрес: =вспомэл;
вспомэл^. адрес: =конец;
очередэл: =вспомэл;
end;
end; {от while}
{закончили создание списка,
переходим к поиску фамилии в списке}
read(искфам); {эту фамилию будем искать}
очередэл: =начало;
while (искфам< > очередэл^. фам) and
(очередэл< > NIL) do {спускаемся вниз по списку}
очередэл: =очередэл^. адрес;
{когда мы вышли из цикла у нас 2 варианта}
if очередэл^. фам=искфам then writeln(‘есть’);
else writeln(‘нет’); end.
|
Исключение из рассмотрения элемента списка
Program список;
Type ссылка=^элсписка;
элсписка=record
фам: string; адрес: ссылка; end;
var F: file of string;
начало, конец, очередэл, новэл: ссылка;
искфам, новфам: string;
begin assign(F, ’досье’);
reset(F);
начало: = NIL;
конец: =NIL;
while not eof(F) do
begin if начало=NIL then {созда 1-ого эл}
begin New(очередэл);
read(F, очередэл^. фам);
очередэл^. адрес: =конец;
начало: =очередэл;
end else {очеред элемент}
begin New(вспомэл);
read(F, вспомэл^. фам);
очередэл^. адрес: =вспомэл;
вспомэл^. адрес: =конец;
очередэл: =вспомэл; end;
end; {от while}
read(искфам);
очередэл: =начало;
while (искфам< > очередэл^. фам) and (очередэл< > NIL) do очередэл: =очередэл^. адрес;
if очередэл^. фам=искфам then
очередэл: =очеред^. адрес;
{«перепрыгиваем» через найденный элемент} end.
Добавление элемента в конец списка
Program список;
Type ссылка=^элсписка;
элсписка=record
фам: string;
адрес: ссылка; end;
var F: file of string;
начало, конец, очередэл, новэл: ссылка;
искфам, новфам: string;
begin assign(F, ’досье’);
reset(F);
начало: = NIL;
конец: =NIL;
while not eof(F) do begin
if начало=NIL then {созд 1-ого эл}
begin New(очередэл);
read(F, очередэл^. фам);
очередэл^. адрес: =конец;
начало: =очередэл; end;
else {очередной элемент}
begin
New(вспомэл);
read(F, вспомэл^. фам);
очередэл^. адрес: =вспомэл;
вспомэл^. адрес: =конец;
очередэл: =вспомэл; end;
end; {от while}
{закончили создание списка}
read(новфам);
очередэл: =начало;
while очередэл< > конец do
очередэл: =очередэл^. адрес;
{спустились по списку до конца}
New(вспомэл);
очередэл^. адрес: =вспомэл;
{создали новый элемент и обеспечили на него ссылку предыдущего}
вспомэл^. фам: =новфам;
{записали введенную фамилию}
вспомэл^. адрес: =конец;
очередэл: =вспомэл;
end.
|