<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.178.29.65&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.178.29.65&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/178.178.29.65"/>
		<updated>2026-05-10T19:10:50Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C&amp;diff=19412</id>
		<title>Обсуждение:Очередь</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C&amp;diff=19412"/>
				<updated>2012-03-14T14:07:10Z</updated>
		
		<summary type="html">&lt;p&gt;178.178.29.65: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tick|ticked=1}} Добавить реализацию на двух стеках.&lt;br /&gt;
:Если уж добавлять, то нужно оформить, как и остальные реализации (к примеру, добавить &amp;quot;операции выполняются за &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;&amp;quot; и плюсы/минусы).&lt;br /&gt;
:Хм. А почему медленнее-то? Не понятно.&lt;br /&gt;
:И, да, как я понимаю, в реализации на массивах O(1) амортизированное, а не истинное (из-за необходимости перевыделения памяти).&lt;br /&gt;
{{tick|ticked=1}} Ну, во-первых. В плюсах и минусах написан какой-то трешак местами. Примеры:&lt;br /&gt;
* Плюсы реализации на массиве могут повторяться как минусы реализации на списке, что не есть хорошо, я думаю.&lt;br /&gt;
* «размер очереди ограничен лишь объемом памяти» — корявая фраза. Размер очереди у нас в обоих случаях ничем не ограничен.&lt;br /&gt;
В общем, советую проверить и то, что неверно, выкинуть.&lt;br /&gt;
{{tick|ticked=1}} В минусы реализации на списке нужно добавить тот факт, что в таком варианте память фрагментируется гораздо сильнее и последовательная итерация по такой очереди может быть ощутимо медленнее, нежели итерация по очереди на массиве.&lt;br /&gt;
{{tick|ticked=1}} Советую вообще дать прочитать этот конспект какому-нибудь хоть чуть-чуть шарящему человеку, дабы вычистить фактические ошибки (FIFO - не стратегия, а принцип) и ошибки согласования («Для реализации очереди на списке этого необходимо создать список»).&lt;br /&gt;
{{tick|ticked=1}} Стоит оформить ссылки в соответствии с требованиями ([[Обсуждение:Дискретная_математика_и_алгоритмы#.D0.92.D0.B8.D0.BA.D0.B8.D1.84.D0.B8.D0.BA.D0.B0.D1.86.D0.B8.D1.8F|пункт 9]], [[Обсуждение:Дискретная_математика_и_алгоритмы#.D0.98.D1.81.D1.82.D0.BE.D1.87.D0.BD.D0.B8.D0.BA.D0.B8|требования к оформлению источников]]).&lt;br /&gt;
{{tick|ticked=1}} Что такое «динамическое множество»?&lt;br /&gt;
{{tick|ticked=1}} В псевдокоде реализации на двух стеках в операции push второй if не нужен.&lt;/div&gt;</summary>
		<author><name>178.178.29.65</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C&amp;diff=19411</id>
		<title>Очередь</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C&amp;diff=19411"/>
				<updated>2012-03-14T14:06:29Z</updated>
		
		<summary type="html">&lt;p&gt;178.178.29.65: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определение ==&lt;br /&gt;
[[Файл: Fifo_new.png|thumb|right|150px]]&lt;br /&gt;
'''Очередь''' (''Queue'')  — это структура данных, добавление и удаление элементов в которой происходит путём операций ''Push'' и ''Pop'' соответственно. Притом первым из очереди удаляется элемент, который был помещен туда первым, то есть в очереди реализуется принцип «первым вошел — первым вышел» (''first-in, first-out — FIFO''). Очередь подобна, например, живой очередь в магазине за хлебом. У нее имеется '''голова''' (''head'') и '''хвост''' (''tail''). Когда элемент ставится в очередь, он занимает место в её хвосте, точно так же, как человек занимает очередь последним, чтобы купить хлеб. Из очереди всегда выводится элемент, который находится в её головной части аналогично тому, как человек, который ждал дольше всех, расплачивается за хлеб.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;tex&amp;gt;push&amp;lt;/tex&amp;gt; (запись в очередь) - операция вставки нового элемента.&lt;br /&gt;
*&amp;lt;tex&amp;gt;pop&amp;lt;/tex&amp;gt; (снятие с очереди) - операция удаления нового элемента.&lt;br /&gt;
*&amp;lt;tex&amp;gt;empty&amp;lt;/tex&amp;gt; - проверка очереди на наличие в ней элементов&lt;br /&gt;
&lt;br /&gt;
== Реализация на массиве ==&lt;br /&gt;
Очередь, способную вместить не более &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов, можно реализовать с помощью массива &amp;lt;tex&amp;gt;elements[1..n]&amp;lt;/tex&amp;gt;. Она будет обладать следующими полями:&lt;br /&gt;
:&amp;lt;tex&amp;gt;head&amp;lt;/tex&amp;gt; (голова очереди)&lt;br /&gt;
:&amp;lt;tex&amp;gt;tail&amp;lt;/tex&amp;gt; (хвост очереди)&lt;br /&gt;
:&amp;lt;tex&amp;gt;size&amp;lt;/tex&amp;gt; (размер очереди)&lt;br /&gt;
&lt;br /&gt;
=== push ===&lt;br /&gt;
 push(x)&lt;br /&gt;
     elements[tail] = x&lt;br /&gt;
     tail = (tail + 1) % elements.length&lt;br /&gt;
     size++&lt;br /&gt;
=== pop ===&lt;br /&gt;
 pop()&lt;br /&gt;
     if !empty()&lt;br /&gt;
         then x = elements[head]&lt;br /&gt;
              head = (head + 1) % elements.length&lt;br /&gt;
              size--&lt;br /&gt;
              return x&lt;br /&gt;
=== empty ===&lt;br /&gt;
 empty()&lt;br /&gt;
     return size == 0&lt;br /&gt;
Каждая операция выполняется за амортизированную &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Плюсы:'''&lt;br /&gt;
:- прост в разработке&lt;br /&gt;
:- по сравнению с реализацией на списке, есть незначительная экономия памяти&lt;br /&gt;
'''Минусы:'''&lt;br /&gt;
:- количество элементов в очереди ограничено размером массива (исправляется написанием функции расширения массива)&lt;br /&gt;
:- при переполнении очереди требуется перевыделение памяти и копирование всех элементов в новый массив&lt;br /&gt;
&lt;br /&gt;
== Реализация на списке ==&lt;br /&gt;
Для данной реализации очереди необходимо создать список (&amp;lt;tex&amp;gt;list&amp;lt;/tex&amp;gt;) и операции работы на созданном списке.&lt;br /&gt;
&lt;br /&gt;
Реализация очереди на односвязном списке:&lt;br /&gt;
=== list ===&lt;br /&gt;
* &amp;lt;tex&amp;gt;x.value&amp;lt;/tex&amp;gt; - поле, в котором хранится значение элемента&lt;br /&gt;
* &amp;lt;tex&amp;gt;x.next&amp;lt;/tex&amp;gt; - указатель на следующий элемент очереди&lt;br /&gt;
&lt;br /&gt;
=== push ===&lt;br /&gt;
 push(x)&lt;br /&gt;
     el = tail&lt;br /&gt;
     tail.value = x&lt;br /&gt;
     tail.next = null&lt;br /&gt;
     if size == 0&lt;br /&gt;
         then head = tail&lt;br /&gt;
         else el.next = tail&lt;br /&gt;
     size++&lt;br /&gt;
=== pop ===&lt;br /&gt;
 pop()&lt;br /&gt;
    if !empty()&lt;br /&gt;
        then x = head.value&lt;br /&gt;
             head = head.next&lt;br /&gt;
             size--&lt;br /&gt;
             return x&lt;br /&gt;
=== empty ===&lt;br /&gt;
 empty()&lt;br /&gt;
     return size == 0&lt;br /&gt;
[[Файл: Queue.png|thumb|right|230px]]&lt;br /&gt;
Каждая операция выполняется за время &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Минусы:'''&lt;br /&gt;
* Память фрагментируется гораздо сильнее и последовательная итерация по такой очереди может быть ощутимо медленнее, нежели итерация по очереди реализованной на массиве&lt;br /&gt;
&lt;br /&gt;
== Реализация на двух стеках ==&lt;br /&gt;
Очередь можно реализовать на двух [[Стек|стеках]] &amp;lt;tex&amp;gt;leftStack&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;rightStack&amp;lt;/tex&amp;gt;. Один из стеков &amp;lt;tex&amp;gt;(leftStack)&amp;lt;/tex&amp;gt; будем использовать для операции &amp;lt;tex&amp;gt;push&amp;lt;/tex&amp;gt;, другой для операции &amp;lt;tex&amp;gt;pop&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== push ===&lt;br /&gt;
 push(x)&lt;br /&gt;
     leftStack.push(x)&lt;br /&gt;
=== pop ===&lt;br /&gt;
 pop()&lt;br /&gt;
     if rightStack.empty()&lt;br /&gt;
         then while !leftStack.empty()&lt;br /&gt;
                  do rightStack.push(leftStack.pop)&lt;br /&gt;
     return rightStack.pop()&lt;br /&gt;
Каждая операция выполняется за амортизированную &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Минусы:'''&lt;br /&gt;
* Много времени тратится на перекладывание элементов из одного стека в другой.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Очередь_(программирование) Википедия - Очередь (программирование)]&lt;br /&gt;
* Т. Кормен. «Алгоритмы. Построение и анализ» второе издание, Глава 10.1, стр. 262&lt;br /&gt;
* T. H. Cormen. «Introduction to Algorithms» third edition, Chapter 10.1, p. 262&lt;br /&gt;
&lt;br /&gt;
[[Категория: Амортизационный анализ]]&lt;/div&gt;</summary>
		<author><name>178.178.29.65</name></author>	</entry>

	</feed>