Роман М. писал(а):
Насколько я понимаю, готовых структур данных наподобие этого нет. Или же есть?
Особенность в том, что массив можеть менять размер?
Тогда такой готовой структуры данных в КП нет.
Но можно реализовать самостоятельно. Примерно так:
Код:
CONST
size0 = 16;
TYPE
ArrayList* = POINTER TO RECORD
size-: INTEGER;
p-: POINTER TO ARRAY OF Item
END;
PROCEDURE NewArrayList* () : ArrayList ;
VAR alist: ArrayList;
BEGIN
NEW(alist); NEW(alist.p, size0); alist.size := 0;
RETURN alist
END NewArrayList;
PROCEDURE (a: ArrayList) Add* (x: Item) , NEW ;
VAR p: POINTER TO ARRAY OF Item;
i: INTEGER;
BEGIN
IF a.size = LEN(a.p^) THEN
NEW(p, 2*a.size);
FOR i := 0 TO a.size-1 DO p[i] := a.p[i] END;
a.p := p
END;
a.p[a.size] := x; INC(a.size)
END Add;
Правда, доступ к массиву надо будет либо осуществлять через процедуры, либо открыть доступ к массиву (как в этом примере: если меняется значение уже существующего элемента, можно написать a.p[i] := x).