procedure DestroyList(PointerBegin: List); var q: List; begin while PointerBegin nil do begin q := PointerBegin;
PointerBegin := PointerBegin^.Next; if q nil then Dispose(q); end; end;
procedure DestroyListTwo(PointerBegin: ListTwo); var q: ListTwo; begin while PointerBegin nil do begin q := PointerBegin;
procedure DestroyRoundList(var PointerRoundList: List); var q, t: List; begin q := PointerRoundList^.Next; PointerRoundList^.Next := nil; while q nil do begin t := q; q := q^.Next; if t nil then Dispose(t); end; PointerRoundList := nil; end;
procedure AddToList(X: Integer; var PointerEndList: List); //Добавить элемент в
//конец списка (PointerEnd - указатель на последний элемент списка) begin if PointerEndList = nil then // Если первый элемент еще не существует begin
New(PointerEndList);
PointerEndList^.Info := X;
PointerEndList^.Next := nil; end else begin
New(PointerEndList^.Next);
PointerEndList := PointerEndList^.Next;
PointerEndList^.Next := nil; end; end;
procedure AddToListAfterPos(X: Integer; Position: Integer); var //Добавить элемент в список после Position i: Integer; q, qNew: List; begin if Position = 0 then // Если позиция = 0, то добавляем в начало begin
New(qNew); qNew^.Info := X; qNew^.Next := ListBegin;
ListBegin := qNew; end else begin q := ListBegin; i := 0; while (i < Position) and (q nil) do // Ищем элемент после которого
// нужно вставить begin q := q^.Next;
Inc(i); end; if q nil then // Если элемент существует то вставляем begin
New(qNew); qNew^.Info := X; qNew^.Next := q^.Next; q^.Next := qNew; end else ShowMessage('Элемент, после которого хотите вставить, удален'); end; end;
procedure AddToRoundList(X: Integer; var PointerRoundList: List); var qRound: List; begin if PointerRoundList = nil then begin
New(PointerRoundList);
PointerRoundList^.Info := X;
PointerRoundList^.Next := PointerRoundList;
RoundList := PointerRoundList; end else begin
New(qRound); qRound^.Info := X; qRound^.Next := PointerRoundList^.Next;
PointerRoundList^.Next := qRound; end; PointerRoundList := PointerRoundList^.Next; end;
procedure DeleteFromRoundList(Position: Integer); var q, h: List; i: Integer; begin if RoundList^.Next = RoundList then //один элемент в списке begin if RoundList nil then Dispose(RoundList);
RoundList := nil; end else // не один элемент в списке begin i := 1; q := RoundList; while i < RoundListPos do begin
Inc(i); q := q^.Next; end; if i 1 then begin h := q^.Next; q^.Next := h^.Next; if h nil then Dispose(h); end else begin q := RoundList^.Next; while q^.Next RoundList do q := q^.Next; h := q^.Next; q^.Next := h^.Next; if h nil then Dispose(h);
RoundList := q^.Next; end; end; if RoundList nil then begin q := RoundList^.Next; i := 1; while q RoundList do begin
Inc(i); q := q^.Next; end; if i = RoundListPos then begin
RoundListPos := 0;
Form1.Image7.Left := 9; end; end; end;
procedure DeleteFromList(Position: Integer); //Удаляет элемент под
//номером Position var i: Integer; q, r: List; begin q := ListBegin; if q nil then // Если список не пуст, то begin if Position = 0 then //Если позиция = 0, то удаляем первый элемент begin
ListBegin := q^.Next; if q nil then Dispose(q); end else begin i := 0; while (i < Position - 1) and (q nil) do //Ищем элемент после
//которого нужно удалить begin q := q^.Next;
Inc(i); end; r := q^.Next; if r nil then //Если удаляемый элемент существует, то удаляем его begin q^.Next := r^.Next; if r nil then Dispose(r); end else ShowMessage('Элемент уже не существует'); end; end else begin
ShowMessage('Список пуст');
Form1.Image1.Hide; end; end;
procedure AddToListTwo(X: Integer; var PointerEndListTwo: ListTwo); //Добавить элемент в
//конец дв-списка (PointerEnd - указатель на последний элемент списка) begin if PointerEndListTwo = nil then //Если список еще не существует или пуст,
//добавляем в начало begin
New(PointerEndListTwo);
PointerEndListTwo^.Info := X;
PointerEndListTwo^.Next := nil;
PointerEndListTwo^.Prev := nil; end else begin
New(PointerEndListTwo^.Next);
PointerEndListTwo := PointerEndListTwo^.Next;
PointerEndListTwo^.Prev := nil; end; end;
procedure AddToListTwoAfterPos(X: Integer; Position: Integer); var //Добавить элемент в двунап. список после Position i: Integer; q, qNew: ListTwo; begin if Position = 0 then //Если позиция = 0, вставляем в начало begin
New(qNew); qNew^.Info := X; qNew^.Next := ListTwoBegin;
ListTwoBegin := qNew; end else begin q := ListTwoBegin; i := 0; while (i < Position) and (q nil) do //Ищем элемент после которого
//нужно вставить begin q := q^.Next;
New(qNew); qNew^.Info := X; qNew^.Next := q^.Next; qNew^.Prev := q;
q^.Next := qNew; end else ShowMessage('Элемент, после которого хотите вставить, удален'); end; end;
procedure DeleteFromListTwo(Position: Integer); //Удаляет элемент
//под номером Position var i: Integer; q, r: ListTwo; begin q := ListTwoBegin; if q nil then //Если удаляемый элемент существует, то begin if Position = 0 then //Если позиция = 0, то удаляем первый элемент begin
ListTwoBegin^.Prev := nil;
ListTwoBegin := q^.Next; if q nil then Dispose(q); end else begin i := 0; while (i < Position - 1) and (q nil) do //Ищем элемент
// после которого нужно удалить begin q := q^.Next;
Inc(i); end; r := q^.Next; if r nil then //Если он существует, то удаляем его begin if r^.Next nil then r^.Next^.Prev := q; q^.Next := r^.Next; if r nil then Dispose(r); end else ShowMessage('Элемент уже не существует'); end; end else begin
Form1.Image2.Hide; end; end;
procedure AddToQueue(X: Integer; var PointerEndQueue: List); //Добавить элемент
//в конец очереди (PointerEnd - указатель на последний элемент очереди) begin if PointerEndQueue = nil then //Если очередь еще не существует или пуста
New(PointerEndQueue);
PointerEndQueue^.Info := X;
PointerEndQueue^.Next := nil; end else begin
New(PointerEndQueue^.Next);
PointerEndQueue := PointerEndQueue^.Next;
PointerEndQueue^.Next := nil; end; end;
function GetQueue(var PointerBegin: List): Integer; //ф-ия получает элемент из
// очереди и возвращает указатель на начало очереди var rQueue: List;
begin rQueue := PointerBegin; if rQueue nil then //Если очередь не пуста begin
PointerBegin := PointerBegin^.Next;
Result := rQueue^.Info; if rQueue nil then Dispose(rQueue); end else begin
ShowMessage('Очередь пуста');
Form1.Edit3.Text := '';
Form1.Button10.Enabled := False;
Form1.Button11.Enabled := False;
Form1.Button12.Enabled := False;
Form1.Image3.Hide; end;
end;
procedure AddToEndQueue(X: Integer);
var Info: Integer; rQueue, qQueue: List; FlagList: Boolean; begin FlagList := True; //Для выделения первого элемента qQueue := nil; rQueue := nil; while QueueBegin nil do //Ищем указатель на последний элемент очереди begin
Info := GetQueue(QueueBegin);
AddToQueue(Info, rQueue); //Формируем новую очередь из элементов старой
//очереди, чтобы не потерять ее if FlagList then ///////////////////////////////////// begin // // qQueue := rQueue; // формируем указатель на очередь //
FlagList := False; // // end; // ////////////////////////////////// end; AddToQueue(X, rQueue); if qQueue nil then QueueBegin := qQueue // определяем указатель на очередь else QueueBegin := rQueue; //////////////////////////////////
procedure AddToStack(X: Integer; var PointerStack: List); //Добавить элемент в
//стек (PointerStack - указатель на стек) var Stacks: List; begin if PointerStack = nil then //Если стек пуст, то формируем его begin
New(PointerStack);
PointerStack^.Info := X;
PointerStack^.Next := nil; end else //иначе добавляем элемент begin
New(Stacks);
Stacks^.Info := X;
Stacks^.Next := PointerStack;
PointerStack := Stacks; end; end;
function GetStack(var PointerStack: List): Integer; //ф-ия получает элемент из
// стека и возвращает указатель на стек var rStack: List; begin rStack := PointerStack; if rStack nil then //Если стек еще не пуст begin
PointerStack := PointerStack^.Next;
Result := rStack^.Info; if rStack nil then Dispose(rStack); end else begin
ShowMessage('Стек пуст');
Form1.Button14.Enabled := False;
Form1.Image4.Hide; end; end;
procedure AddToDeck(X: Integer; var PointerDeckBegin, PointerDeckEnd: ListTwo;
Flag: Integer); //Добавить элемент в дек
//PointerDeckBegin - указатель на начало дека
//PointerDeckEnd - указатель на конец дека var Decks: ListTwo; begin if PointerDeckBegin = nil then //Если дек пуст, то формируем его begin
New(PointerDeckBegin);
PointerDeckBegin^.Info := X;
PointerDeckBegin^.Next := nil;
PointerDeckBegin^.Prev := nil;
PointerDeckEnd := PointerDeckBegin; end else //иначе добавляем элемент begin if Flag = 0 then //добавляем в начало begin
New(Decks);
Decks^.Info := X;
Decks^.Next := PointerDeckBegin;
Decks^.Prev := nil;
PointerDeckBegin^.Prev := Decks;
PointerDeckBegin := Decks; end else //добавлям в конец begin
Decks^.Next := nil;
Decks^.Prev := PointerDeckEnd;
PointerDeckEnd^.Next := Decks;
PointerDeckEnd := Decks; end; end; end;
function GetDeckBegin(var PointerDeckBegin: ListTwo): Integer;
//ф-ия получает элемент из начала дека и возвращает указатель на начало дека. var q: ListTwo; begin if PointerDeckBegin nil then //Если дек не пуст begin
Result := PointerDeckBegin^.Info; q := PointerDeckBegin;
PointerDeckBegin := q^.Next; if PointerDeckBegin nil then PointerDeckBegin^.Prev := nil; if q nil then Dispose(q); end else begin
ShowMessage('Дек пуст');
Form1.Edit5.Text := '';
Form1.Button18.Enabled := False;
Form1.Button19.Enabled := False;
Form1.Button20.Enabled := False;
Form1.Image5.Hide;
Form1.Image6.Hide; end; end;
function GetDeckEnd(var PointerDeckEnd: ListTwo): Integer;
//ф-ия получает элемент из конца дека и возвращает указатель на конец дека. var q: ListTwo; begin if PointerDeckEnd nil then //Если дек не пуст begin
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9