КАТЕГОРИИ: Архитектура-(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:
Удаление из очереди первых двух элементов: Poinf:=3, Poinsv:=6, содержимое массива Cha:
Добавление одного элемента в конец очереди: Poinf:=3, Poinsv:=7, содержимое массива Cha:
Структуры данных очередь и стек являются частными представлениями более сложной структуры данных списка. Списки бывают различных типов. Рассмотрим линейные однонаправленные списки и кольцевые однонаправленные списки. Линейный однонаправленный список – этоструктура данных, состоящая из последовательности однородных и связанных друг с другом элементов, в которую разрешается добавлять элементы между любыми двумя другими в любом месте списка и удалять любые элементы. Кольцевой однонаправленный список - это линейный список, который имеет дополнительную связь между последним и первым элементов. Базовые операции с однонаправленным линейным списком следующие: ¾ построить пустой список; ¾ добавить элемент в список; ¾ отыскать нужный элемент в списке; ¾ удалить элемент из списка; ¾ вставить элемент в список. Однонаправленный линейный список может быть представлен в виде двумерного массива. При представлении списка с помощью двумерного массива 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; Просмотров: 274; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |