Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Двусв_Списки МУ.doc
Скачиваний:
7
Добавлен:
13.02.2015
Размер:
195.58 Кб
Скачать

2.2 Удаление элемента из списка

Удаление первого элемента непустого списка

procedure Del_first(var first, last: link);

begin

if first = last then { один элемент в списке }

begin

dispose(first);

first:=nil; last:=nil

end

else

begin

first:=first^.next;

dispose(first^.prev);

first^.prev:=nil

end

end;

Удаление последнего элемента непустого списка

procedure Del_last(var first, last: link);

begin

if first = last then { один элемент в списке }

begin

dispose(first);

first:=nil; last:=nil

end

else

begin

last:=last^.prev;

dispose(last^.next);

last^.next:=nil

end

end;

Удаление элемента внутри списка

Входной параметр – указатель p на удаляемый элемент списка

procedure Del_el(p: link);

begin

p^.next^.prev:=p^.prev;

p^.prev^.next:=p^.next;

dispose(p)

end;

Удаление элемента внутри списка

Указатель p – входной и выходной параметр:

на входе – адрес удаляемого элемента списка,

на выходе – адрес следующего после удалённого элемента.

procedure Del_p_next(var p: link);

begin

p:=p^.next; {указатель перемещается на следующий элемент списка}

p^.prev:=p^.prev^.prev;

dispose(p^.prev^.next);

p^.prev^.next:=p

end;

2.3 Вставка элемента внутри списка

Вставка нового элемента после заданного элемента

Входные параметры:

p – указатель на заданный элемент списка,

x – значение информационного поля нового элемента.

procedure DInsert_next(p: link; x:integer);

begin { элемент не последний }

new(p^.next^.prev);

p^.next^.prev^.inf:=x;

p^.next^.prev^.prev:=p;

p^.next^.prev^.next:=p^.next;

p^.next:=p^.next^.prev

end;

Вставка нового элемента перед заданным элементом

Входные параметры:

p – указатель на заданный элемент списка,

x – значение информационного поля нового элемента.

procedure DInsert_prev(p: link; x:integer);

begin { элемент не первый }

new(p^.prev^.next);

p^.prev^.next^.inf:=x;

p^.prev^.next^.prev:=p^.prev;

p^.prev^.next^.next:=p;

p^.prev:=p^.prev^.next

end;

3 СоЗдание, просмотр и уничтожение списка

Пример 3.1 Создать линейный двусвязный список. Информация содержится в текстовом файле. Выдать значения информационных полей элементов списка. Уничтожить список.

program Dlist;

type link = ^rec;

rec = record

inf:integer;

prev, next:link

end;

var first, last : link; {указатели на начало и конец списка}

f : text; fname : string;

{создание списка добавлением в конец списка}

procedure DCreate(var first, last : link; var f:text);

var p : link; {указатель на новый элемент}

begin

reset(f);

first:=nil; last:=nil;

while not eof(f) do

begin

new(p); read(f,p^.inf);

p^.prev:= last; p^.next:=nil;

if last<>nil then last^.next:=p

else first:=p;

last:=p

end;

close(f)

end;

{просмотр списка проходом от первого до последнего элемента}

procedure DView(first : link);

begin

while first<>nil do

begin

write(first^.inf,' '); first:=first^.next

end;

writeln

end;

{уничтожение списка}

procedure Del_DList(var first, last:link);

var p:link; {указатель на текущий элемент}

begin

while first<>nil do

begin

p:=first; first:=first^.next;

dispose(p)

end;

last:=nil

end;

begin {основная программа}

write('введите имя файла '); readln(fname);

assign(f,fname);

DCreate(first, last, f);

writeln('список: '); DView(first);

Del_DList(first, last); writeln('список удален')

end.