Скачиваний:
62
Добавлен:
02.05.2014
Размер:
152.06 Кб
Скачать

Для ознакомления работы с деками рассмотрим следующую задачу: разработать программу, обеспечивающую включение элементов в дек, исключение из него элементов и вывод на экран содержимого дека. В качестве дека будем использовать двунаправленный циклический список.

Для разработки предлагается следующая структура программы

dek

Программа работы с деком

vkldek

iskldek

printdek

П/п включения нового элемента в дек

П/п исключения элемента из дека

П/п вывода содержимого дека на экран

Дек представляет собой следующую структуру

Элементом дека является запись, состоящая из трех полей. Первое поле – информационное (inf:tinf), второе и третье – ссылочные поля, указывающие на следующий и предыдущий элементы дека (psled, ppred: tpel, где tpel – ссылочный тип на тип элемента дека)

type

tinf=integer;

tpel=^tel;

tel=record

inf:tinf;

psled,ppred:tpel

end;

Доступ к элементам дека возможен как из "головы", так и из "хвоста", то есть включать и исключать элементы можно как в(из) начало списка, так и в(из) конец.

Разработка подпрограммы включения элемента в дек

I. Спецификация

  1. Назначение: создание динамической переменной типа tel и включение ее в начало или конец двунаправленного циклического списка

  2. Имя: vkldek

  3. Вид: процедура

  4. Перечень параметров

Статус

Назначение

Имя

Тип

Вид

Вход/выход

голова списка

head

tpel

параметр-переменная

Вход

информация, включаемая в список

inf

tinf

параметр-значение

Вход

место включения в список (true – включение в голову списка; false – включение в хвост списка)

mesto

boolean

параметр-значение

где type tinf=integer;

tpel=^tel;

tel=record

inf:tinf;

psled,ppred:tpel

end;

  1. Заголовок подпрограммы:

procedure vkldek(var head:tpel; inf:tinf; mesto:boolean);

II. Метод решения

1. Создание динамической переменной со структурой элемента списка new(tek);

2. Заполнение информационной части нового элемента tek^.inf:=inf;

3. Формирование связей между элементами списка. Если список пуст (head=nil),

то голова указывает на новый элемент, а сам элемент ссылается обоими указателями сам на себя:

Если список не пуст:

то формируются указатели нового элемента –указатель на предыдущий совпадает с указателем, занесенным в голову; указатель на следующий определяется указателем на предыдущий первого элемента списка (на первый элемент списка указывает голова). Затем формируются указатели соседних с новым элементов - предыдущий и следующий элемент соответствующими указателями ссылаются на новый элемент:

Все эти действия можно описать следующим образом:

4. Если включается новый элемент в голову списка, то изменяется значение головы

III. Информационная модель

Назначение

Имя

Тип

Указатель на новый элемент

tek

tpel

V. Программная модель

procedure vkldek(var head:tpel;inf:tinf;mesto:boolean);

var tek:tpel;

begin

new(tek);

tek^.inf:=inf;

if head=nil then

begin

head:=tek;

tek^.ppred:=tek;

tek^.psled:=tek

end

else

begin

tek^.psled:=head;

tek^.ppred:=head^.ppred;

tek^.ppred^.psled:=tek;

tek^.psled^.ppred:=tek

end;

if mesto then head:=tek

end;

Разработка подпрограммы исключения элемента из дека

I. Спецификация

  1. Назначение: исключение из начала или конца двунаправленного циклического списка очередного элемента

  2. Имя: iskldek

  3. Вид: функция

  4. Перечень параметров

Статус

Назначение

Имя

Тип

Вид

Вход/выход

голова списка

head

tpel

параметр-переменная

Выход

информация, хранящаяся в исключаемом элементе

inf

tinf

параметр-переменная

Вход

место исключения из списка (true – исключение из головы списка; false – исключение из хвоста списка)

mesto

boolean

параметр-значение

Возвращаемое значение

признак выполнения операции (true – операция выполнена успешно; false – операцию выполнить невозможно, так как список пуст)

iskldek

boolean

-

где type tinf=integer;

tpel=^tel;

tel=record

inf:tinf;

psled,ppred:tpel

end;

  1. Заголовок подпрограммы:

function iskl(var head:tpel;var inf:tinf;mesto:boolean):boolean;

Соседние файлы в папке Лекции по Паскалю