- •Алгоритм линейного поиска в одномерном массиве. Зависимость затрат на линейный поиск в среднем и в худшем случае от числа элементов массива. Улучшение линейного поиска: поиск с барьером.
- •Алгоритм двоичного поиска в одномерном отсортированном массиве. Зависимость затрат на двоичный поиск в среднем и в худшем случае от числа элементов массива.
- •3. Последовательная и связанная память. Представление линейных списков в последовательной и связанной памяти. Достоинства и недостатки того и другого представления.
- •Стеки и очереди в непрерывной памяти
- •Представление стека в связаннной памяти
- •Представление очереди в непрерывной памяти
- •Представление очереди в связаннной памяти
- •5. Понятие обхода дерева. Виды обходов двоичного дерева. Определение структуры двоичного дерева по двум заданным обходам. Рекурсивные алгоритмы обходов двоичных деревьев.
- •Примеры обходов должны различаться в ответах разных студентов
- •7. Деревья поиска. Алгоритм исключения узла из дерева поиска.
- •8 Понятие программного обеспечения, тенденции развития программного обеспечения.
- •It-услуги
- •9.1 Функциональная и объектно-ориентированные стратегии разработки по
- •Функционально-ориентированная стратегия разработки по (фос)
- •Объектно-ориентированная стратегия разработки по (оос)
- •10 - Основные принципы ооп
- •11.1 - Принципы отладки программных систем.
- •12.1 - Обобщенные и элементарные критерии качества программного обеспечения.
- •12.2 - Обобщенные и элементарные критерии качества программного обеспечения.
- •13.1- Организация коллективов программистов и разработчиков
- •13.2- Организация коллективов программистов и разработчиков
- •14. Тестирование программного обеспечения. Автономное и комплексное тестирование см. Также распечатку гэ_г_тестирование, структуру ответа - лучше по ней
- •14.2 - Тестирование программного обеспечения. Автономное и комплексное тестирование
- •Автономное и комплексное тестирование
- •14.3 - Тестирование программного обеспечения. Автономное и комплексное тестирование алгоритм тестирования подпрограммы / метода (модулей)
- •15.1 - Понятие класса и объекта. Конструкторы и деструкторы.
- •15.2 - Понятие класса и объекта. Конструкторы и деструкторы.
- •16 - Статические и виртуальные методы
3. Последовательная и связанная память. Представление линейных списков в последовательной и связанной памяти. Достоинства и недостатки того и другого представления.
См. также распечатку
Динамическая структура данных - структура, размер которой может изменяться во время выполнения программы.
Линейный список является динамической структурой
Линейный список - множество, состоящее из N>=0 элементов (узлов), структура которого ограничивается их одномерным (линейным) относительным положением, определяемым свойствами:
если n>0, Node1 - первый узел
если 1<i<n, Nodei, i-му узлу предшествует Nodei-1, следует Nodei+1
Noden - последний узел списка
n=0 - список пуст.
При работе с динамическими линейными списками возможно возникновение нехватки (список пуст) и переполнения (список заполнен). При переполнении дальнейшая работа невозможна, так как очередная операция включения не может быть выполнена, нехватка соответствует состоянию «пустой список».
ФОРМЫ ПРЕДСТАВЛЕНИЯ ЛИНЕЙНЫХ СПИСКОВ В ПАМЯТИ
-
Последовательное распределение
Связанное распределение


В последовательной памяти (в виде массива)
Для размещения списка выделяется сплошной участок памяти; его размер известен заранее и остается неизменным. Элементы списка располагаются в последовательных ячейках памяти, один узел следует сразу за другим, местонахождение узла X[j] можно вычислить по формуле: LOC(X[j])=L0+c(j-1)
L0 - базовый адрес (адрес узла X[1]).
j – номер узла
c – размер значения списка
Для обозначения длины таблицы потребуется либо дополнительная переменная (в примере ниже TOP), либо специальный код в последней (или в следующей за ней) ячейке памяти.
|
Const ListSize=10 VAR LIST:array[1..ListSize] of Real; Top: 0..ListSize; |
Top=0 – список пуст (нехватка) Top= ListSize – список заполнен (переполнение) |
или
|
|
|
|
* |
| |
|
|
|
|
^спец значение |
| |
В связанной памяти (в виде массива) (стр.295)
-
Type
List=^Node;
Node=record
info:real;
next:list;
end;
VAR
HEAD:LIST;

Наряду с полем данных используется ссылка на следующий элемент (узел) в списке. Последняя запись имеет в качестве ссылки какое – л. фиксированное значение (nil – в обычном св. списке, адрес первого узла – в кольцевом).
Память под узлы списка выделяется при необходимости, в теле программы. Дополнительно надо использовать переменную, которая будет указывать адрес первого узла, все другие элементы списка могут быть найдены с помощью этого адреса при перемещении по ссылкам.
ВЫВОДЫ:
Связанное распределение (-): дополнительная трата памяти для размещения ссылок на следующий узел.
Последовательное (-): состояние нехватки возникает гораздо чаще, чем в случае св. списков (в первом случае размер списка ограничен размером массива, во втором – свободной оперативной памятью).
Последовательное (+): быстрее осуществляется обращение к элементам (LIST[k] - для доступа к k-му элементу требуется фиксированное время), а в связанном списке потребуется выполнить k итераций:
i:=1; p:=Head;
while (p<>nil) and (i<k) do
begin
i:=i+1;
p:=p^.next
end;
Связанное (+): проще выполняется операция вставки в середину связанного списка (необходимо только переустановка связей). В последовательной таблице (особенно больших размеров) вставка подразумевает перемещение большей части списка.
В связанной памяти:
new(p);
p^.info:=X;
p^.next:= pr^.next;
pr^.next:=p;

В последовательной памяти:
for i:=Top downto k do
A[i+1]:=A[i];
A[k]:=X;
Top:=Top+1
Число перестановок
Min=0 (в конец)
Max=N (в начало)
Среднее=N/2
Связанное (+): проще выполняется операция удаления (необходимо только переустановка связи). При последовательном соединении удаление подразумевает перемещение большей части списка.
В связанной памяти:
pr^.next:=p^.next;
dispose(p)

В последовательной памяти:
for i:=k to top-1 do
A[i]:=A[i+1];
top:=top-1;
Число перестановок
Min=0 (в конце)
Max=N-1 (в начале)
Среднее=(N-1)/2 ~ N/2
Связанное распределение: проще организовать объединение/разбиение двух списков.
Пример (хотя бы на картинке)
Связанное распределение: неявный выигрыш за счет частичного перекрытия списков, совместно использующих некоторые области памяти.
Пример (хотя бы на картинке)
Связанное распределение: возможна организация более сложных структур (из п.7).
ОПЕРАЦИИ, ВЫПОЛНЯЕМЫЕ СО СТЕКОМ, ОЧЕРЕДЬЮ И ДЕКОМ. ДЕК С ОГРАНИЧЕННЫМ ВЫХОДОМ И ПОЛНЫЙ ДЕК. СТРУКТУРЫ ДАННЫХ, ИСПОЛЬЗУЕМЫЕ ДЛЯ РЕАЛИЗАЦИИ СТЕКА, ОЧЕРЕДИ, ДЕКА С ОГРАНИЧЕННЫМ ВЫХОДОМ И ПОЛНОГО ДЕКА.
СМ. РАСПЕЧАТКУ!!!
Все перемешано!!! Возьмите за основу текст распечатки.
Следует
дать определения этих трех структур
привести описание стека/очереди в непрерывной и связной памяти
описать процедуры добавления/удаления элементов в виде псевдокода И/ИЛИ для непрерывной памяти И/ИЛИ для связанной памяти.
Затем сказать, что полный дек – комбинация двух очередей (в непрерывной памяти или в виде двусвязного списка), а дек с ограниченным выходом – комбинация стека и очереди (описание добавления/удаления в этих структурах Вами уже будут описаны выше, просто сделайте ссылку).
