- •1.Этапы разработки компьютерной программы.
- •2.Алгоритмы и их свойства.
- •3.Формы существования алгоритмов; Блок-схемы; Примеры записи алгоритма в виде блок схемы.
- •4.Классификация алгоритмических языков.
- •5.Понятие структурного программирования.
- •6.Характеристика алгоритмического языка Паскаль.
- •7.Элементы языка Паскаль (алфавит, индентификаторы, константы, выражения, операции).
- •8.Структура программ, при использовании для разработки программы алгоритмического языка Паскаль.
- •9.Операторы Паскаля.
- •1. Составной и пустой операторы
- •2. Операторы ветвлений
- •3. Операторы повторений
- •10.Ввод и вывод данных в Паскале.
- •11.Операторы Паскаля: составной оператор и пустой оператор.
- •12. Операторы Паскаля: условный оператор.
- •13. Операторы Паскаля: операторы повторений.
- •14. Операторы Паскаля: операторы цикла с предусловием.
- •16. Операторы Паскаля: оператор цикла с постусловием (repeat… until).
- •17.Операторы Паскаля: оператор цикла с параметрами (for …to …do).
- •18. Операторы Паскаля: оператор безусловного перехода, метки. Оператор безусловного перехода goto
- •19.Подпрограммы в Паскале.
- •20.Процедуры в Паскале.
- •21.Функции в Паскале.
- •Описание и вызов процедур и функций
- •22.Типы данных в Паскале: простые типы.
- •23. Типы данных в Паскале: структурированные типы. Массивы.
- •24. Типы данных в Паскале: структурированные типы. Записи.
- •25. Типы данных в Паскале: структурированные типы. Множества.
- •26. Типы данных в Паскале: структурированные типы. Файлы (понятие файла, доступ к файлу, процедуры и функции для работы с файлами).
- •27. Типы данных в Паскале: структурированные типы. Файлы (текстовые, типизированные, нетипизированые).
- •28.Аппарат формальных и фактических параметров при работе с подпрограммами.
- •Назначение подпрограмм.
- •Механизм подпрограмм, их описание и вызов
- •Параметры подпрограмм ]Назначение параметров
- •[Править]Формальные и фактические параметры
- •[Править]Способ передачи параметров в подпрограмму
- •[Править]Виды подпрограмм
- •29.Массивы.
- •30.Сортировки массивов. Прямые методы сортировки.
- •31.Сортировка вставкой.
- •32.Сортировка массивов. Прямые методы сортировки.
- •33.Сортировка обменом.
- •34.Сортировка массивов. Прямые методы сортировки
- •35. Сортировка выбором.
- •36.Двоичный поиск в массиве.
- •37. Поиск данных в массиве по ключу.
- •38.Средства тп для работы с файлами.
- •39.Классификация структур данных в Паскале.
- •40.Данные статической структуры в Паскале.
- •41.Переменные строкового типа.
- •42.Динамические структуры данных в Паскале.
- •43.Динамическая память. Понятия адреса и указателя. Объявление указателей. Динамическая память
- •Адреса и указатели
- •Объявление указателей
- •44.Динамическая память. Выделение и освобождение динамической памяти.
- •45.Процедуры и функции для работы с динамической памятью.
- •46.Связанные динамические данные.
- •47. Связанные динамические данные: очередь.
- •Принципы работы с динамической очередью
- •48. Связанные динамические данные: стек.
- •Описание стека
- •Работа с динамическим стеком
- •49. Связанные динамические данные: списки. Динамические структуры данных
- •Классификация структур данных
- •Данные динамической структуры:
- •Статические и динамические переменные в Паскале
- •Указатели
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Присваивание значений указателю
- •Операции с указателями
- •Присваивание значений динамическим переменным
- •Динамические структуры
- •Описание списка
- •Формирование списка
- •Просмотр списка
- •Удаление элемента из списка
- •Динамические объекты сложной структуры
- •50. Связанные динамические данные: деревья.
- •51.Понятие рекурсии, примеры рекурсивных алгоритмов.
Принципы работы с динамической очередью
Условно очередь можно представить в виде трубки с шариками.
Для создания очереди и работы с ней необходимо иметь как минимум два указателя:
на начало очереди (возьмём идентификатор BegQ);
на конец очереди (возьмём идентификатор EndQ).
Кроме того, для освобождения из памяти удаляемых элементов требуется дополнительный временный указатель (возьмём идентификатор P). Дополнительный указатель также часто используется в других ситуациях для удобства работы с очередью.
Создание очереди
Исходное состояние:
Выделение памяти под первый элемент очереди:
Установка указателей на созданный первый элемент:
Добавление элемента очереди.
Исходное состояние:
Выделение памяти под новый элемент и занесение в него информации:
Установка связи между последним элементом очереди и новым, а также перемещение указателя "конец очереди" EndQ на новый элемент:
Удаление элемента очереди.
Исходное состояние:
Извлечение информации из удаляемого элемента в переменную Val и установка на него вспомогательного указателя P:
Переустановка указателя начала очереди BegQ на следующий элемент, используя значение поля Link, которое хранится в первом элементе. После этого освобождается память начального элемента очереди, используя дополнительный указатель P:
Пример 1.
Hиже приводится пример программы, заносящей в очередь 10 символов, набранных на клавиатуре пользователем, и выдающей их на экран в той же последовательности. В ней используются следующие процедуры:
процедура AddEl(val:real) используется для добавления к очереди нового элемента val;
процедура GetDelEl(var val:real) используется для удаления из очереди элемента val.
Program queue;
Type Tptr=^TElem; {Тип указателя на элемент очереди }
TElem=record { Тип элемента очереди : }
inf : char; { информационная часть }
link : Tptr { соединительная часть }
end;
Var begq,endq : Tptr; { Указатели на начало и конец очереди }
value : char;
i : byte;
Procedure AddEl(val : char); { Процедура добавления элемента }
Var p:tptr; { Вспомогательный указатель }
begin
new(p);
p^.inf:=val;
p^.link:=nil;
if endq=nil then begq:=p
else endq^.link:=p;
endq:=p
end;
Procedure GetDelEl(var val : char); { Процедура удаления элемента }
var p : TPtr; { Вспомогательный указатель }
begin
val:=begq^.inf;
p:=begq; begq:=p^.link;
if begq=nil then endq:=nil;
dispose(p)
end;
begin
new(begq); { Создание указателей на начало и конец очереди }
new(endq);
begq:=nil; { Установление указателей на nil }
endq:=nil;
for i:=1 to 10 do
begin
writeln(' введите символ');
readln(value);
addel(value);
end;
i:=1;
while begq<>nil do
begin
getdelel(value);
writeln(i,'-й символ - ',value);
inc(i)
end
end.
Пример 2. Сформировать две очереди по 5 элементов. Объединить очереди в одну, в которой элементы исходных очередей чередуются (начиная с первого элемента первой очереди).
Дек
Дональд Кнут ввел понятие усложненной очереди, которая называется дек (от англ. deq - double ended queue, т.е. очередь с двумя концами).
Определение: Дек - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка.
В каждый момент времени у дека доступны как первый, так и последний элемент, причем добавлять и удалять элементы можно и в начале, и в конце дека.
Частный случай дека - дек с ограниченным входом и дек с ограниченным выходом. Логическая и физическая структуры дека аналогичны логической и физической структуре кольцевой FIFO-очереди. Однако, применительно к деку целесообразно говорить не о начале и конце, а о левом и правом конце.
Дек удобнее представлять двусвязным (разнонаправленным) линейным списком.
Операции над деком:
включение элемента справа;
включение элемента слева;
исключение элемента справа;
исключение элемента слева;
определение размера;
очистка.
Физическая структура дека в статической памяти идентична структуре кольцевой очереди. Динамическая реализация является очевидным объединением стека и очереди.
Задачи, требующие структуры дека, встречаются в вычислительной технике и программировании гораздо реже, чем задачи, реализуемые на структуре стека или очереди. Как правило, вся организация дека выполняется программистом без каких-либо специальных средств системной поддержки.
Примером дека может быть, например, некий терминал, в который вводятся команды, каждая из которых выполняется какое-то время. Если ввести следующую команду, не дождавшись, пока закончится выполнение предыдущей, то она встанет в очередь и начнет выполняться, как только освободится терминал. Это FIFO очередь. Если же дополнительно ввести операцию отмены последней введенной команды, то получается дек.