
- •Алгоритм линейного поиска в одномерном массиве. Зависимость затрат на линейный поиск в среднем и в худшем случае от числа элементов массива. Улучшение линейного поиска: поиск с барьером.
- •Алгоритм двоичного поиска в одномерном отсортированном массиве. Зависимость затрат на двоичный поиск в среднем и в худшем случае от числа элементов массива.
- •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 - Статические и виртуальные методы
Стеки и очереди в непрерывной памяти
Выберем для линейного списка операции получения доступа, добавления и удаления i-го узла, разрешив их только на концах списка (i=1, i=n) и, в зависимости от допустимого набора операций, определим ряд списковых структур.
ЕСЛИ памяти нет ТО
Переполнение
ИНАЧЕ
Добавить новый узел в вершину стека
Записать Х в вершину стека
ВСЕ ЕСЛИ
procedure PUSH (var S:STACK; NEWOBJ:REAL);
begin
if S.TOP=STACKSIZE then
WRITELN(‘Стек заполнен.')
else
begin
S.TOP:= S.TOP+1;
S.OBJ[S.TOP]:=NEWOBJ
end
end;
Удаление объекта из стека
ЕСЛИ стек пуст ТО
Нехватка
ИНАЧЕ
Переписать содержимое из узла вершины в X
Исключить узел из вершины стека
ВСЕ ЕСЛИ
procedure POP (var S:STACK; var OLDOBJ:REAL);
begin
if S.TOP=0 then WRITELN('Стек пуст')
else
begin
OLDOBJ:=S.OBJ[S.TOP];
S.TOP:=S.TOP–1
end
end;
Представление стека в связаннной памяти
Стек, как и любой другой линейный список, можно представить в виде односвязного списка следующим образом:
Type
STACK=^Node;
Node=record
Info:Real;
Next:Stack
End;
Var
TOP:Stack
TOP - указатель на вершину стека. Если стек пуст, то TOP=nil.
Добавление объекта в стек
Procedure PUSH(var S:Stack;item:integer);
Var NewItem:Stack;
begin
if MaxAvail<=SizeOf(NewItem) then
writeln('НЕ ХВАТАЕТ ПАМЯТИ')
else
begin
New(newitem);
NewItem^.Info:=item;
NewItem^.next:=s;
s:=NewItem;
end;
end;
Удаление объекта из стека
procedure POP (var S:STACK; var OLDOBJ:REAL);
var Old:Stack;
begin
if s=Nil then
WRITELN('CТЕК ПУСТ')
else
begin
OLDOBJ:=S^.info;
Old:=S;
S:=S^.next;
Dispose(old);
End
end;
ОЧЕРЕДЬ (Queue, дисциплина обслуживания FIFO, First-In-First-Out, "первым пришел - первым ушел") – линейный список, в котором операция исключения (и обычно всякий доступ) разрешена на одном его конце (в начале), а включения - на другом (в конце).
Представление очереди в непрерывной памяти
Представление очереди в непрерывной памяти (в виде массива с максимальным размером QUEUESIZE) можно организовать так:
Const
QUEUESIZE =…
Tyре
Queue=record
OBJ:array[0..QUEUESIZE] of real;
{указатели на первый и последний элементы}
FRONT, REAR: 0..QUEUESIZE;
End;
Var
Q:QUEUE;
В описании типа Queue массив OBJ начинается с 0, т.е. массив значений содержит QUEUESIZE+1 компонент.
[После рис:]
Так как начало и конец очереди непрерывно перемещаются в пределах массива, удобно представить массив в виде кольца. Для обхода «по кольцу» используется операция mod. Если REAR<QUEUESIZE-1, то он увеличивается обычным способом. Если REAR равен QUEUESIZE-1, то он сбрасывается в 0:
REAR+1=(QUEUESIZE-1)+1=QUEUESIZE
QUEUESIZE mod QUEUESIZE=0
Элемент QUEUESIZE не используется для хранения значений.
Добавление объекта в очередь
ЕСЛИ Памяти нет ТО
Переполнение
ИНАЧЕ
Добавить узел в конец очереди
Записать Х в последний узел
ВСЕ ЕСЛИ
Procedure ADDQ (var Q:QUEUE; NEWOBJ:REAL);
Begin
With Q do
Begin
REAR:= (REAR+1) mod QUEUESIZE,
if REAR = FRONT then
WRITELN(‘Очередь полна')
Else
OBJ[REAR]:=NEWOBJ
End
end; (* процедуры ADDQ*)
Удаление объекта из очереди
ЕСЛИ Очередь пуста ТО
Нехватка
ИНАЧЕ
Переписать содержимое из узла - начала очереди в X
Удалить узел из начала очереди
ВСЕ ЕСЛИ
procedure DELETEQ (var Q : QUEUE; var OLDOBJ:REAL);
begin
with Q do
if REAR=FRONT then
WRITELN(‘Очередь пуста')
Else
Begin
FRONT:=(FRONT + 1) mod QUEUESIZE;
OLDOBJ:=OBJ[FRONT]
End
end; (* процедуры DELETEQ*)
Условие REAR=FRONT в ADDQ проверяет, существует ли более 1 свободной позиции между FRONT и REAR (перед проверкой REAR увеличивается на 1). Если существует только одна свободная позиция, очередь - заполнена.