Код:
const D_SIZE = 100; // константа D_SIZE принимает значение 100
type d_item_t = double; // обьявления типа
type d_list_t = array[1..D_SIZE] of d_item_t; // d_list_t массив типа d_item_t размером 100
type d_comp_t = record // обьявление дека
list: d_list_t;
stack: integer;
queue: integer;
count: integer;
end;
procedure DInc( var a: integer ); // процедура увеличение дека на 1
begin
a := a + 1; // увеличение дека на 1
if a > D_SIZE then a := 1; // если размер дека больше 100, размер дека=1
end;
procedure DDec( var a: integer );// процедура уменьшения дека на 1
begin
a := a - 1; //уменьшение дека на 1
if a < 1 then a := D_SIZE; // если размер дека меньше 1,размер дека = D_SIZE
end;
procedure DReset( var d: d_comp_t );// процедура обнуления дека
begin
d.stack := 1;
d.queue := D_SIZE;
d.count := 0;
end;
function DPushFront( var d: d_comp_t; const item: d_item_t ): boolean;// процедура добавления елемента вверх дека
begin
if d.count = D_SIZE then // если количество елментов = 100
DPushFront := false // то елемент не добавлять
else begin // иначе
d.count := d.count + 1; // увеличение количества на 1
d.list[ d.queue ] := item;
DDec(d.queue);
DPushFront := true; // добавить елемент в верхушку дека
end;
end;
function DPushBack( var d: d_comp_t; const item: d_item_t ): boolean;// процедура добавления елемента вниз дека
begin
if d.count = D_SIZE then // если количество елментов = 100
DPushBack:= false // то елемент не добавлять
else begin // иначе
d.count := d.count + 1; // увеличение количества на 1
d.list[ d.stack ] := item;
DInc(d.stack);
DPushBack := true; // добавить елемент вниз дека
end;
end;
function DPopFront( var d: d_comp_t; var r: d_item_t ): boolean;// процедура удаления елемента вверху дека
begin
if d.count = 0 then // если количество елментов = 0
DPopFront:= false // то елемент не удалять
else begin
DInc(d.queue);
d.count := d.count - 1; // уменьшение количества на 1
r := d.list[ d.queue ];
DPopFront := true; // удалить елемент вверху дека
end;
end;
function DPopBack( var d: d_comp_t; var r: d_item_t ): boolean;// процедура удаление елемента внизу дека
begin
if d.count = 0 then // если количество елментов = 0
DPopBack:= false // то елемент не удалять
else begin
DDec(d.stack);
d.count := d.count - 1; // уменьшение количества на 1
r := d.list[ d.stack ]; // удалить елемент внизу дека
DPopBack := true;
end;
end;
var d: d_comp_t ;
var tmp: double;
begin
DReset(d); // процедура обнуления дека
DPushBack(d , 1); // процедура добавления елемента вниз дека
DPushBack(d , 2); // процедура добавления елемента вниз дека
DPushBack(d , 3); // процедура добавления елемента вниз дека
DPushFront(d , 4); // процедура добавления елемента вверх дека
DPushFront(d , 5); // процедура добавления елемента вверх дека
DPushFront(d , 6); // процедура добавления елемента вверх дека
DPopFront(d , tmp); writeln( tmp ); // процедура удаления елемента вверху дека
DPopBack(d , tmp); writeln( tmp ); // процедура удаление елемента внизу дека
DPopFront(d , tmp); writeln( tmp ); // процедура удаления елемента вверху дека
DPopFront(d , tmp); writeln( tmp ); // процедура удаления елемента вверху дека
DPopFront(d , tmp); writeln( tmp ); // процедура удаления елемента вверху дека
DPopFront(d , tmp); writeln( tmp ); // процедура удаление елемента внизу дека
DPopBack(d , tmp); writeln( tmp ); // процедура удаление елемента внизу дека
DPopBack(d , tmp); writeln( tmp ); // процедура удаление елемента внизу дека
end.