Работа с деком на основе статических массивов - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д