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