Принцип LIFO¶
Принцип LIFO (от англ. Last In, First Out — «последним пришёл — первым ушёл») — это метод организации и обработки данных, при котором элемент, добавленный последним, извлекается или обрабатывается первым. В более широком смысле LIFO обозначает порядок учёта товарно-материальных ценностей (ТМЦ) в бухгалтерии и логистике, а также принцип построения стековых структур данных в программировании. Противоположным принципом является FIFO (First In, First Out — «первым пришёл — первым ушёл»).
¶История возникновения
Термин LIFO впервые получил широкое распространение в бухгалтерском учёте США в 1930-х годах, когда в условиях Великой депрессии компании искали способы снижения налогооблагаемой прибыли за счёт изменения оценки запасов. В 1939 году Министерство финансов США официально разрешило использование метода LIFO для расчёта налогов. В 1950-х годах принцип LIFO был адаптирован в информатике для описания работы стековой памяти — структуры, лежащей в основе многих алгоритмов и архитектур процессоров.
¶Принцип LIFO в информатике
¶Стек как структура данных
В программировании принцип LIFO реализуется через структуру данных, называемую стеком (stack). Стек представляет собой упорядоченный набор элементов, в котором добавление (push) и удаление (pop) возможны только с одного конца — вершины стека. Операция push помещает новый элемент на вершину, а pop извлекает верхний элемент, делая следующий за ним новым верхним. Это обеспечивает доступ только к последнему добавленному элементу.
¶Основные операции
- Push — добавление элемента на вершину стека.
- Pop — удаление элемента с вершины стека и возврат его значения.
- Peek (или Top) — чтение значения вершины стека без его удаления.
- IsEmpty — проверка, пуст ли стек.
- Size — получение количества элементов в стеке.
¶Применение в программировании
Стек на основе LIFO используется в следующих областях:
- Вызов функций и подпрограмм: при вызове функции её адрес возврата, локальные переменные и параметры помещаются в стек вызовов (call stack). При возврате из функции данные извлекаются в обратном порядке.
- Обработка рекурсивных алгоритмов: каждый рекурсивный вызов создаёт новый кадр стека, который уничтожается после завершения вызова.
- Алгоритмы синтаксического анализа: проверка правильности скобочных последовательностей, вычисление арифметических выражений в обратной польской записи.
- Управление отменой действий (Undo): в текстовых редакторах и графических редакторах отмена последнего действия реализуется через стек — последнее действие отменяется первым.
- Обход деревьев и графов: в алгоритмах поиска в глубину (DFS) используется стек для хранения вершин, подлежащих посещению.
¶Реализации
Стек на основе LIFO может быть реализован с помощью массива (статический стек) или связного списка (динамический стек). В языках программирования высокого уровня (например, C++, Java, Python) существуют встроенные классы или библиотеки, реализующие стек. В Python, например, в качестве стека можно использовать обычный список с методами append() (push) и pop().
¶Принцип LIFO в бухгалтерском учёте и логистике
¶Метод оценки запасов
В бухгалтерии принцип LIFO применяется для оценки стоимости товарно-материальных запасов при их списании в производство или продаже. Согласно этому методу, последние по времени поступления единицы товара считаются первыми выбывшими. Таким образом, себестоимость проданной продукции рассчитывается по ценам последних закупок, а остаток на складе оценивается по ценам первых закупок.
¶Влияние на финансовую отчётность
Применение LIFO в условиях инфляции приводит к тому, что себестоимость проданных товаров оказывается выше, а налогооблагаемая прибыль — ниже, чем при использовании метода FIFO. Это позволяет компаниям экономить на налогах на прибыль. Однако в периоды снижения цен (дефляции) эффект обратный. В России метод LIFO был разрешён для целей бухгалтерского учёта до 2008 года, после чего был отменён приказом Минфина РФ № 26н. В настоящее время LIFO не применяется в российском бухгалтерском учёте, но продолжает использоваться в США (в соответствии с GAAP) и некоторых других странах.
¶Логистика и складское хозяйство
В управлении складом принцип LIFO означает, что товары, поступившие на склад последними, отгружаются первыми. Это характерно для штабелирования, когда доступ к более ранним партиям затруднён. LIFO-складирование часто применяется для сыпучих материалов (песок, зерно) или товаров, у которых не критичен срок годности. Для скоропортящихся продуктов (продукты питания, лекарства) LIFO не используется, так как может привести к порче товара.
¶Принцип LIFO в других областях
¶Электроника и архитектура компьютеров
В микропроцессорах стековая память, работающая по принципу LIFO, используется для хранения адресов возврата при обработке прерываний и вызовов подпрограмм. Аппаратный стек реализован в виде регистрового файла или участка оперативной памяти, адресуемого специальным регистром — указателем стека (stack pointer).
¶Управление проектами и задачами
В некоторых методологиях управления задачами (например, в подходе «канбан» с ограничением незавершённой работы) принцип LIFO может применяться для приоритизации: последняя поступившая задача выполняется первой. Однако такой подход чаще критикуется, так как может приводить к постоянному откладыванию старых, но важных задач.
¶Социальные науки и психология
В переносном смысле принцип LIFO описывает ситуации, в которых последние события или информация оказывают наибольшее влияние на принятие решений (эффект недавности). В когнитивной психологии это явление известно как «ошибка доступности» — люди склонны переоценивать значимость недавних событий.
¶Критика и ограничения
Применение принципа LIFO имеет ряд недостатков:
- В бухгалтерии: искажает реальную стоимость запасов в условиях инфляции, так как балансовая стоимость остатков может значительно отличаться от текущих рыночных цен. В США компании, использующие LIFO, обязаны раскрывать разницу с методом FIFO в примечаниях к отчётности.
- В логистике: неэффективен для товаров с ограниченным сроком хранения, так как старые партии могут оставаться невостребованными и портиться.
- В программировании: стек на основе LIFO не позволяет произвольный доступ к элементам, что ограничивает его применение в задачах, требующих поиска или сортировки данных.
¶Сравнение с FIFO
| Характеристика | LIFO | FIFO |
|---|---|---|
| Порядок извлечения | Последний добавленный — первый | Первый добавленный — первый |
| Применение в бухгалтерии | США (GAAP) | Международные стандарты (МСФО), Россия |
| Влияние на налоги в условиях инфляции | Снижает налогооблагаемую прибыль | Увеличивает налогооблагаемую прибыль |
| Использование в программировании | Стек, рекурсия, отмена действий | Очередь, буферизация, планировщики |
| Пригодность для скоропортящихся товаров | Непригоден | Пригоден |
¶Интересные факты
- В некоторых языках программирования (например, Forth, PostScript) стек является основной структурой данных, и все вычисления выполняются через манипуляции с ним.
- Аппаратный стек процессора x86 имеет фиксированный размер, и его переполнение (stack overflow) является распространённой ошибкой программирования.
- В 1981 году компания General Electric использовала метод LIFO для оценки запасов и смогла сэкономить около 200 миллионов долларов на налогах.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


