Рефераты. Линейные списки. Стек. Дек. Очередь p>implementation uses Unit1;

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;

PointerBegin := PointerBegin^.Next; if q nil then Dispose(q); end; end;

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^.Info := X;

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^.Info := X;

PointerEndListTwo^.Next := nil;

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;

Inc(i); end; if q nil then // Если элемент существует то вставляем begin

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

ShowMessage('Список пуст');

Form1.Image2.Hide; end; end;

procedure AddToQueue(X: Integer; var PointerEndQueue: List); //Добавить элемент

//в конец очереди (PointerEnd - указатель на последний элемент очереди) begin if PointerEndQueue = nil then //Если очередь еще не существует или пуста

//добавляем в начало begin

New(PointerEndQueue);

PointerEndQueue^.Info := X;

PointerEndQueue^.Next := nil; end else begin

New(PointerEndQueue^.Next);

PointerEndQueue := PointerEndQueue^.Next;

PointerEndQueue^.Info := X;

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;
//////////////////////////////////

end;

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

New(Decks);

Decks^.Info := X;

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



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.