~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 1283CE00F136B47F51917BC3ED0691EE__1715616360 ✰
Заголовок документа оригинал.:
✰ Queue (abstract data type) - Wikipedia ✰
Заголовок документа перевод.:
✰ Очередь (абстрактный тип данных) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Queue_(abstract_data_type) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/12/ee/1283ce00f136b47f51917bc3ed0691ee.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/12/ee/1283ce00f136b47f51917bc3ed0691ee__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 06:11:29 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 13 May 2024, at 19:06 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Очередь (абстрактный тип данных) — Википедия Jump to content

Очередь (абстрактный тип данных)

Из Википедии, бесплатной энциклопедии
Очередь
Представление очереди FIFO (первым пришел — первым обслужен).
Временная сложность в обозначении большого О
Операция Средний Худший случай
Поиск На ) На )
Вставлять О(1) О(1)
Удалить О(1) О(1)
Пространственная сложность
Космос На ) На )

В информатике очередь объектов , — это совокупность которые поддерживаются в последовательности и могут быть изменены путем добавления объектов на одном конце последовательности и удаления объектов с другого конца последовательности. По соглашению, конец последовательности, в котором добавляются элементы, называется задним, хвостовым или задним краем очереди, а конец, в котором элементы удаляются, называется началом или началом очереди, аналогично словам, используемым, когда люди выстраиваются в очередь в ожидании товаров или услуг.

Операция добавления элемента в конец очереди называется постановкой в ​​очередь , а операция удаления элемента из начала очереди — удалением из очереди . Могут быть разрешены и другие операции, часто включая операцию просмотра или фронтальную операцию, которая возвращает значение следующего элемента, подлежащего исключению из очереди, без его удаления из очереди.

Операции очереди делают ее структурой данных «первым пришел — первым обслужен» (FIFO) . В структуре данных FIFO первый элемент, добавленный в очередь, будет первым удаленным. Это эквивалентно требованию, согласно которому после добавления нового элемента все добавленные ранее элементы должны быть удалены, прежде чем можно будет удалить новый элемент. Очередь — это пример линейной структуры данных или, более абстрактно, последовательной коллекции. Очереди широко распространены в компьютерных программах, где они реализованы как структуры данных в сочетании с процедурами доступа, как абстрактная структура данных или в объектно-ориентированных языках как классы. Распространенными реализациями являются циклические буферы и связанные списки .

Очереди предоставляют услуги в области информатики , транспорта и исследования операций , где различные объекты, такие как данные, объекты, люди или события, сохраняются и удерживаются для последующей обработки. В этих контекстах очередь выполняет функцию буфера . Другое использование очередей — реализация поиска в ширину .

Реализация очереди [ править ]

Теоретически одной из характеристик очереди является то, что она не имеет определенной емкости. Независимо от того, сколько элементов уже содержится, всегда можно добавить новый элемент. Он также может быть пустым, и в этот момент удаление элемента будет невозможно, пока новый элемент не будет добавлен снова.

Массивы фиксированной длины ограничены по емкости, однако утверждение о том, что элементы необходимо копировать в начало очереди, неверно. Простой прием: превратить массив в замкнутый круг и позволить голове и хвосту бесконечно перемещаться по этому кругу, что делает ненужным перемещение элементов, хранящихся в массиве. Если n — размер массива, то вычисление индексов по модулю n превратит массив в круг. Это по-прежнему концептуально самый простой способ построения очереди на языке высокого уровня , но он, по общему признанию, немного замедляет работу, поскольку индексы массива необходимо сравнивать с нулем, а размер массива сравним со временем, затраченным на проверьте, выходит ли индекс массива за пределы, что делают некоторые языки, но этот метод, безусловно, будет предпочтительным методом для быстрой и грязной реализации или для любого языка высокого уровня, который не имеет синтаксиса указателей. Размер массива должен быть объявлен заранее, но некоторые реализации просто удваивают объявленный размер массива при возникновении переполнения. Большинство современных языков с объектами или Указатели могут реализовываться или поставляться с библиотеками для динамических списков. Такие структуры данных могут не указывать фиксированный предел емкости, кроме ограничений памяти. очереди Переполнение возникает при попытке добавить элемент в полную очередь, а опустошение очереди происходит при попытке удалить элемент из пустой очереди.

Ограниченная очередь — это очередь, ограниченная фиксированным количеством элементов. [1]

Существует несколько эффективных реализаций очередей FIFO. Эффективная реализация — это та, которая может выполнять операции — постановку в очередь и удаление из очереди — за время O(1) .

  • Связанный список
    • имеет Двусвязный список O(1) операций вставки и удаления на обоих концах, поэтому это естественный выбор для очередей.
    • Обычный односвязный список имеет эффективную вставку и удаление только на одном конце. Однако небольшая модификация — сохранение указателя на последний узел в дополнение к первому — позволит реализовать эффективную очередь.
  • Дек , реализованный с использованием модифицированного динамического массива

Очереди и языки программирования [ править ]

Очереди могут быть реализованы как отдельный тип данных или могут рассматриваться как частный случай двусторонней очереди (deque) и не реализовываться отдельно. Например, Perl и Ruby позволяют помещать и извлекать массив с обоих концов, поэтому можно использовать функции push иshift для постановки и удаления списка из очереди (или, наоборот, можно использовать unshift и pop ), [2] хотя в некоторых случаях эти операции неэффективны.

C++ Стандартная библиотека шаблонов предоставляет " queue" шаблонный класс, который ограничен только операциями push/pop. Начиная с J2SE5.0, библиотека Java содержит Queueинтерфейс, определяющий операции с очередью; реализующие классы включают в себя LinkedList и (начиная с J2SE 1.6) ArrayDeque. PHP имеет класс SplQueue и сторонние библиотеки, такие как beanstalk'd и Gearman .

Класс очереди UML.svg

Пример [ править ]

Простая очередь, реализованная на JavaScript :

класс   Queue   { 
     конструктор  ()   { 
         this  .   предметы   =   []; 
      } 

     очередь  (  элемент  )   { 
         это  .   предметы  .   нажать  (  элемент  ); 
      } 

     dequeue  ()   { 
         верните   это  .   предметы  .   сдвиг  (); 
      } 
 } 

Чисто функциональная реализация [ править ]

Очереди также могут быть реализованы как чисто функциональная структура данных . [3] Есть две реализации. Первый достигает только за операцию в среднем . То есть амортизированное время , но отдельные операции могут занять где n — количество элементов в очереди. Вторая реализация называется очередью реального времени. [4] и это позволяет очереди быть постоянной с операциями за время наихудшего случая O (1). Это более сложная реализация и требует ленивых списков с мемоизацией .

Амортизированная очередь [ править ]

Данные этой очереди хранятся в двух односвязных списках с именами и . Список занимает переднюю часть очереди. Список сохраняет оставшиеся элементы (то есть конец очереди) в обратном порядке . Его легко вставить в начало очереди, добавив узел в начале очереди. . И если не пусто, его легко удалить из конца очереди, удалив узел во главе . Когда пусто, список переворачивается и присваивается а затем глава удален.

Вставка («в очередь») всегда занимает время. Удаление («удаление из очереди») занимает когда список не пуст. Когда пусто, обратный процесс занимает где это количество элементов в . Но мы можем сказать, что это амортизированное время, поскольку каждый элемент в необходимо было вставить, и мы можем назначить постоянную стоимость для каждого элемента в обратном порядке по сравнению с моментом его вставки.

Очередь в реальном времени [ править ]

Очередь в реальном времени достигает время на все операции, без амортизации. Это обсуждение будет техническим, поэтому помните, что для список, обозначает его длину, NIL представляет собой пустой список и представляет список, голова которого — h , а хвост — t .

Структура данных, используемая для реализации наших очередей, состоит из трех односвязных списков. где f — начало очереди, а r — конец очереди в обратном порядке. Инвариант структуры заключается в том, что s — это задняя часть f без ее первые элементы, то есть . Хвост очереди тогда почти и вставка элемента x в почти . Это сказано почти, потому что в обоих этих результатах . Вспомогательная функция тогда необходимо вызвать, чтобы инвариант был удовлетворен. Необходимо рассмотреть два случая, в зависимости от того, пустой список, и в этом случае , или нет. Формальное определение и где , перевернут f, за которым следует r .

Давайте позвоним функция, которая возвращает f , за которой следует r , перевернута. Предположим далее, что , поскольку это тот случай, когда вызывается эта функция. Точнее, мы определяем ленивую функцию который принимает на вход три списка такие, что и верните конкатенацию f , r перевернутого и a . Затем . Индуктивное определение вращения: и . Время его работы составляет , но, поскольку используется отложенное вычисление, вычисление задерживается до тех пор, пока результаты не будут получены в результате вычисления.

Список . в структуре данных имеет две цели Этот список служит счетчиком , действительно, тогда и только тогда, когда s — пустой список. Этот счетчик позволяет нам гарантировать, что задний список никогда не будет длиннее переднего. Кроме того, использование s , который является хвостом f , приводит к вычислению части (ленивого) списка f во время каждой операции хвоста и вставки . Поэтому, когда , список f является полностью обязательным. Если бы это было не так, внутреннее представление f могло бы быть некоторым добавлением или добавлением... или добавлением, и форсирование больше не было бы операцией с постоянным временем.

См. также [ править ]

Ссылки [ править ]

  1. ^ «Очередь (платформа Java SE 7)» . Документы.oracle.com. 26 марта 2014 г. Проверено 22 мая 2014 г.
  2. ^ «Массив (Ruby 3.1)» . 25 декабря 2021 г. Проверено 11 мая 2022 г.
  3. ^ Окасаки, Крис. «Чисто функциональные структуры данных» (PDF) .
  4. ^ Худ, Роберт; Мелвилл, Роберт (ноябрь 1981 г.). «Операции с очередью в реальном времени на чистом Лиспе». Письма об обработке информации . 13 (2): 50–54. дои : 10.1016/0020-0190(81)90030-2 . hdl : 1813/6273 .

Общие ссылки [ править ]

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 1283CE00F136B47F51917BC3ED0691EE__1715616360
URL1:https://en.wikipedia.org/wiki/Queue_(abstract_data_type)
Заголовок, (Title) документа по адресу, URL1:
Queue (abstract data type) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)