<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Очереди и двойные очереди  в луа]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Очереди и двойные очереди  в луа форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 28 Apr 2026 15:07:28 +0300</pubDate>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81889/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Посмотрим внимательней на код из примера выше. Если подходить более строго, в текущем виде это не стек, а очередь (bounded queue - ring buffer). Так как стек (LIFO) подразумевает push/pop, а &nbsp;в примере используется паттерн: <B>append → хранить N последних → читать историю</B><br /><br />А это уже, скользящее окно (rolling window) — удобная структура для:<br />* индикаторов;<br />* нормализации;<br />* сигналов;<br />* инженерной разработки функций.<br />Так и в prop-архитектуре обычно используют RingBuffer / RollingWindow, а не сам Stack.<br /><br />1. Проблема текущей реализации в примере кода:<br /><br />table.insert(self.elements, value)<br />table.remove(self.elements, 1)<br /><br />имеет сложность O(n), потому что table.remove(1) сдвигает всю таблицу (и про это на форуме писано переписано). Имеет значение и частота вызова, если это вызывается каждый тик, будет лишняя нагрузка.<br /><br />2. Обычно в Production-решениях используется кольцевой буфер (Ring Buffer). Сложность: push = O(1)<br />Версия utils/ring_buffer.lua<br /><br />
====code====
<pre>local RingBuffer = {}
RingBuffer.__index = RingBuffer

function RingBuffer:new(size)

&nbsp;&nbsp;&nbsp;&nbsp;local o = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buffer = {},
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size = size,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head = 0,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count = 0
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;setmetatable(o, self)
&nbsp;&nbsp;&nbsp;&nbsp;return o
end

function RingBuffer:push(value)

&nbsp;&nbsp;&nbsp;&nbsp;self.head = (self.head % self.size) + 1
&nbsp;&nbsp;&nbsp;&nbsp;self.buffer&#91;self.head&#93; = value

&nbsp;&nbsp;&nbsp;&nbsp;if self.count &#60; self.size then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.count = self.count + 1
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function RingBuffer:get(i)

&nbsp;&nbsp;&nbsp;&nbsp;if i &#62; self.count then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;local idx = (self.head - self.count + i - 1) % self.size + 1
&nbsp;&nbsp;&nbsp;&nbsp;return self.buffer&#91;idx&#93;
end

function RingBuffer:last()

&nbsp;&nbsp;&nbsp;&nbsp;if self.count == 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;return self.buffer&#91;self.head&#93;
end

function RingBuffer:values()

&nbsp;&nbsp;&nbsp;&nbsp;local out = {}

&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, self.count do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&#91;i&#93; = self:get(i)
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;return out
end

function RingBuffer:clear()

&nbsp;&nbsp;&nbsp;&nbsp;self.buffer = {}
&nbsp;&nbsp;&nbsp;&nbsp;self.head = 0
&nbsp;&nbsp;&nbsp;&nbsp;self.count = 0

end

return RingBuffer</pre>
============= <br />
			<i>06.03.2026 09:45:48, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81889/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81889/topic8137/</guid>
			<pubDate>Fri, 06 Mar 2026 09:45:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81798/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Просто пример:<br /><br />
====code====
<pre>-- Класс Stack (LIFO)
Stack = {}
Stack.__index = Stack

function Stack:new(max_size)
&nbsp;&nbsp;&nbsp;&nbsp;local o = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elements = {},&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- таблица-хранилище
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max_size = max_size or 5,&nbsp;&nbsp;-- по умолчанию храним 5 элементов
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count = 0
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;setmetatable(o, Stack)
&nbsp;&nbsp;&nbsp;&nbsp;return o
end

-- Добавить элемент наверх (push)
function Stack:push(value)
&nbsp;&nbsp;&nbsp;&nbsp;table.insert(self.elements, value)
&nbsp;&nbsp;&nbsp;&nbsp;self.count = self.count + 1
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;-- Если превышен максимальный размер, удаляем самый старый (снизу)
&nbsp;&nbsp;&nbsp;&nbsp;if self.count &#62; self.max_size then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.remove(self.elements, 1)&nbsp;&nbsp;-- удаляем первый (самый старый)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.count = self.max_size
&nbsp;&nbsp;&nbsp;&nbsp;end
end

-- Удалить и вернуть верхний элемент (pop)
function Stack:pop()
&nbsp;&nbsp;&nbsp;&nbsp;if self.count == 0 then return nil end
&nbsp;&nbsp;&nbsp;&nbsp;local value = table.remove(self.elements)&nbsp;&nbsp;-- удаляем последний
&nbsp;&nbsp;&nbsp;&nbsp;self.count = self.count - 1
&nbsp;&nbsp;&nbsp;&nbsp;return value
end

-- Посмотреть верхний элемент без удаления (peek)
function Stack:peek()
&nbsp;&nbsp;&nbsp;&nbsp;if self.count == 0 then return nil end
&nbsp;&nbsp;&nbsp;&nbsp;return self.elements&#91;self.count&#93;
end

-- Получить все элементы в порядке от старого к новому (для отображения)
function Stack:get_all()
&nbsp;&nbsp;&nbsp;&nbsp;return self.elements
end

-- Получить все элементы в обратном порядке (новые сверху)
function Stack:get_all_reversed()
&nbsp;&nbsp;&nbsp;&nbsp;local rev = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i = self.count, 1, -1 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert(rev, self.elements&#91;i&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return rev
end

-- Текущий размер
function Stack:size()
&nbsp;&nbsp;&nbsp;&nbsp;return self.count
end</pre>
=============
 <br /><br />Как использовать в скрипте. Вместо отдельных массивов и ручного управления размером создаём стеки:<br /><br />
====code====
<pre>-- В начале скрипта, после конфигурации
local deltaP_stack = Stack:new(20)&nbsp;&nbsp; -- для нормализации (20 значений)
local deltaQ_stack = Stack:new(20)

local c_stack = Stack:new(5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- для отображения последних 5 значений
local alpha_stack = Stack:new(5)
local signal_stack = Stack:new(5)

-- для отображения исходных данных (опционально)
local deltaP_display_stack = Stack:new(5)
local deltaQ_display_stack = Stack:new(5)
local deltaOI_display_stack = Stack:new(5)
local deltaNB_display_stack = Stack:new(5)
local deltaNA_display_stack = Stack:new(5)</pre>
============= <br />
			<i>02.03.2026 11:00:07, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81798/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81798/topic8137/</guid>
			<pubDate>Mon, 02 Mar 2026 11:00:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81797/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_gxN8p06w" href="/user/17142/" bx-tooltip-user-id="17142">Йцукен</a> написал:<br />Но нужно понимать, что нельзя в таком случае в разных потоках работать с одной стороны очереди.<br />=============<br />Если нужно использовать очередь LIFO в разных потоках, то лучше воспользоваться потокобезопасными функциями table.sinsert / table.sremove <br />
			<i>02.03.2026 10:41:28, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81797/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81797/topic8137/</guid>
			<pubDate>Mon, 02 Mar 2026 10:41:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81796/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_CcmdaOYA" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;Вы правы, это классическая и очень правильная структура. Стек — идеальный выбор для хранения фиксированного числа последних значений (5, 20 и т.д.) благодаря дисциплине LIFO и операциям сложности O(1).<br /><br />Но, если мы хотим реализовать стек в чистом Lua для QUIK, то не можем использовать встроенный stack, но можем создать его на основе таблицы. По чему ОПП удобно, таблица знает о себе все. Да можно быстрей, но архитектуру выбираем сами под задачу. Ведь так?<br /><br />Для образного понимания смысла, мне нравятся проводить аналогии. В этом случае, можно сравнить 2 автомобиля. 1. 60 годов, для диагностики неисправностей которого требовался опытный механик. 2. современный авто где без подключения к компьютеру уже не разобраться. Так и использование мета таблиц в луа, это просто современный авто. <br />
			<i>02.03.2026 10:39:07, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81796/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81796/topic8137/</guid>
			<pubDate>Mon, 02 Mar 2026 10:39:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81795/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_rVvBHHrc" href="/user/17142/" bx-tooltip-user-id="17142">Йцукен</a> написал:<br />tbl[#tbl]           -- удалить последний элемент таблицы<br />=============<br />Опечатался. Должно быть так:<br />
====code====
<pre>tbl&#91;#tbl&#93; = nil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- удалить последний элемент таблицы</pre>
=============
<br />Но умные люди и так всё поняли, в отличие от недоделанного бота. <br />
			<i>02.03.2026 10:15:45, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81795/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81795/topic8137/</guid>
			<pubDate>Mon, 02 Mar 2026 10:15:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81790/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_FKjr5spU" href="/user/17142/" bx-tooltip-user-id="17142">Йцукен</a> написал:<br /> <br />====quote====<br />А вообще для LIFO достаточно:<br />=============<br /> 
====code====
<pre>&nbsp;&nbsp;tbl&nbsp;&nbsp;=&nbsp;&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- создать таблицу 
tbl&#91; # tbl +&nbsp;&nbsp;1 &#93;&nbsp;&nbsp;=&nbsp;&nbsp;v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- добавить в конец таблицы 
v&nbsp;&nbsp;=&nbsp;&nbsp;tbl&#91; # tbl&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- получить последний элемент таблицы 
tbl&#91; # tbl&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- удалить последний элемент таблицы&nbsp;&nbsp; </pre>
=============
<br />=============<br /><br />tbl&#91; # tbl&#93; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- удалить последний элемент таблицы<B> Как это удаляет?<br /></B>=================<br />Так просто лишь у дилетантов.<br />---------------------<br />Посмотрите как реализован стек в VMLua.<br />==========================<br />Операции<br />Некоторые операции, которые можно производить со стеком:<br /><ul><li>Push — добавляет новый элемент в стек. <noindex><a href="https://practicum.yandex.ru/blog/struktura-stek-v-programmirovanii/" target="_blank" rel="nofollow">practicum.yandex.ru</a></noindex><br /><li>Pop — удаляет элемент, который находится сверху. <noindex><a href="https://practicum.yandex.ru/blog/struktura-stek-v-programmirovanii/" target="_blank" rel="nofollow">practicum.yandex.ru</a></noindex><br /><li>Peek (или Top) — показывает верхний элемент стека, но не убирает его. <noindex><a href="https://practicum.yandex.ru/blog/struktura-stek-v-programmirovanii/" target="_blank" rel="nofollow">practicum.yandex.ru</a></noindex><br /><li>Size — возвращает количество элементов, которые находятся в стеке. <noindex><a href="https://practicum.yandex.ru/blog/struktura-stek-v-programmirovanii/" target="_blank" rel="nofollow">practicum.yandex.ru</a></noindex><br /></ul>СложностьВременная сложность всех основных операций стека, работающих по принципу LIFO, — O(1). Пространственная сложность — O(n), где n — количество элементов. <noindex><a href="https://skyeng.ru/it-industry/it/chto-takoe-stek-i-kak-on-rabotaet/" target="_blank" rel="nofollow">Skyeng.ru</a></noindex><br />ПрименениеПринцип LIFO используется в разных областях, например:<br /><ul><li>Программирование — например, когда одна задача вызывает другую и нужно вернуться обратно после завершения. <noindex><a href="https://practicum.yandex.ru/blog/struktura-stek-v-programmirovanii/" target="_blank" rel="nofollow">practicum.yandex.ru</a></noindex><br /><li>История действий в браузере — каждый переход по ссылке сохраняется в стек, при нажатии «Назад» происходит pop, и открывается предыдущая страница. <noindex><a href="https://practicum.yandex.ru/blog/struktura-stek-v-programmirovanii/" target="_blank" rel="nofollow">practicum.yandex.ru</a></noindex><br /><li>Управление товарными запасами на складе — первыми отгружаются товары, поступившие на склад последними. Новая партия размещается поверх предыдущей, что упрощает процессы погрузки и разгрузки. <noindex><a href="https://skladolog.ru/articles/upravlenie-tovarnymi-zapasami-na-sklade-metody-fifo-fefo-lifo/" target="_blank" rel="nofollow">skladolog.ru</a></noindex><br /></ul><B>Важно:</B> <br />в некоторых языках и системах у стека фиксированный объём памяти, например, в низкоуровневых языках (C, C++).<br /> В многопоточных приложениях доступ к стеку нужно контролировать — если два потока используют стек одновременно, могут возникнуть ошибки из-за конфликта при обращении к данным<br />========================================<br />Программировать тоже надо учиться. <br />
			<i>02.03.2026 07:08:08, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81790/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81790/topic8137/</guid>
			<pubDate>Mon, 02 Mar 2026 07:08:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81789/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_zXJSGuF0" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />подход дает возможность, из одного подхода создавать разные очереди?<br />=============<br />Не, ну если вам нужно одновременно для одной очереди и FIFO и LIFO, тогда да, очередь с двумя индексами более подходящая под эту задачу. Но нужно понимать, что нельзя в таком случае в разных потоках работать с одной стороны очереди. В разных потоках можно только FIFO: в одном потоке положил, в другом вытащил.<br />Но если используется для конкретной задачи LIFO, то не стоит усложнять. Достаточно классических методов работы с таблицами.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_IPd8ySR1" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />В Вашем примере меня сильно смущает вот этот момент self[idx] = nil дыр не будет?<br />=============<br />Каких дыр? Мы вынули последний элемент таблицы, и присвоили ему значение nil. В таком случае оператор # работает корректно.<br />Но я просто привёл пример, как можно упростить ваш код, если вам &quot;кровь из носу&quot; нужно ООП.<br />А вообще для LIFO достаточно:<br />
====code====
<pre>tbl = {}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- создать таблицу
tbl&#91;#tbl+1&#93; = v&nbsp;&nbsp;&nbsp;&nbsp; -- добавить в конец таблицы
v = tbl&#91;#tbl&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- получить последний элемент таблицы
tbl&#91;#tbl&#93;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- удалить последний элемент таблицы</pre>
=============
Но вы это и без меня знаете &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_wink.png" border="0" data-code=":wink:" data-definition="SD" alt=":wink:" style="width:16px;height:16px;" title="Шутливо" class="bx-smile" /> <br />
			<i>01.03.2026 21:54:06, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81789/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81789/topic8137/</guid>
			<pubDate>Sun, 01 Mar 2026 21:54:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81783/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_09rItVcJ" href="/user/17142/" bx-tooltip-user-id="17142">Йцукен</a>, Речь шла прежде всего про универсальность, какой еще подход дает возможность, из одного подхода создавать разные очереди? Тут удивляться не чему, одна базовая и делай из нее &nbsp;под свою задачу что нужно. А если это модуль то и сколько нужно. Возможно инженерия кода и заслуживает замечаний, но речь идет о самом подходе. В Вашем примере меня сильно смущает вот этот момент self[idx] = nil дыр не будет? А если все в порядке, то почему бы нет, все на первый взгляд элегантно? <br />
			<i>01.03.2026 19:32:33, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81783/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81783/topic8137/</guid>
			<pubDate>Sun, 01 Mar 2026 19:32:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81782/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Tiyn6JnJ" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />Но иногда &nbsp;просто нужен тупой код прямолинейный как стрела<br />=============<br />Прямолинейный для LIFO - это работа с таблицей стандартными методами.<br />Поскольку у вас добавление и извлечение всегда с конца таблицы, то как функции table.insert / table.remove, так и обычное присваивание последнему элементу в таблице будет работать вполне себе быстро и понятно.<br />Зачем городить очередь с двумя индексами для LIFO - большая загадка &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_eek.png" border="0" data-code=":shock:" data-definition="SD" alt=":shock:" style="width:16px;height:16px;" title="Удивленно" class="bx-smile" /> <br />
			<i>01.03.2026 19:13:13, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81782/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81782/topic8137/</guid>
			<pubDate>Sun, 01 Mar 2026 19:13:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81344/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Если Вы про оптимизацию, то &nbsp;согласен без спорно быстрее. Но иногда &nbsp;просто нужен тупой код прямолинейный как стрела, для пользователей типа меня, просто что его можно было прочесть, и успокоится что все выполняется как надо. Здесь ключевое выполняется как надо? А разве нет? <br />
			<i>12.02.2026 22:21:28, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81344/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81344/topic8137/</guid>
			<pubDate>Thu, 12 Feb 2026 22:21:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81321/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_np4D3EGL" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />---- lifo из двусвязной очереди и пример позволят вести себя как стек - обеспечивая LIFO-порядок<br />=============<br />Можно гораздо проще:<br />
====code====
<pre>local LIFO = {}
LIFO.__index = LIFO
function LIFO.new()
&nbsp;&nbsp;return setmetatable({}, LIFO)
end
function LIFO:push(v)
&nbsp;&nbsp;self&#91;#self+1&#93; = v
end
function LIFO:pop()
&nbsp;&nbsp;local idx = #self
&nbsp;&nbsp;if idx == 0 then return nil end
&nbsp;&nbsp;local v = self&#91;idx&#93;
&nbsp;&nbsp;self&#91;idx&#93; = nil
&nbsp;&nbsp;return v
end</pre>
============= <br />
			<i>12.02.2026 15:50:01, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81321/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81321/topic8137/</guid>
			<pubDate>Thu, 12 Feb 2026 15:50:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81310/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3kyr2Cgt" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />-- Создание LIFO из двусвязанной очереди<br />=============<br />table.insert / table.remove делают то же самое, только быстрее. <br />
			<i>12.02.2026 10:35:27, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81310/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81310/topic8137/</guid>
			<pubDate>Thu, 12 Feb 2026 10:35:27 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81147/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			А, разобрался: функция Squeeze возвращает индекс в массиве "по кольцу" в пределах заданного периода. <br />
			<i>04.02.2026 18:10:47, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81147/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81147/topic8137/</guid>
			<pubDate>Wed, 04 Feb 2026 18:10:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81055/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_70LyWQ3J" href="/user/3132/" bx-tooltip-user-id="3132">Nikolay</a> написал:<br />Открываете пример MA.lua, например расчет SMA, и видите использование массива sum равного длине периода.<br />=============<br /><br />Да нет, вроде, в sum хранятся значения по всем свечам:<br /><br />
====code====
<pre>function F_SMA()
&nbsp;&nbsp;&nbsp;local sum = {}
&nbsp;&nbsp;&nbsp;local it = {p=0, l=0}
return function (I, P, VT, ds)
&nbsp;&nbsp;&nbsp;if I == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it = {p=0, l=0}
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;if CandleExist(I,ds) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if I~=it.p then it={p=I, l=it.l+1} end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local Ip,Ipp,Ippp = Squeeze(it.l,P),Squeeze(it.l-1,P),Squeeze(it.l-P,P)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&#91;Ip&#93; = (sum&#91;Ipp&#93; or 0) + GetValueEX(it.p,VT,ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if it.l &#62;= P then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (sum&#91;Ip&#93; - (sum&#91;Ippp&#93; or 0)) / P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
return nil
end
end</pre>
============= <br />
			<i>28.01.2026 11:46:39, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81055/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81055/topic8137/</guid>
			<pubDate>Wed, 28 Jan 2026 11:46:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message75010/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			----- lifo из двусвязной очереди и пример позволят вести себя как стек - обеспечивая LIFO-порядок.<table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td><span class="bx-font" style="color:#161616">-- Создание класса двусвязной очереди</span><br /><span class="bx-font" style="color:#161616">local Queue = {} </span><br /><span class="bx-font" style="color:#161616">Queue.__index = Queue</span><br /><br /><span class="bx-font" style="color:#161616">function Queue.new()</span><br /><span class="bx-font" style="color:#161616"> &nbsp;return setmetatable({first = 0, last = -1}, Queue)</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">function Queue:push_left(value)</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local first = self.first - 1</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self.first = first</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self&#91;first&#93; = value</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">function Queue:pop_left()</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local first = self.first</span><br /><span class="bx-font" style="color:#161616"> &nbsp;if first &gt; self.last then error(&quot;queue is empty&quot;) end</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local value = self&#91;first&#93;</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self&#91;first&#93; = nil &nbsp; &nbsp; &nbsp; &nbsp;-- to allow garbage collection (разрешить сбор мусора)</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self.first = first + 1</span><br /><span class="bx-font" style="color:#161616"> &nbsp;return value</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">function Queue:push_right(value)</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local last = self.last + 1</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self.last = last</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self&#91;last&#93; = value</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">function Queue:pop_right()</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local last = self.last</span><br /><span class="bx-font" style="color:#161616"> &nbsp;if self.first &gt; last then error(&quot;queue is empty&quot;) end</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local value = self&#91;last&#93;</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self&#91;last&#93; = nil &nbsp; &nbsp; &nbsp; &nbsp; -- to allow garbage collection (разрешить сбор мусора)</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self.last = last - 1</span><br /><span class="bx-font" style="color:#161616"> &nbsp;return value</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">-- Создание LIFO из двусвязанной очереди</span><br /><span class="bx-font" style="color:#161616"> &nbsp;local LIFO = {}</span><br /><span class="bx-font" style="color:#161616"> &nbsp;LIFO.__index = LIFO</span><br /><span class="bx-font" style="color:#161616">function LIFO.new()</span><br /><span class="bx-font" style="color:#161616"> &nbsp;return setmetatable({queue = Queue.new()}, LIFO)</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">function LIFO:push(value)</span><br /><span class="bx-font" style="color:#161616"> &nbsp;self.queue:push_right(value)</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">function LIFO:pop()</span><br /><span class="bx-font" style="color:#161616"> &nbsp;return self.queue:pop_right()</span><br /><span class="bx-font" style="color:#161616">end</span><br /><br /><span class="bx-font" style="color:#161616">-- Пример использования</span><br /><span class="bx-font" style="color:#161616">local lifo = LIFO.new()</span><br /><span class="bx-font" style="color:#161616">lifo:push(1)</span><br /><span class="bx-font" style="color:#161616">lifo:push(2)</span><br /><span class="bx-font" style="color:#161616">print(lifo:pop()) &nbsp;-- Выведет 2</span><br /><span class="bx-font" style="color:#161616">print(lifo:pop()) &nbsp;-- Выведет 1 </span></td></tr></tbody></table><br />Еще одна реализация стека, по сути это тоже самое что и в букваре только реализация в виде класса, просто удобней пользоваться., наследуется без проблем, легко дописать фифо. У себя делаю лифо &nbsp;для контроля памяти, создавая динамические окна. Выкладываю может кому еще сгодится. <br />
			<i>20.03.2024 21:44:56, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message75010/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message75010/topic8137/</guid>
			<pubDate>Wed, 20 Mar 2024 21:44:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73971/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_1OuE7XyI" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a>, &nbsp;Я Вас поздравляю с отличным решением! Я ушел заниматься своим, а то действительно не соберу. НО ХОЧЕТСЯ ПОДНЯТЬ &nbsp;новую тему? <br />
			<i>22.01.2024 11:30:25, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73971/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73971/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 11:30:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73970/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_LVwiuqlz" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a>, С ног на голову, говорите? Ну, давайте поставим на ноги: мой скрипт давно написан, отлажен, работает в боевом режиме прямо сейчас, тикеров у него на два порядка больше, чем у вас, никаких проблем ни с памятью, ни с быстродействием нет от слова &quot;совсем&quot;, все глюки системного софта (по крайней мере, все известные мне) купированы, моё &quot;частное решение&quot; реализовано! Ваше же &quot;общедоступное решение&quot; НЕ реализовано и не будет реализовано НИКОГДА. <br />
			<i>22.01.2024 11:26:34, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73970/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73970/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 11:26:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73969/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_Fke6oBHY" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br />Всё, тема исчерпана, вопрос закрыт.<br />=============<br /> <br />
			<i>22.01.2024 11:20:12, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73969/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73969/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 11:20:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73968/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_X6oZeJsp" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a>, Вы опять все с ног на голову, пример отличный от слова совсем! <img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp;почему уже сказано на свои вопросы я ответ получил!<br /><br />То что вы сейчас описали, свой пример это подход частное решение - личное, я показал обще доступное решение которое с экономит массу времени тем кто только начинает кодить, и мне помог разобраться!<br />Есть &nbsp;такой подход я его опишу словами из широко известного фильма &quot;ЗА ДЕРЖАВУ ОБИДНО&quot;. А пользоваться этим или писать свое они разберутся без нас с Вами.<br /><br />Ну и последнее не нужно к молодому поклонению применять дипломатические термины, как воспитали , чему научили то и получили. <br />
			<i>22.01.2024 11:18:02, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73968/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73968/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 11:18:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73967/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_Nhuzt1Hu" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a>, Почему же зря? Я совершенно серьёзно спрашивал! Этот придурок постит разные &quot;весёлые картинки&quot;, да крутит в своих дурацких тестах многомиллионные циклы. А здесь ОТКУДА они? Даже у меня скрипт контролирует СОТНИ тикеров, а у вас с николзом даже не десятки.<br /><br />Мне насрать, что там куда &quot;легко встроить&quot;. Встроили, наконец? Реализовали свою &quot;основную идею&quot;? Собрали &quot;и другие подходы кроме ФИФО и ЛИФО&quot;? А если и собрали, то ЗА КАКИМ ХРЕНОМ? И что ещё за &quot;эффективность за счёт хранения массива индексов&quot;? Я вот никаких индексов не храню, память на это не трачу - может, именно поэтому её у меня ДО МАМЫ, а вам, бедолагам, никогда ничего не хватает? И у меня не только &quot;новая созданная&quot;, а ВАЩЕ НИ ОДНА таблица не растёт! И у меня ТРИ бара на таймфрейм, а на М1 вообще ни одного. <br />Ответ очевиден ПРОСРАЛИ и не один МЕГАбайт! <br />
			<i>22.01.2024 11:03:45, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73967/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73967/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 11:03:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73966/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_d53PI0V3" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br />Много памяти сэкономили? Хотя бы на КИЛОбайт наберётся?<br />=============<br />Ну зря Вы!<br />1) это модуль легко встроить в любую конструкцию, быстрая реализация основной идеи;<br />2) универсальность можно собрать и другие подходы кроме ФИФО и ЛИФО;<br />3) Эффективность за счет хранения массива индексов (Возможно есть и более эффективный варианты, кому нужно всегда можно заменить на свой) ;<br />4) размер новой таблицы легко устанавливается и меняется под задачу;<br />.......<br />n) Расход Памяти стабилизируется. Так как новая созданная таблица не растет.<br /> Я этот пример доводил до 100 000 значений первоначального массива (~60-70 бар на М1 на фьючерсах). Все четко отработало. <br />Ответ очевиден сэкономили и не один КИЛОбайт! <br />
			<i>22.01.2024 10:45:36, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73966/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73966/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 10:45:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73965/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_qOXjmYp7" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a>, Чему тут радоваться? Многодневному дебилизму? Кстати, что такое &quot;циклический массив&quot;? Потребовался? Вам тут тыщу раз говорили, что проще стека ничего нет, но Вам, оказывается, нужно было эту простейшую конструкцию реализовать непременно через жопу. Ну и как успехи?: Много памяти сэкономили? Хотя бы на КИЛОбайт наберётся? <br />
			<i>22.01.2024 10:22:28, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73965/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73965/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 10:22:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73964/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_Z3HZhDkN" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a>, &nbsp;Чему Вы радуетесь, если уж категорично то и Вы в этом списке!<br />Все что требовалось показать вот эти две записи:<br /><br />---- по принципу «последний вошел, первый вышел» (Last-In-First-Out или LIFO)<br />
====code====
<pre>local lifo=List.new() List.pushlast(lifo,i) List.popfirst(lifo)
</pre>
=============
---- «первый вошел, первый вышел» (First-In-First-Out или FIFO)
====code====
<pre>local fifo=List.new() List.pushfirst(fifo,i) List.popfirst(fifo)</pre>
=============
Не знамя заберем <img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp; <br />
			<i>22.01.2024 10:13:18, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73964/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73964/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 10:13:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73963/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Ха-ха-ха! Только я отправил пост, что никто никогда не поймёт, что хочет автор, как увидел пост от автора, что он-таки понял! И что же он понял? МАМА ДОРОГАЯ! Оказывается, не &quot;очереди и двойные очереди в луа&quot;, а &quot;реализация принципа LIFO&quot;! Оказывается, &quot;с помощью двусторонней очереди собран СТЕК&quot;! Ай да <a class="blog-p-user-name" id="bp_K3IxmrFP" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, ай да сукин сын! И как же прав Лавров: &quot;Дебилы, б&amp;я&quot;! <br />
			<i>22.01.2024 09:45:44, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73963/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73963/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 09:45:44 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73962/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			СВЕРШИЛОСЬ ЧУДО! На 25-й странице ветки один человек всё-таки понял, что хочет автор этой темы! Но, поскольку этот человек - <a class="blog-p-user-name" id="bp_m94Y5nHm" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, , остальным он это всё равно не сумеет рассказать, даже самому автору. Зато теперь ясно, что для того, чтобы автор получил то, что он хочет, ему нужен циклический массив. Что это за зверюга такая, Википедия не в курсе, я смутно припоминаю, что во времена моей молодости что-то похожее называлось &quot;кольцевая очередь&quot;, а автору для решения своей проблемы наверняка потребуется ещё с полсотни страниц. <br />
			<i>22.01.2024 09:32:19, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73962/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73962/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 09:32:19 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73961/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Пример от <a class="blog-p-user-name" id="bp_QFZm9aT4" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, &nbsp;оказал не оценимую помощь, помог разобраться в чем была путаница и не до понимание, помог собрать вариант который я объяснял.<br /><br />Но прежде чем продолжить , должен извиница перед <a class="blog-p-user-name" id="bp_clogiA5T" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a>, Не чего не забыли, полвека показатель, по прежнему в строю на боевом коне знамя в руках. <br />А также поблагодарить всех кто принимал участие в обсуждении.<br /><br />Ниже пример, то о чем пытался я сказать.<br />И что мы видим, реализован принцип LIFO &nbsp;«последний вошел, первый вышел» (Last-In-First-Out или LIFO). Это вариант стека с помощью двусторонней очереди, не смотря на то что алгоритм называется двусторонняя очередь, собран СТЕК! &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_eek.png" border="0" data-code=":shock:" data-definition="SD" alt=":shock:" style="width:16px;height:16px;" title="Удивленно" class="bx-smile" /> <br /><br />Другую путаницу вносит название функции popfirst удаление первого, несмотря на то что операция называется удаление первого элемента, индекс первого элемента растет, отсекая как бы все то что осталось слева. Подтверждается все то что описал автор, в массив сохраняются значения индексов, получаем заданное количество элементов в которых храним значения, память под контролем, увеличение незначительно. Эффективность высокая. &nbsp;Кто будет пробовать нужно поправить чтоб было как в моем примере. <br />function List.new()<br /> &nbsp; --return {first = 0, last = -1}<br /> &nbsp; return {first = 0, last = 0}<br />end<br />
====code====
<pre>local list=List.new()
local length=10; local M=1000--00--00
print("объем начального массива", M, "Кол. элементов в созданном length=",length);
local count1 = collectgarbage("count") -- получаем текущий размер памяти
------------------------------ LIFO
for i=1, M do 
 
print(i, ')','Начальные индексы', 'list.first =', list.first, '; list.last =', list.last )

List.pushlast(list,i)
print(i, ')','Вставил', 'index list.last =', list.last,'; присвоил значение элементa =',list&#91;list.last&#93;, '(',collectgarbage("count"),')' )

if i&#62;length then 
List.popfirst(list)
print( i, 'Операция - Удаление первого:', ')', 'присвоил индекс первоve элементу =', list.first, 'вернул значение первого элементa =', list&#91;list.first&#93; ,'(',collectgarbage("count"),')' ) --, list.first
end

end
print("LIFO (вариант реализации стека с помощью двусторонней очереди.) ----------------------");
print("начальный объем занятой памяти",count1);

print("число элементов в LIFO list после "..(M).." циклов функции рор=" ..(list.last-list.first))
local countOUT = collectgarbage("count")
print("объем занятой памяти",countOUT);
--------------------------------
collectgarbage("collect")
print("объем занятой памяти после сборщика мусора",collectgarbage("count"));
</pre>
=============
Вот ответ
====code====
<pre>объем начального массива&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;Кол. элементов в созданом length=&nbsp;&nbsp;&nbsp;10
1&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;0
1&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;27.3759765625&nbsp;&nbsp;&nbsp;)
2&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;1
2&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;2&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.4384765625&nbsp;&nbsp;&nbsp;)
3&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;2
3&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.5166015625&nbsp;&nbsp;&nbsp;)
4&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;3
4&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;4&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.5634765625&nbsp;&nbsp;&nbsp;)
5&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;4
5&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.6728515625&nbsp;&nbsp;&nbsp;)
6&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;5
6&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.7197265625&nbsp;&nbsp;&nbsp;)
7&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;6
7&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.7666015625&nbsp;&nbsp;&nbsp;)
8&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;7
8&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.8134765625&nbsp;&nbsp;&nbsp;)
9&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;8
9&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;28.9853515625&nbsp;&nbsp;&nbsp;)
10&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;9
10&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;29.0146484375&nbsp;&nbsp;&nbsp;)
11&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;10
11&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;29.0625&nbsp;&nbsp;&nbsp;)
11&nbsp;&nbsp;&nbsp;Операция - Удаление первого:&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;присвоил индекс первоve элементу =&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;вернул значение первого элементa =&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;29.1484375&nbsp;&nbsp;&nbsp;)
.........
1000&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Начальные индексы&nbsp;&nbsp;&nbsp;list.first =&nbsp;&nbsp;&nbsp;989&nbsp;&nbsp;&nbsp;; list.last =&nbsp;&nbsp;&nbsp;999
1000&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;Вставил&nbsp;&nbsp;&nbsp;index list.last =&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;; присвоил значение элементa =&nbsp;&nbsp;&nbsp;1000&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;51.08203125&nbsp;&nbsp;&nbsp;)
1000&nbsp;&nbsp;&nbsp;Операция - Удаление первого:&nbsp;&nbsp;&nbsp;)&nbsp;&nbsp;&nbsp;присвоил индекс первоve элементу =&nbsp;&nbsp;&nbsp;990&nbsp;&nbsp;&nbsp;вернул значение первого элементa =&nbsp;&nbsp;&nbsp;990&nbsp;&nbsp;&nbsp;(&nbsp;&nbsp;&nbsp;51.109375&nbsp;&nbsp;&nbsp;)

LIFO (вариант реализации стека с помощью двусторонней очереди.) ----------------------
начальный объем занятой памяти&nbsp;&nbsp;&nbsp;26.5283203125
число элементов в LIFO list после 1000 циклов функции рор=10
объем занятой памяти&nbsp;&nbsp;&nbsp;51.28125
объем занятой памяти после сборщика мусора&nbsp;&nbsp;&nbsp;30.7470703125
</pre>
=============
Всем удачи еще раз спасибо за обсуждение! <img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp; <br />
			<i>22.01.2024 09:03:52, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73961/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73961/topic8137/</guid>
			<pubDate>Mon, 22 Jan 2024 09:03:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73957/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_5hA4w6qx" href="/user/16131/" bx-tooltip-user-id="16131">VPM</a> написал:<br />не работает &nbsp;#list.<br />=============<br /> &nbsp; Читайте документацию. Там написано, что операция # применима только для строк и таблиц-массивов (это такие, в которых индексы строго от 1 до N без пропусков). <br />
			<i>21.01.2024 18:54:16, TGB.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73957/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73957/topic8137/</guid>
			<pubDate>Sun, 21 Jan 2024 18:54:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73955/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ME6M0rG6" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />В цифровой обработке сигналов есть понятие элементы задержки. &lt;...&gt; И это вполне алгоритмическое понятие в настоящее время<br /><br />=============<br />А ну-ка, покажи, где я утверждал обратное?<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_GvnsgTBw" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Так вот , то что хочет автор этой темы реализуется не очередями и не стеками, а циклическими массивами.<br /><br />=============<br />Твой &quot;циклический массив&quot; если только под этим подразумевается аналог регистра сдвига - такая же очередь, только фиксированным числом ячеек памяти. Если хочешь, всякий &quot;циклический массив&quot; - это очередь, но не всякая очередь - &quot;циклический массив&quot;. <br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_mqWR6Z31" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />в луа есть операция сдвига вправо и влево - а это и есть сдвиговый регистр <br />=============<br />Да ладно. Покажи?<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_maL7ZI7o" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />А то что Вы здесь херней занимаетесь это факт.<br />=============<br />Так, да не совсем. Мы тут как раз-таки автору темы уже на протяжении 26 страниц (или сколько их там уже?!) пытаемся объяснить, что не надо заниматься херней.<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_ay32mVX6" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br /><noindex><a href="/user/15505/" target="_blank" rel="nofollow">Glukator</a></noindex>, А на кой НАМ беспокоиться о проблемах какого-то мусорщика? <br />&lt;...&gt; При следующем всплеске активности скрипт просто перезабьёт новые данные в старые элементы - память под них уже выделена. А мусорщик сидит и молчит в тряпочку, а не путается под ногами. Сказка!<br />=============<br />Я об этом не подумал. &nbsp;Пожалуй, надо будет вышвырнуть нахрен из скрипта очередь сделок и сделать вместо нее стек :)<br />Хотя потребляемая память и так не растет выше 2 Мб. <br />
			<i>21.01.2024 18:41:31, Glukator.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73955/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73955/topic8137/</guid>
			<pubDate>Sun, 21 Jan 2024 18:41:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73954/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Который раз слышу вот это <br />====quote====<br /><a class="blog-p-user-name" id="bp_RxnAi47d" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Так вот , то что хочет автор этой темы реализуется не очередями и не стеками, а циклическими массивами.<br />=============<br />Уважаемые, не сочтите за труд, покажите на примере, как это делается в луа? <br />
			<i>21.01.2024 18:37:53, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73954/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73954/topic8137/</guid>
			<pubDate>Sun, 21 Jan 2024 18:37:53 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очереди и двойные очереди  в луа</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message73953/topic8137/">Очереди и двойные очереди  в луа</a></b> <i>Пример из книги Р.Е.</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Такая запись не корректна<br /> print(&quot;число элементов в очереди list после &quot;..M..&quot; циклов функции push=&quot;..#list)<br />не работает &nbsp;#list. <br />
			<i>21.01.2024 18:31:52, VPM.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message73953/topic8137/</link>
			<guid>http://forum.quik.ru/messages/forum10/message73953/topic8137/</guid>
			<pubDate>Sun, 21 Jan 2024 18:31:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
