Работа с деком на основе статических массивов - 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;
Но я даже не понимаю то это, или не то) К тому же это Pascal ABC, а мне надо Free Pascal. Как я понял, мне надо чтобы каждый элемент был отдельным массивом, и с деком можно было производить операции (удаление, добавление, что-то еще?) Вот задание:

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.

Объяснение кода листинга программы

  1. Тип данных TData определен как Integer.
  2. Функция deqLength принимает массив q типа array of TData, а также два целых числа h и t в качестве параметров и возвращает целое число.
  3. Функция deqClear принимает массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
  4. Функция deqPushBack принимает число x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
  5. Функция deqPushFront принимает число x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
  6. Функция deqPopBack принимает переменную x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
  7. Функция deqPopFront принимает переменную x типа TData и массив q типа array of TData и два целых числа h и t в качестве параметров и возвращает ничего.
  8. В начале программы определен массив q типа array [0..99] of TData и две переменные h и t типа Integer.
  9. В цикле for x:=1 to 10 выполняется 10 операций deqPushBack, которые добавляют числа от 1 до 10 в массив q.
  10. Вызывается функция deqLength с массивом q, h и t в качестве параметров.
  11. В цикле while h<>t выполняется 10 операций deqPopFront, которые удаляют числа из начала массива q, а затем выводится каждое удаленное число.
  12. По завершении цикла выводится символ новой строки.
  13. В конце программы вызывается функция WriteLn.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы