Пиши Дома Нужные Работы

Обратная связь

Программа создания и обработки линейного списка

 

Линейный список – это структура данных, представляющая собой последовательность компонент, связанных между собой адресами, как показано на рис. 1.

PN

 

Информ. Поле1 Адрес 2-го элемента

 

Информ. Поле2 Адрес 3-го элемента

 

………..

 

 


Информ. Поле n-1 Адрес n-го элемента

 

Информ. Поле n nil

 

 
 
Рис. 10.1.

 


На рис. 10.1 используются следующие обозначения:

PN – адрес первого элемента списка, который запоминается для работы со списком при его создании;

nil - признак последнего элемента списка.

Над линейными списками выполняются следующие операции:

- создание пустого списка;

- последовательный просмотр списка и поиск заданного элемента;

- добавление нового элемента в упорядоченный список;

- добавление элемента в конец списка;

- добавление элемента в начало списка;

- удаление заданного элемента из списка.

В программе на языке Паскаль элемент линейного списка объявляется с помощью типа «запись» следующего вида:

Туре TElem = recodrd

Inf: integer; {информационное поле}

Next: TPtr { поле связи (адрес следующего элемента списка) }

End;

TPtr – тип «указатель», который объявляется следующим образом:

Type TPtr=^ TElem;

Указательный тип используется для определения переменных, значением которых являются адреса размещенных в памяти переменных, тип которых совпадает с типом указателя. Для размещения в памяти элементов списка используется стандартная процедура динамического распределения памяти; в языке Паскаль эта процедура имеет имя New. Для удаления элемента из списка служит стандартная процедура освобождения памяти Dispose. Адресное поле последнего элемента списка содержит значение nil, специальный, пустой адрес, который является признаком конца списка.



Пример программы создания и обработки линейного списка.

program Project2;

{$APPTYPE CONSOLE}

uses

Windows;

type TPtr=^TElem;

TElem=record

Inf:integer;

Next:TPtr;

end;

Var Beg: TPtr; Value: integer; Rejim: byte;

Procedure Init_list(Var P: TPtr);

Begin P:=nil; end;

 

 

Procedure Add_list(Var P: TPtr);

Var PT,TPR,Prev:TPtr; Prizn: byte;

begin

write('Input Value: '); read(Value);

if P=nil then begin New(TPR); P:=TPR;

TPR^.Inf:=Value; TPR^.Next:=nil;

write('First element of list is created - ',Value);

end

else begin PT:=P; PREV:=nil; Prizn:=0;

while PT<>nil do

begin if Value<PT^.Inf then begin

if PREV=nil then begin

New(TPR); P:=TPR; TPR^.Inf:=Value;

TPR^.Next:=PT;

write('Element ',Value,' added before first element'); end

else begin

New(TPR); PREV^.Next:=TPR; TPR^.Inf:=Value;

TPR^.Next:=PT;

Write('Element ',Value, ' is added between two other elements ');

end;

Prizn:=1; break;

end;

PREV:=PT; PT:=PT^.Next;

end;

if Prizn=0 then begin

New(TPR); TPR^.Inf:=Value;

TPR^.Next:=nil; PREV^.Next:=TPR;

write('Element ',Value, ' is added after last element');

end; end;

end;

 

Procedure Del_Elem(Var P: TPtr);

Var

PT,TPR,Prev:TPtr; Prizn: byte;

begin

if P=nil then write('list is empty!!!')

else begin write('Input value: '); read(Value);

PT:=P; PREV:=nil; Prizn:=0;

while PT<>nil do begin

writeln(PT^.Inf);

if Value=PT^.Inf then begin

if PREV<>nil then begin

PREV^.Next:=PT^.Next; Prizn:=1;

write('Element is deleted '); break;

end

else begin P:=PT^.Next; Prizn:=1;

write('Element is deleted '); break;

end;

Dispose(PT);

end;

PREV:=PT; PT:=PT^.Next;

end;

if Prizn=0 then write('Element is not founded ' );

end;

end;

 

Procedure Display_list(P: TPtr);

Var

PT:TPtr; i: byte;

begin

i:=0; PT:=P;

if P=nil then begin write('list is empty!!!'); exit; end;

Writeln; write(' List =[');

while PT<>nil do

begin i:=i+1;

write(PT^.Inf,' '); PT:=PT^.Next;

end;

write(']'); write(' Number of elements = ',i);

end;

 

begin

while True do

begin

writeln;

write('0 -- Exit; '); write('1 -- Create; '); write('2 -- Display; ');

write('3 -- Add; '); writeln('4 -- Delete; '); writeln('Input option (0 -- 4)');

readln(Rejim);

case(Rejim) of

0: begin readln; exit; end;

1: Init_list(Beg);

2: Display_list(Beg);

3: Add_list(Beg);

4: Del_Elem(Beg)

else write('Error!!! ')

end; end; end.






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.