RSS    

   Реферат: Линейные списки. Стек. Дек. Очередь

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

      Result := PointerDeckEnd^.Info;

      q := PointerDeckEnd;

      PointerDeckEnd := q^.Prev;

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.