- •Разработка подпрограммы включения элемента в дек
- •I. Спецификация
- •II. Метод решения
- •III. Информационная модель
- •V. Программная модель
- •Разработка подпрограммы исключения элемента из дека
- •I. Спецификация
- •Перечень параметров
- •II. Метод решения
- •III. Информационная модель
- •V. Программная модель
- •Разработка подпрограммы просмотра дека
- •I. Спецификация
- •Вид: процедура
- •Перечень параметров
- •II. Метод решения
- •III. Информационная модель
- •V. Программная модель
- •Программа, моделирующая работу с деком
II. Метод решения
1. Если список пуст, то выполнить операцию исключения невозможно и функция завершается
2. Определение указателя на исключаемый элемент: если исключение из головы, то значение указателя определяется значением головы; если исключение из хвоста, то значение указателя определяется ссылкой первого элемента списка на предыдущий элемент, так как список циклический
3. Формирование выходного параметра – информации, которая хранится в исключаемом элементе
;
4. Определение новых связей в списке: если список содержит только один элемент, то фиксируется, что после исключения список пуст (head:=nil); если список содержит более одного элемента, то формируются новые значения указателей в последующем и предыдущем элементах относительно исключаемого, и, если исключение производится из головы, то формируется новое значение головы.
5. Освобождается динамическая память, занятая исключаемым элементом
dispose(tek)
tek:=nil
6. Формируется признак успешного выполнения операции исключения
iskldek:=true
III. Информационная модель
Назначение |
Имя |
Тип |
Указатель на исключаемый элемент |
tek |
tpel |
V. Программная модель
function iskldek(var head:tpel;var inf:tinf;mesto:boolean):boolean;
var tek:tpel;
begin
if head=nil then
begin
iskldek:=false;
exit
end;
if mesto then
tek:=head
else
tek:=head^.ppred;
inf:=tek^.inf;
if head^.psled=head then
head:=nil
else
begin
tek^.ppred^.psled:=tek^.psled;
tek^.psled^.ppred:=tek^.ppred;
if mesto then head:=head^.psled
end;
dispose(tek);
tek:=nil
iskldek:=true;
end;
Разработка подпрограммы просмотра дека
I. Спецификация
-
Назначение: вывод на экран элементов двунаправленного циклического списка в прямом или обратном порядке
-
Имя: printdek
-
Вид: процедура
-
Перечень параметров
Статус |
Назначение |
Имя |
Тип |
Вид |
Вход |
голова списка |
head |
tpel |
параметр-значение |
Вход |
порядок просмотра элементов (true – от головы списка; false – от хвоста списка) |
mesto |
boolean |
параметр-значение |
где type tinf=integer;
tpel=^tel;
tel=record
inf:tinf;
psled,ppred:tpel
end;
-
Заголовок подпрограммы:
procedure printdek(head:tpel;mesto:boolean);
II. Метод решения
1. Если список пуст, то сообщение об этом и завершение подпрограммы
2. Определение указателя на первый выводимый элемент: если вывод из головы, то указателю присваивается значение головы; если вывод из хвоста, то указателю присваивается адрес последнего элемента
3. Установка счетчика элементов в 1
i:=1
4. Повторять
а) вывод информационной части очередного элемента
вывод(i, "элемент", tek.inf)
б) увеличение счетчика элементов на 1
i:=i+1
в) определение указателя на следующий выводимый элемент: если вывод от головы, то указателю присваивается значение указателя на следующий элемент; если вывод от хвоста, то – значение указателя на предыдущий элемент
г) определение условия окончания просмотра: если вывод от головы, то указатель на очередной элемент совпадает со значением головы; если вывод от хвоста, то указатель на очередной элемент совпадает с указателем на последний элемент списка
до выполнения условия определенного в пункте г)