Скачать презентацию Лекция 10 СПИСКИ СПИСКИ ДИНАМИЧЕСКИЕ СТРУКТУРЫ Скачать презентацию Лекция 10 СПИСКИ СПИСКИ ДИНАМИЧЕСКИЕ СТРУКТУРЫ

Списки.ppt

  • Количество слайдов: 21

Лекция 10 СПИСКИ Лекция 10 СПИСКИ

СПИСКИ СПИСКИ

ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ Динамические переменные, создаваемые во время выполнения, позволяют более экономно расходовать ресурс ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ Динамические переменные, создаваемые во время выполнения, позволяют более экономно расходовать ресурс оперативной памяти Однако, главным образом такие переменные используются для формирования на их основе структур, с изменяющимися во время выполнения программы составом и размерами – динамических структур данных

СВЯЗЬ ЭЛЕМЕНТОВ ДИНАМИЧЕСКИХ СТРУКТУР Переменные, входящие в состав динамических структур, необходимо какимлибо образом связывать СВЯЗЬ ЭЛЕМЕНТОВ ДИНАМИЧЕСКИХ СТРУКТУР Переменные, входящие в состав динамических структур, необходимо какимлибо образом связывать друг с другом Поэтому каждый элемент динамической структуры должен содержать один или несколько адресов связанных с ним элементов, т. е. ссылок на эти элементы

ЛИНЕЙНЫЕ СПИСКИ Самый простой способ соединить отдельные элементы между собой заключается в том, чтобы ЛИНЕЙНЫЕ СПИСКИ Самый простой способ соединить отдельные элементы между собой заключается в том, чтобы снабдить каждый из них только одной ссылкой на другой элемент В результате получается динамическая структура, называемая линейным списком Между элементами линейного списка существует отношение предыдущийпоследующий

ТИП ДАННЫХ ЭЛЕМЕНТА СПИСКА Для элемента линейного списка можно определить следующий тип данных: struct ТИП ДАННЫХ ЭЛЕМЕНТА СПИСКА Для элемента линейного списка можно определить следующий тип данных: struct Element { Tdata info; Element *next; }; Здесь Tdata – встроенный или определенный программистом тип данных информационного поля

ЛИНЕЙНЫЙ СПИСОК P q 5 4 3 2 1 ЛИНЕЙНЫЙ СПИСОК P q 5 4 3 2 1

СОЗДАНИЕ СПИСКА Для создания списка необходимо выполнить следующие действия: 1. 2. 3. 4. 5. СОЗДАНИЕ СПИСКА Для создания списка необходимо выполнить следующие действия: 1. 2. 3. 4. 5. определить указатель на начало списка определить рабочую переменную-указатель создать первый элемент списка с помощью указателя на начало создать новый элемент с помощью рабочего указателя связать новый элемент с первым элементом списка

СОЗДАНИЕ СПИСКА 6. 7. переместить указатель на начало на новый элемент если список не СОЗДАНИЕ СПИСКА 6. 7. переместить указатель на начало на новый элемент если список не завершен, то перейти к пункту 4 При таком алгоритме создания списка его элементы располагаются в порядке, обратном порядку ввода, что не всегда бывает удобным Предпочтительным был бы следующий способ создания списка

ЛИНЕЙНЫЙ СПИСОК P q 1 2 3 4 5 ЛИНЕЙНЫЙ СПИСОК P q 1 2 3 4 5

СОЗДАНИЕ СПИСКА Этот алгоритм можно записать следующим образом: 1. 2. 3. 4. определить указатель СОЗДАНИЕ СПИСКА Этот алгоритм можно записать следующим образом: 1. 2. 3. 4. определить указатель на начало списка определить рабочую переменную-указатель создать первый элемент списка с помощью указателя на начало присвоить рабочему указателю значение указателя на последний созданный элемент

СОЗДАНИЕ СПИСКА 5. 6. 7. создать новый элемент с помощью поля ссылки элемента, адресуемого СОЗДАНИЕ СПИСКА 5. 6. 7. создать новый элемент с помощью поля ссылки элемента, адресуемого рабочим указателем присвоить рабочему указателю значение поля ссылки, адресуемого им элемента если список не завершен, то перейти к пункту 5

ОПЕРАЦИИ НАД СПИСКАМИ Основными операциями над списками являются: добавление элемента в указанное место списка ОПЕРАЦИИ НАД СПИСКАМИ Основными операциями над списками являются: добавление элемента в указанное место списка удаление элемента из списка поиск в списке элемента с заданным значением

ДОБАВЛЕНИЕ ЭЛЕМЕНТА В СПИСОК Новый элемент может быть добавлен в список до или после ДОБАВЛЕНИЕ ЭЛЕМЕНТА В СПИСОК Новый элемент может быть добавлен в список до или после указанного Начнем рассмотрение со второго случая Пусть задан указатель p на начало списка и указатель q на некоторый элемент списка Требуется вставить новый элемент после элемента, адресуемого указателем q

ДОБАВЛЕНИЕ ПОСЛЕ УКАЗАННОГО ЭЛЕМЕНТА 4 r P q 1 2 3 5 ДОБАВЛЕНИЕ ПОСЛЕ УКАЗАННОГО ЭЛЕМЕНТА 4 r P q 1 2 3 5

ДОБАВЛЕНИЕ ПОСЛЕ УКАЗАННОГО ЭЛЕМЕНТА Алгоритм добавления нового элемента после указанного: 1. 2. 3. 4. ДОБАВЛЕНИЕ ПОСЛЕ УКАЗАННОГО ЭЛЕМЕНТА Алгоритм добавления нового элемента после указанного: 1. 2. 3. 4. определить рабочий указатель r создать с его помощью новый элемент и записать в него требуемое значение связать новый элемент с элементом, следующим за указанным связать указанный элемент с новым элементом

ДОБАВЛЕНИЕ ДО УКАЗАННОГО ЭЛЕМЕНТА Эта задача фактически сводится к предыдущей: 1. 2. 3. добавить ДОБАВЛЕНИЕ ДО УКАЗАННОГО ЭЛЕМЕНТА Эта задача фактически сводится к предыдущей: 1. 2. 3. добавить новый элемент после указанного скопировать в него значение , хранящееся в указанном элементе записать в указанный элемент требуемое значение

ДОБАВЛЕНИЕ ДО УКАЗАННОГО ЭЛЕМЕНТА 4 r P q 1 2 4 3 5 ДОБАВЛЕНИЕ ДО УКАЗАННОГО ЭЛЕМЕНТА 4 r P q 1 2 4 3 5

УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ СПИСКА Для удаления элемента необходимо иметь ссылку на предшествующий ему элемент УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ СПИСКА Для удаления элемента необходимо иметь ссылку на предшествующий ему элемент Пусть задан указатель p на начало списка и указатель q на элемент списка, предшествующий удаляемому Требуется удалить элемент, следующий за указанным

УДАЛЕНИЕ ЭЛЕМЕНТА СПИСКА P q 1 2 3 4 5 УДАЛЕНИЕ ЭЛЕМЕНТА СПИСКА P q 1 2 3 4 5

ПОИСК В СПИСКЕ Алгоритм сводится к последовательному перемещению вдоль списка с помощью рабочего указателя ПОИСК В СПИСКЕ Алгоритм сводится к последовательному перемещению вдоль списка с помощью рабочего указателя q