Что такое стек и очередь?

Стек - коллекция объектов, из которой вынимается первым последний добавленный объект. Очередь - коллекция объектов, когда первым извлекается тот объект, который первым в неё и был добавлен.

Эти слова очень часто встречается в документации, прилагаемой к различным программным продуктам. Однако людям, далёким от программирования и имеющим гуманитарный склад ума, довольно сложно порой самостоятельно дойти до ответа на вопрос, что же скрывается за этими названиями. Техническим писателям, конечно, стоило бы объяснять подробнее подобные термины, но, увы, они себя редко этим утруждают. "Компьютерные вести" со своей традиционной рубрикой "F.A.Q." спешат, как всегда, на помощь.

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

Для обозначения очереди в программистском жаргоне есть специальный "умный" термин - FIFO. Это аббревиатура от английской фразы "first in, first out", т.е. "первый вошёл - первый вышел". Для обозначения стека используют другую аббревиатуру - LIFO, то есть, "last in, first out", или "последний вошёл - первый вышел". Простейший пример очереди в реальной жизни, в общем-то, найти несложно - это и есть очередь в кассу магазина. Пример стека - это стопка бумаги, в которой обязательно первым берётся именно тот лист, который был положен в неё последним.

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

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

35 за 2008 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Аноним
Может автору нужно для начала самому разобраться с понятиями стека, очереди и соответсвующей аббравиатурой, прежде чем вводить в заблуждение читателей???? Всё же стек это LIFO а очередь FIFO!!!
Аватар пользователя Вадим Станкевич
Перепутал, сорри:( Алекс, пожалуйста, поправьте на сайте, если Вас не затруднит. Постараюсь впредь внимательнее.
Аватар пользователя mike
>Перепутал, сорри

И ещё раз ошибся. Надо бы "суть $уйнуть". Различие между стеком и очередью простое. И стек, и очередь - упорядоченные динамические коллекции. Но стек содержит объекты (или элементы, кому как нравится), используемые ДЛЯ обслуживания, а очередь - ОБСЛУЖИВАЕМЫЕ.

Что-то глючит мой любимый автор, видимо работы прорва...

Аватар пользователя Вадим Станкевич
Глючу:( Займусь самоотладкой...
Аватар пользователя Savely
Ну, Майк сказанул... Я не понял :-)))

Для меня все просто: стек - магазин от автомата, очередь - очередь за пивом.

И, значицца, из стека да по очереди :-)))

Аватар пользователя serg
Я тоже сразу в газете заметил ошибку, ещё подумал, не глючу ли я. Мысленно ущипнул себя, нет, не глючу. Жаль что народ введён в заблуждение. Нужно обязательно извиниться и дать опровержение в следующем номере газеты!
Аватар пользователя xmg
следующую статью стоит озаглавить "буквы русского алфавита и как ими пользоваться".

ибо всякие несознательные "технические писатели" эти буквы используют, но умалчивают о их назначении.

Аватар пользователя Recun
FIFO и LIFO точно также используются у бухгалтеров - заклятых врагов прогеров :)