Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (*
- Реализация
- Конструктив
- Хэши
- ДП
- Графы
- События
- Строки
- *)
- (*
- Capacity = кол-во элементов, которые мы можем сохранить
- Size = кол-во элементов в списке
- xxxxxxxxxxxxxxxx
- *)
- Const
- InitialCapacity = 2;
- Type
- TElem = LongInt;
- PElem = ^TElem;
- TArray = Array Of Telem;
- PArray = ^TArray;
- TVector = Record
- Size, Capacity : LongInt;
- Ptr : PArray;
- End;
- Procedure InitVector(Var V : TVector);
- Begin
- V.Size := 0;
- V.Capacity := InitialCapacity;
- GetMem(V.Ptr, SizeOf(TElem) * InitialCapacity);
- End;
- Function Get(Var V : TVector; Pos : LongInt) : PElem;
- Var
- Res : Pointer;
- Begin
- Res := V.Ptr;
- Inc(Res, Pos * SizeOf(TElem));
- Get := Res;
- End;
- Function Pop(Var V : TVector) : PElem;
- Begin
- Dec(V.Size);
- Pop := Get(V, V.Size);
- End;
- Procedure PushBack(Var V : TVector; X : TElem);
- Begin
- If V.Size + 1 < V.Capacity Then
- Begin
- Get(V, V.Size)^ := X;
- Inc(V.Size);
- End Else
- Begin
- Inc(V.Capacity, V.Capacity);
- ReAllocMem(V.Ptr, V.Capacity * SizeOf(TElem));
- PushBack(V, X);
- End;
- End;
- Var
- V : TVector;
- I, X : LongInt;
- Begin
- InitVector(V);
- Read(I);
- For I := 1 To I Do
- Begin
- Read(X);
- PushBack(V, X);
- End;
- For I := 0 To V.Size - 1 Do
- WriteLn(Get(V, I)^);
- WriteLn('Before pop:');
- WriteLn(V.Capacity, ' ', V.Size);
- While V.Size <> 0 Do Pop(V);
- WriteLn('After pop:');
- WriteLn(V.Capacity, ' ', V.Size);
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement