Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 18

End;

End;

Begin

Begin

End;

Begin

End;

Begin

End;

Begin

End;

Begin

Структура данных список. Базовые операции над списком

END.

Addch(el,Cha,Poinsv)

Readln(el);

End;

EdelCh(Cha,Poinsv,Poinf,el);

Begin

End;

Addch(el,Cha,Poinsv)

Begin

End;

End;

Exit

Begin

writeln('Очередь пуста');

el:=Cha[Poinf];

Poinf:=Poinf+1

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

Poinsv:=1;

Poinf:=1;

{добавление элементов в очередь}

for i:=1 to 5 do

Write('EO='); readln(el);

{удаление из очереди двух элементов}

For i:=1 to 2 do

Writeln('el=',el);

writeln('nel=');

{добавление элемента в конец очереди}

Рассмотрим порядок выполнения алгоритма задачи:

Построение очереди из 5-ти элементов имеем указатель на элемент очереди Poinf:=1, указатель на свободное место в массиве Poinsv:=6, содержимое массива Cha:

индекс            
элементы массива ‘a’ ‘b’ ‘c’ ‘d’ ‘e’  
элементы очереди ‘a’ ‘b’ ‘c’ ‘d’ ‘e’  

 

Удаление из очереди первых двух элементов: Poinf:=3, Poinsv:=6, содержимое массива Cha:

индекс            
Элементы массива ‘a’ ‘b’ ‘c’ ‘d’ ‘e’  
Элементы череди ‘c’ ‘d’ ‘e’  

 

Добавление одного элемента в конец очереди: Poinf:=3, Poinsv:=7, содержимое массива Cha:

индекс            
элементы массива ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘z’
Элементы очереди     ‘c’ ‘d’ ‘e’ ‘z’

Структуры данных очередь и стек являются частными представлениями более сложной структуры данных списка. Списки бывают различных типов. Рассмотрим линейные однонаправленные списки и кольцевые однонаправленные списки.

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

Кольцевой однонаправленный список - это линейный список, который имеет дополнительную связь между последним и первым элементов.

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

¾ построить пустой список;

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

¾ отыскать нужный элемент в списке;

¾ удалить элемент из списка;

¾ вставить элемент в список.

Однонаправленный линейный список может быть представлен в виде двумерного массива. При представлении списка с помощью двумерного массива Sps элементы этого массива Sps[1,j] содержат элементы списка, а элементы массива Sps[2,j] являются указателями и определяют индекс (позицию) каждого последующего элемента в списке. Такой список может быть представлен и в виде одномерного массива, элементами которого являются предопределенные записи из двух полей, смысловое назначение которых аналогично двумерному массиву.

Рассмотрим основные базовые операции по работе с однонаправленным линейным списком, описанные с помощью процедур пользователя, на конкретной задаче.

Задача. Опишите и постройте с помощью двумерного массива Sps линейный однонаправленный список из пяти целых чисел и сделайте этот список пустым. После этого добавьте в список четыре элемента 9,8,7,6, затем найдите указатель на элемент 8 и удалите этот элемент. В конце работы со списком вставьте после элемента со значением 6 элемент со значением 5, предварительно отыскав указатель на элемент со значением 6, а элемент со значением 15 вставьте после элемента со значением 9.

Const maxel=7;

Type Spis=array[1..2,1..maxel] of integer;

Var Assm, Afe: integer; { Assm указывает индекс/адрес первого элемента в списке свободных мест}{ Afe – индекс (адрес) первого элемента в списке. }

El,i,pap,j:integer;

Sps:Spis;

Procedure Nspis(Var Sps:Spis); {процедура оформления пустого списка}

for i:=1 to maxel-1 do

Sps[2,i]:=i+1;

Sps[2,maxel]:=0;

Assm:=1;

Afe:=0;

Procedure Addsp(Var Sps:Spis); { процедура добавления элемента в список}

Var Asmn:integer;

Asmn:=Sps[2,Assm];

Sps[1,Assm]:=el;

Sps[2,Assm]:=Afe;

Afe:=Assm;

Assm:=Asmn

Procedure DelSp(Pap,j:integer; Var Sps:Spis); {процедура удаления элемента из списка}

Sps[2,Pap]:=Sps[2,j];

Sps[2,j]:=Assm;

Assm:=j

Procedure UstSp(j:integer; Var Sps:Spis); {процедура вставки элемента в список}

Var Asmn:integer;

Asmn:=Sps[2,Assm];

Sps[2,Assm]:=Sps[2,j];

Sps[2,j]:=Assm;

Sps[1,Assm]:=El;

Assm:=Asmn;

Procedure PoshSp(Var Sps:Spis; el:integer; Var Pap,j:integer); {процедура поиска указателя (адреса) на элемент списка}

j:=Afe;

Pap:=0;

While (Sps[1,j]<>el) and (j<>0) do

Pap:=j;

j:=Sps[2,j];

if j=0 then Writeln('Элемент не найден')

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

Nspis(Sps); {построение пустого списка}

for i:=1 to 4 do

begin

write(‘el[‘,i,’]=’);

readln(el);

Addsp(Sps) {добавление элементов в список по одному}

end;

el:=8; {найденный указатель j, pap – предыдущий указатель}

PoshSp(Sps,el,pap, j ); {поиск указателя на элемент со значением 8}

Delsp(pap,j,sps); {удаление элемента с указателем j}

el:=6;

PoshSp(Sps,el,pap,j); {поиск указателя на элемент со значением 6}

el:=5;

Ustsp(j,Sps); {вставка элемента со значением 5 после элемента со значением 6}

el:=9;

PoshSp(Sps,el,pap,j); {поиск указателя на элемент со значением 9}

el:=15;

Ustsp(j,Sps); {вставка элемента со значением 15 после элемента со значением 9}

END.

Распишем детально порядок выполнения основного алгоритма.

Построение пустого списка процедура Nspis: Assm:=1, Afe:=0, массив Sps:

 

Индекс массива              
элементы списка              
Указатель на элемент списка              

Добавление четырех элементов в список процедура Addsp: Assm:= 5, Afe:= 4, массив S p s:

 

Индекс массива              
элементы списка              
Указатель на элемент списка              

В результате построения списка из 4-х элементов строится цепочка 6→7→8→9.

Поиск указателя на элемент со значением 8 с помощью процедуры PoshSp: j:=2, Pap:=3;

Удаление элемента со значением 8 из списка с помощью процедуры Delsp: Assm:=2, Afe:=4, массив Sps:

 

Индекс массива              
элементы списка              
Указатель на элемент списка              

В результате удаления из списка элемента со значением 8 строится цепочка 6 →7→9.

Поиск указателя на элемент со значением 6 с помощью процедуры PoshSp: j:=4, Pap:=0;

Вставка элемента со значением 5 в список после элемента со значением 6 с помощью процедуры Ustsp: Assm:=5, Afe:=4, массив Sps:

 

Индекс массива              
элементы списка              
Указатель на элемент списка              

В результате вставки в список элемента со значением 5 после элемента со значением 6 получаем цепочку 6 →5→7→9.

Поиск указателя на элемент со значением 9 с помощью процедуры PoshSp: j:=1, Pap:=3;

Вставка элемента со значением 15 в список после элемента со значением 9 с помощью процедуры Ustsp: Assm:=6, Afe:=4, массив Sps:

 

Индекс массива              
элементы списка              
Указатель на элемент списка              

В результате вставки в список элемента со значением 15 после элемента со значением 9 получаем цепочку 6 →5→7→9→15.

Строить списки можно не только с использованием массива, но и выделять память для элементов списка динамически, освобождая эту память при удалении элементов, если это необходимо.

Контрольные вопросы:

1. Дайте определение статической и динамической памяти. Назовите различие между ними.

2. Дайте определение структуре данных «стек». Опишите принцип работы с данной организацией данных.

3. Дайте определение структуре данных «очередь». Опишите принцип работы с данной организацией данных.

4. Дайте определение структуре данных «список». Опишите принцип работы с данной организацией данных.

<== предыдущая лекция | следующая лекция ==>
 | Роль и задачи аттестации рабочих мест
Поделиться с друзьями:


Дата добавления: 2013-12-13; Просмотров: 255; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.044 сек.