Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec_inf.doc
Скачиваний:
61
Добавлен:
16.03.2015
Размер:
1.14 Mб
Скачать

4.4.10. Разрушение списка

Операция разрушения списка реализуется в процессе прохода по списку так, что элементы хранения всех узлов списка, начиная с первого, последовательно исключаются из списка и возвращаются в кучу. В результате выполнения операции разрушения список становится пустым, т.е. значение указателя на первый узел равно NIL. Для разрушения списка недостаточно просто присвоитьNILуказателю на его первый узел (как иногда ошибочно полагают), т.к. в этом случае память, занятая элементами хранения узлов списка, в действительности не освобождается и в кучу не возвращается.

4.4.11. Программный модуль, реализующий операции

создания, обработки, просмотра содержимого списка

Uses Crt;

Type PList = ^ List;

{ описание элемента хранения узла списка и }

List = record

{ указателя на узел списка }

info: word; link: plist;

end;

var f: PList; cod,n: byte; sum: word;

Procedure Create1( var first: PList;

n: byte );

var p: PList; i: byte;

begin

first:=nil;

{ first – указатель на первый узел списка }

{ n – количество узлов в списке }

{ создание пустого списка }

for i:=1 to n do begin

new( p );

{ создание узла списка }

write( ‘Значение инф. поля‘, i, ‘-го элемента списка = ‘ );

readln( p^.info );

{ заполнение информационного поля узла }

p^.link:=first;

{ установка связи между вставленным узлом и списком }

first:=p;

{ новое значение указателя на первый узел }

end;

end;

Procedure Print( first: PList );

{ просмотр информац. полей узлов списка }

var p: PList; i: byte;

begin i:=0;

while (p <> nil ) do begin

inc( i );

writeln( ‘Информационное поле ‘, i, ‘-го элемента списка = ‘, p^.info );

p:=p^.link;

end;

end;

Procedure Work( first: PList; var s: word );

{ суммирование значений информ. }

var p: PList;

{ полей узлов списка }

begin s:=0;

while (p <> nil ) do begin

s:=s+p^.info; p:=p^.link;

end;

end;

Procedure Destroy( var first: PList );

{ разрушение списка }

begin

. . .

end;

Procedure Message;

{ вспомогательная процедура }

begin

writeln( ‘Список пуст‘ ); write( ‘Нажмите любую клавишу‘ ); readkey

end;

begin

f:=nil;

{ первоначально список пуст }

repeat Clrscr;

writeln(‘1-Создание 2-Просмотр 3–Обработка 4–Разрушение 5-Выход‘ );

write( ‘Код действия = ‘ ); readln( cod );

case cod of

1: begin

{ создание списка }

write( ‘Количество узлов в списке = ‘ ); readln( n );

Сreate( f,n ); write( ‘Нажмите любую клавишу‘ ); readkey

end;

2: begin

{ просмотр списка }

if f=nil then Message

else begin

Print( f ); write( ‘Нажмите любую клавишу‘ ); readkey

end;

3: begin

{ обработка списка }

if f=nil then Message

else begin

Work( f,sum ); writeln( ‘Сумма значений инф. полей = ‘, sum );

write( ‘Нажмите любую клавишу‘ ); readkey

end;

4: begin

{ разрушение списка }

if f=nil then Message

else begin

Destroy( f ); writeln( ‘Список разрушен‘ );

write( ‘Нажмите любую клавишу‘ ); readkey

end;

5: Destroy( f )

{ выход }

end;

until ( cod = 5 ); Clrscr

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]