Вопрос по queue, stack – В чем принципиальная разница между стеком и очередью?

115

В чем принципиальная разница между стеком и очередью?

Пожалуйста, помогите мне, я не могу найти разницу.

How Вы различаете стек и очередь?

Я искал ответ в различных ссылках и нашел этот ответ ..

В программировании высокого уровня,

a stack is defined as a list or sequence of elements that is lengthened by placing new elements "on top" of existing elements and shortened by removing elements from the top of existing elements. It is an ADT[Abstract Data Type] with math operations of "push" and "pop".

A queue is a sequence of elements that is added to by placing the new element at the rear of existing and shortened by removing elements in front of queue. It is an ADT[Abstract Data Type]. There is more to these terms understood in programming of Java, C++, Python and so on.

Могу ли я получить ответ, который является более подробным? Пожалуйста, помогите мне.

Похоже, вы ответили на свой вопрос: стек является контейнером «первым пришел - первым обслужен» (LIFO), а очередь - контейнером «первым пришел - первым обслужен» (FIFO). Iridium

Ваш Ответ

11   ответов
57
A visual model

Pancake стек (LIFO)

Единственный способ добавить один и / или удалить один - сверху.

pancake stack

Line Очередь (FIFO)

Когда кто-то прибывает, он прибывает в конец очереди, а когда он уходит, он уходит в начало очереди.

dmv line

Fun fact: англичане относятся к линиям людей какОчередь

Хаха, я уверен, что это идеальное описание очереди и стека, но ради аргументации, что если я захочу, чтобы первый блин был добавлен в тарелку? Я знаю, что это может быть завершено с помощью stack.size () и if (! Stack.isEmpty ()), но все же этот первый блин может быть лучшим:) ... В любом случае, хороший ответ, и я согласен, что это самое ясное ... кажется интересным, что британцы относятся к строкам как к очередям, хотя (если это точно), на языке, не являющемся языком программирования, я по-прежнему считаю, что строка, в которой первая запись выходит первой (после выхода из строки / очереди) )
почему это не самый лучший ответ? лол
Джи, это должно быть ответ IMO. Спасибо @Jacksonkr
13

STACK:

Stack is defined as a list of element in which we can insert or delete elements only at the top of the stack. The behaviour of a stack is like a Last-In First-Out(LIFO) system. Stack is used to pass parameters between function. On a call to a function, the parameters and local variables are stored on a stack. High-level programming languages such as Pascal, c, etc. that provide support for recursion use the stack for bookkeeping. Remember in each recursive call, there is a need to save the current value of parameters, local variables, and the return address (the address to which the control has to return after the call).

QUEUE:

Queue is a collection of the same type of element. It is a linear list in which insertions can take place at one end of the list,called rear of the list, and deletions can take place only at other end, called the front of the list The behaviour of a queue is like a First-In-First-Out (FIFO) system.
Я уверен, что вы также можете вставить в конец или в начало стека, я думаю, что здесь важно отметить, что FIFO против LIFO
137

стек является структурой данных LIFO (последний пришел первым вышел) Ссылка на википедию содержит подробное описание и примеры.

Очередь является структурой данных FIFO (первым пришел - первым обслужен) Ссылка на википедию содержит подробное описание и примеры.

14

Queue

Очередь - это упорядоченная коллекция предметов.

Элементы удаляются с одного конца под названием & # x2018; front & # x2019; конец очереди.

Элементы вставляются на другом конце под названием & # x2018; задний & # x2019; очереди.

Первый вставленный элемент - это первый, подлежащий удалению (FIFO).

Stack

Стек - это коллекция предметов.

Это позволяет получить доступ только к одному элементу данных: последний вставленный элемент.

Элементы вставлены & amp; удаляется с одного конца под названием & # x2018; Верх стека & # x2019 ;.

Это динамическое & amp; постоянно меняющийся объект.

Все элементы данных помещаются на вершину стека и снимаются с верха

Эта структура доступа известна как структура «Последний пришел первым» (LIFO).

@SebastianNielsen Да, правильно, как упоминание в ответе.
Но в чем же разница между связанным списком и стеком? Разве это не то же самое?
Так что в основном «очередь» является "FIFO"; - первым в очереди первым. В то время как «стек» является "LIFO"; - последний в очереди первым. Я прав?
@SebastianNielsen Стек - это ADT, что означает, что он предоставляет интерфейс, который является операцией push и pop, но основной механизм (реализация) скрыт от конечного пользователя. Стек может быть реализован с массивом или со связанным списком.
35

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

Для стека, если у меня есть списокa, b, cи я добавляюd, он застрял на конце, поэтому я в конечном итогеa,b,c,d, Если я хочу вытолкнуть элемент списка, я удаляю последний добавленный элемент, которыйd, После популярности мой список теперьa,b,c снова

Для очереди я добавляю новые элементы таким же образом.a,b,c становитсяa,b,c,d после добавленияd, Но теперь, когда я всплываю, я должен взять элемент в начале списка, чтобы он сталb,c,d.

Это очень просто!

1

Стек определяется как список элементов, в которые мы можем вставлять или удалять элементы только в верхней части стека.

Стек используется для передачи параметров между функциями. При вызове функции параметры и локальные переменные хранятся в стеке.

Стек - это набор элементов, которые могут храниться и извлекаться по одному за раз. Элементы извлекаются в обратном порядке их времени хранения, то есть последний сохраненный элемент является следующим извлекаемым элементом. Стек иногда называют структурой «последний пришел - первым вышел» (LIFO) или «первым пришел - последним вышел» (FILO). Элементы, сохраненные ранее, не могут быть извлечены до тех пор, пока не будет найден самый последний элемент (обычно называемый «верхним» элементом).

ОЧЕРЕДЬ:

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

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

0

что коллекция - это ОБЪЕКТ, который собирает и организует другие меньшие ОБЪЕКТЫ. Эти меньшие ОБЪЕКТЫ обычно называют Элементами. Эти элементы являются «выдвинутыми» в стеке в порядке A B C, где A является первым, а C является последним. по вертикали это будет выглядеть так:                                                   Добавлен третий элемент) C                                                   2-й элемент добавлен) B                                                   1-й элемент добавлен) A

Обратите внимание, что "A" который был впервые добавлен в стек, находится внизу. Если вы хотите удалить & quot; A & quot; Из стека сначала необходимо удалить «C», затем «B», а затем, наконец, целевой элемент «A». Стек требует подхода LIFO, когда имеет дело со сложностями стека. (Last In First Out) При удалении элемента из стека правильный синтаксис - pop. мы не удаляем элемент из стека, который мы «всплываем»; это от.

Напомним, что & quot; A & quot; был первым элементом, помещенным в стек, и "C" был последним элементом, помещенным в стек. Если вы решите, что хотите посмотреть, что находится внизу стека, так как 3 элемента расположены в стеке, и порядок A означает, что первый B является вторым, а C - третьим, то верхняя часть должна быть снята, а затем добавлен второй элемент для просмотра дна стека.

Пожалуйста, отформатируйте свой вопрос, чтобы он выглядел лучше и читабельнее.
97

stack of paper, Последний кусок, помещенный в стек, находится сверху, поэтому он выходит первым. ЭтоLIFO, Добавление куска бумаги называется «нажатием», а удаление куска бумаги - «всплывающим».

queue at the store, Первый человек в очереди является первым человеком, который выходит из очереди. ЭтоFIFO, Человек, попадающий в очередь, «ставится в очередь», а человек, выходящий из очереди, «исключается из очереди».

Одна из лучших аналогий, которые я могу придумать.
0

первый вышел). означает, что в стек вставлено 3 элемента, т. е. 10,20,30. 10 вставляется первым & amp; 30 вставляется последним, поэтому 30 сначала удаляется из стека & amp; 10 последний удалено из стека. Это список LIFO (Last In First Out).

QUEUE - это список FIFO (первый вошел первым). Означает, что один элемент вставляется первым, что должно быть удалил first.e.g очередь людей.

5

которые могут храниться и извлекаться по одному за раз. Элементы извлекаются в обратном порядке их времени хранения, то есть последний сохраненный элемент является следующим извлекаемым элементом. Стек иногда называют структурой «последний пришел - первым вышел» (LIFO) или «первым пришел - последним вышел» (FILO). Элементы, сохраненные ранее, не могут быть извлечены до тех пор, пока не будет найден самый последний элемент (обычно называемый «верхним» элементом).

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

1

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

при работе со стеком

you insert elements at one end of the chain and you retrieve and/or remove elements from the same end of the chain

пока с очередью

you insert elements at one end of the chain and you retrieve/remove them from the other end

NOTE: I am using the abstract wording of retrieve/remove in this context because there are instances when you just retrieve the element from the chain or in a sense just read it or access its value, but there also instances when you remove the element from the chain and finally there are instances when you do both actions with the same call.

Также слово элемент специально используется для того, чтобы максимально абстрагировать воображаемую цепочку и отделить ее от конкретного языка программирования.  термины. Эта абстрактная информационная сущность, называемая элементом, может быть чем угодно, от указателя, значения, строки или символов, объекта, ... в зависимости от языка.

В большинстве случаев, хотя на самом деле это либо значение, либо место в памяти (то есть указатель). А остальные просто скрывают этот факт за языковым жаргоном & lt;

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

Стек может быть полезен, когда вам нужно временно сохранить элемент, который будет использоваться на ближайшем этапе (шагах) вашей программы. Например, языки программирования обычно используют структуру стека для передачи переменных в функции. На самом деле они сохраняют (или помещают) аргументы функции в стек, а затем переходят к функции, где они удаляют и извлекают (или извлекают) одинаковое количество элементов из стека. Таким образом, размер стека зависит от количества вложенных вызовов функций. Кроме того, после того, как функция была вызвана и закончила то, что она делала, она оставляет стек в том же состоянии, в котором он был вызван! Таким образом, любая функция может работать со стеком, игнорируя, как другие функции работают с ним.

Наконец, вы должны знать, что существуют другие термины, используемые для тех же похожих понятий. Например, стек можно назвать кучей. Существуют также гибридные версии этих концепций, например, двусторонняя очередь может вести себя одновременно как стек и как очередь, поскольку к ней могут одновременно обращаться оба конца. Кроме того, тот факт, что структура данных предоставляется вам в виде стека или очереди, это не обязательно означает, что она реализована как таковая, существуют случаи, когда структура данных может быть реализована как угодно и предоставлена как конкретная структура данных просто потому, что она может вести себя так. Другими словами, если вы предоставляете метод push и pop для любой структуры данных, они волшебным образом превращаются в стеки!

Не используйте форматирование кода для текста, который не является кодом.

Похожие вопросы