Работа с деком на основе статических массивов - Free Pascal
Формулировка задачи:
Вообщем я совсем в этом не разбираюсь, очень надеюсь на вашу помощь.
Нашел вот такое:
Но я даже не понимаю то это, или не то)
К тому же это Pascal ABC, а мне надо Free Pascal.
Как я понял, мне надо чтобы каждый элемент был отдельным массивом, и с деком можно было производить операции (удаление, добавление, что-то еще?)
Вот задание:
type
deque = record
data: array[1..MAXSIZE] of integer;
head, tail: integer;
end;
procedure push_front(var d: deque; x: integer);
begin
if d.head < 1 then d.head += maxsize;
d.data[(d.head - 1) mod maxsize] := x;
end;
procedure push_back(var d: deque; c: integer);
begin
d.data[(d.tail + 1) mod maxsize] := x;
end;
function pop_front(var d: deque): integer;
begin
result := d.data[(d.head + 1) mod maxsize];
end;
function pop_back(var d: deque): integer;
begin
if d.head < 1 then d.tail += maxsize;
result := d.data[(d.head - 1) mod maxsize];
end;1. Написать программу для работы со структурой данных "Дек". 2. Структура данных должна быть реализована на основе статических массивов. 3. Работы со структурой должны осуществляться с помощью текстового пользовательского меню.
Решение задачи: «Работа с деком на основе статических массивов»
textual
Листинг программы
type TData = Integer;
function deqLength(const q: array of TData; h, t: Integer): Integer;
begin
h:=t-h; if h<0 then Inc(h,High(q)+1); deqLength:=h;
end;
procedure deqClear(const q: array of TData; var h, t: Integer);
begin
h:=0; t:=0;
end;
procedure deqPushBack(const x: TData; var q: array of TData; var h, t: Integer);
begin
q[t]:=x; Inc(t); if t>High(q) then Dec(t,High(q)+1);
end;
procedure deqPushFront(x: TData; var q: array of TData; var h, t: Integer);
begin
Dec(h); if h<0 then Inc(h,High(q)+1); q[h]:=x;
end;
procedure deqPopBack(var x: TData; const q: array of TData; var h, t: Integer);
begin
Dec(t); if t<0 then Inc(t,High(q)+1); x:=q[t];
end;
procedure deqPopFront(var x: TData; const q: array of TData; var h, t: Integer);
begin
x:=q[h]; Inc(h); if h>High(q) then Dec(h,High(q)+1);
end;
var
h, t: Integer;
q: array [0..99] of TData;
x: TData;
begin
for x:=1 to 10 do deqPushBack(x,q,h,t);
WriteLn(deqLength(q,h,t));
while h<>t do begin
deqPopFront(x,q,h,t); Write(' ',x);
end; WriteLn;
end.
Объяснение кода листинга программы
- Тип данных TData определен как Integer.
- Функция deqLength принимает массив q типа array of TData, а также два целых числа h и t в качестве параметров и возвращает целое число.
- Функция deqClear принимает массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
- Функция deqPushBack принимает число x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
- Функция deqPushFront принимает число x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
- Функция deqPopBack принимает переменную x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
- Функция deqPopFront принимает переменную x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
- В начале программы определен массив q типа array [0..99] of TData и две переменные h и t типа Integer.
- В цикле for x:=1 to 10 выполняется 10 операций deqPushBack, которые добавляют числа от 1 до 10 в массив q.
- Вызывается функция deqLength с массивом q, h и t в качестве параметров.
- В цикле while h<>t выполняется 10 операций deqPopFront, которые удаляют числа из начала массива q, а затем выводится каждое удаленное число.
- По завершении цикла выводится символ новой строки.
- В конце программы вызывается функция WriteLn.