- •Вопрос 1) Основные структуры данных.
- •Вопрос 2) Массивы и их свойства.
- •Вопрос 3) Записи
- •Вопрос 4) Множества
- •Операции над множествами
- •Операции отношения.
- •Вопрос 5) Динамические структуры данных;
- •Вопрос 6) Линейные списки.
- •Вопрос 7) Циклические списки
- •Вопрос 8) Стек и его организация
- •Вопрос 9) Очереди и их организация
- •Вопрос 10) Задачи поиска в структурах данных.
- •Вопрос 11) Алгоритм линейного поиска.
- •Вопрос 12) Алгоритм бинарного поиска.
- •Вопрос 13) Алгоритм Кнута, Мориса- Пратта
- •Вопрос 14) Хэширование данных
- •Вопрос 15) сортировка данных
- •15. Сортировка данных
- •1) Сортировка включением
- •2) Сортировка Шелла
- •3) Обменная сортировка
- •4) Сортировка перемешиванием (Шейкерная сортировка)
- •5) Сортировка со слиянием
- •1) Прямое слияние
- •2) Естественное слияние
- •Вопрос 16) Пузырьковая сортировка.
- •17 Вопрос
- •Вопрос 18) Представление графов и деревьев
- •Вопрос 19) Представление бинарных деревьев.
- •Вопрос 20) Представление графов Способы представления графа в информатике Матрица смежности
- •Матрица инцидентности
- •Список рёбер
- •Вопрос 21) Алгоритмы на графах
- •Алгоритм Дейкстры нахождения кратчайшего пути
Вопрос 6) Линейные списки.
Списки
Обсудим вопрос о том, как в динамической памяти можно создать структуру данных переменного размера.
Разберем следующий пример. В процессе физического эксперимента многократно снимаются показания прибора (допустим, термометра) и записываются в компьютерную память для дальнейшей обработки. Заранее неизвестно, сколько будет произведено измерений.
Если для обработки таких данных не использовать внешнюю память (файлы), то разумно расположить их в динамической памяти.
Во-первых, динамическая память позволяет хранить больший объем информации, чем статическая.
А во-вторых, в динамической памяти эти числа можно организовать в связанный список, который не требует предварительного указания количества чисел, подобно массиву. Что же такое "связанный список"?
Связанный список
Каждый элемент списка состоит из двух частей: информационной части (.X1, X2 и т.д.) и указателя на следующий элемент списка (р2, р3 и т.д.).
Каждую такую пару называют звеном списка.
Последний элемент имеет пустой указатель Nil.
Добавление элемента в список:
Добавление происходит путем присоединения нового элемента к концу списка. При этом значение Nil в последнем элементе заменяется ссылкой на новый элемент цепочки.
Связанный список не занимает лишней памяти. Память расходуется в том объеме, который требуется для поступившей информации.
Описание списка
Туре Тип = ...; {Тип элемента информационного поля}
Связь = ^Звено;
Звено = Record
Элемент: Тип;
След : Связь
End;
Например:
Туре Link = ^Zveno;
Zveno = record
inf : Real;
sled : Link;
End;
Var Beg, Elem:Link;
X:real;
Формирование первого элемента списка:
New(Elem); {выделено в динамической памяти место для размещения вновь формируемого звена}
Elem^.inf:=x; {Сформировано значение поля inf}
Elem^.sled:=nil; {Cформировано значение поля sled}
Чтобы не потерять начало списка заводят вспомогательную переменную Beg, которая всегда указывает на начало списка (дескриптор списка).
Beg:=Elem; {Первый элемент списка}
Формирование следующего элемента списка.
Переменная Elem ссылается на последнее звено списка.
New(elem^.sled);
Elem:=elem^.sled;
Elem^.inf:=x;
Elem^.sled:=nil;
Переменная Elem снова ссылается на последнее звено списка.
Перебор элементов списка
Чтобы последовательно перебрать все звенья цепочки, необходимо понять способ перехода от одного звена к следующему по порядку звену:
Elem := Elem^.sled;
(Аналог i:=i+1; при работе с массивом)
Основные операции при работе со списками:
1. выделение (извлечение) первого элемента (его называют "головой" последовательности, он является результатом операции);
2. выделение "хвоста" последовательности, т.е. того, что остается, если удалить первый элемент;
3. операции, аналогичные (1) и (2), но для последнего элемента вместо первого;
4. выделение i-го элемента или элемента с данным значением компоненты;
5. выделение отрезка последовательности от i-го до j-го элемента;
Основные операции при работе со списками:
6. удаление элементов, выделенных операцией (1-5);
7. замена части последовательности, выделенной операцией (1-5), данным элементом или последовательностью;
8. включение заданного элемента или последовательности перед или после элемента, выделенного операцией (4);
9. сцепление (конкатенация,соединение) двух списков;
10. нахождение длинны списка a.
Двунаправленный список