Подтвердить что ты не робот

Как определяется определение push() ing и pop()?

Я знаю, как работают методы push() и pop() в типичной реализации Queue/Linked List, но то, что я хочу знать, это то, что вы на самом деле определяете как push или pop? Когда можно назвать метод push()/pop()? Что делает метод insert()/add() в типичной реализации дерева не push()?

Мое понимание заключается в том, что push() ing означает помещение чего-то в позицию, на который указывает какой-то специальный указатель, и pop() ping-элемент означает, что какой-то объект указывает на некоторый указатель, но он, похоже, не является четко определен. Или вообще имеет дело с именованием?

4b9b3361

Ответ 1

При обращении к операциям в связанном списке вы можете вставлять элементы в список, чтобы добавить их. Затем вы можете удалить элементы из списка, чтобы удалить их.

Если вы поместите элементы из того же конца добавляемого списка, вы внедрили стек или структуру данных Last-In-First-Out (LIFO):

Stack

Если вы поместите элементы с противоположного конца, вы внедрили очередь - хотя обычно терминология - это "enqueue" и "dequeue". Это структура данных First-In-First-Out (FIFO):

Queue

Ответ 2

Термины push и pop обычно используются для стеки, а не очереди или связанные списки. Стек - это структура данных последнего времени (LIFO); другими словами, первое, что нужно удалить, - это элемент, который недавно был добавлен. Нажатие - это когда вы кладете новый элемент в стек, а поп - когда вы его снимаете.

Многие языки программирования позволят вам писать свой код любым способом, в том числе используя имена push и pop для любых структур данных, даже если это не то, что вы действительно делаете. Однако я бы не рекомендовал его. Намного лучше использовать термины, которые другие используют, чтобы ваш код мог быть прочитан другими программистами. Кроме того, использование неправильной терминологии может затруднить получение работы и затруднит общение с другими программистами, если вы работаете над проектом (работа или с открытым исходным кодом).

Ответ 3

Нажатие означает помещение элемента в стек (структура данных), так что он становится элементом самого верхнего стека. Popping означает удаление самого верхнего элемента из стека. (Вы часто слышите третий термин peeking, что означает просмотр/чтение самого верхнего элемента.)

Когда дело доходит до очередей, вы обычно должны использовать термины enqueueing и dequeueing, где первое означает добавление элемента в очередь "назад" и последний означает удаление элемента из "переднего конца" из очереди.

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

Когда речь заходит о связанных списках и одинарных очередях (deques), используются термины push и pop, например. в С++ STL, где у вас есть операции, такие как push_front, push_back, pop_front и pop_back. Это просто означает, что элементы могут быть добавлены или удалены с обоих концов.


Что касается того, почему pop вызывается, а не тянуть (против нажимать)... хороший вопрос.

Ответ 4

Push/Pop первоначально связан с командами стека в asm land. Толкатель помещает значение (регистр) в стек и обновляет указатель стека, в то время как поп извлекает значение из стека и уменьшает указатель. Здесь нет вставки, что означало бы существование какого-либо смещения. Вот почему у вас также есть функции push/pop _front() и push/pop _back(). Они представляют собой статическое местоположение для push/pop для работы.

Ответ 5

В С++, по крайней мере, push и pop относятся только к структурам, таким как стеки и очереди, где местоположение, в котором выполняется операция, присуще структуре данных. Для других контейнеров, таких как векторы и списки, у нас есть push_back, push_front, pop_back и т.д. Для контейнеров, где мы действительно не знаем, где элемент будет в конечном итоге, или где мы его будем читать, push и pop не используются в все.

Ответ 6

Push и Pop - это обычные имена, данные для операций вставки и удаления элементов из структуры данных стека. Любые операции, которые следуют за шаблоном Last-In-First-Out (LIFO), обычно называются Push и Pop, но их можно назвать любыми, что вам нравится.

Ответ 7

Именование push и pop было, вероятно, изобретено только для того, чтобы отличать операции, которые могут выполняться в стеке от тех, которые могут выполняться в списке. Вы можете также назвать их добавить и удалить, но они имеют тенденцию подразумевать, что вы можете добавлять или удалять элемент в любом месте списка, а не просто в начале (или конец, если вы так думаете об этом). Аналогично, существуют enqueue и dequeue, поскольку push и pop подразумевают, что вставки или удаления происходят в одном и том же месте, вместо противоположных концов списка.

Если вы хотите получить техническое определение, вы можете сказать, что push и поп - это операции O (1), которые влияют на один и тот же конец списка в LIFO ( Last In, First Out).

Ответ 8

Push и pop первоначально использовались для ссылки на операции стека, но неофициально эти термины часто используются для операций, связанных с добавлением/удалением элемента в конце любой линейной структуры данных, такой как стек, очередь, массив или связанный список.

Ответ 9

Нажатие просто добавляет элемент в начало (или конец) коллекции. Popping удаляет тот же элемент.

В Java интерфейс списка добавляет (0, элемент) и удаляет (0). Это фактически параллели для push (item) и pop().

Однако push и pop и стеки интересны в своем конкретном поведении, и, следовательно, у многих есть специализированные структуры данных, которые делают толкание и выскакивание особенно эффективными.

Ответ 10

Большая часть того, что вы просите, - это соглашение. Для очередей вы можете нажать или поставить в очередь. Вы увидите и то, и другое. Для стеков вы увидите добавление или толчок. Для этого нет реального жесткого "правила". Если вы работаете на языке, который использует "push" в качестве условного обозначения, используйте "push". Именование имеет значение, но только для удобства использования и здравого смысла. Просто убедитесь, что ваше именование согласовано внутри одного приложения или системы.

Ответ 11

Имена push и pop используются при разговоре о стеках. Стеки являются последними в списке (LIFO). Таким образом, имена указывают, что pop вернет последнее нажатое.

Ответ 12

Интуитивно мы считаем стеки как те вещи, на которых мы можем выталкивать ценности, чье верхнее значение - это последнее, и что если мы поместим стек, на который мы продвинули значение, у нас есть исходный стек.

Эта интуиция может быть представлена ​​как абстрактная алгебра, с Push и Pop, представляющими любые вычисления на объекте данных, называемом Stack с участием ELements:

algrebra Stack
  {
    data Stack;
    data Element;
    Empty() -> Stack;
    Push(Stack,Element) -> Stack;
    Pop(Stack) -> Stack;
    Top(Stack) -> Element;
    axiom Top(Push(s,e))==e;
    axiom Pop(Push(s,e))==s;
    axiom Pop(Empty())==undefined;
 }

В этом говорится, что если вы можете найти объекты в своей системе,

  • некоторые из них, которые вы утверждаете, представляют собой типы стеков.
  • некоторые из них, которые вы утверждаете, являются элементами,
  • некоторые из них, которые вы называете Push,
  • Некоторые из них являются функциями, которые вы утверждаете: Pop, Top, Empty и т.д.

то сигнатуры различных функций совпадают с сигналами в алгебре, и что, применяя различные функции, они будут вести себя как указывают аксиомы. (Объекты, которые вы выбираете, являются "изоморфными" к алгебре).

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

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

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

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

Таким образом, можно определить стек по формальной спецификации. Вы можете определить любую другую структуру данных таким образом тоже.

Жаль, что мы не делаем этого в документальном коде.

Ответ 13

Основная операция стека - push и pop. Термин push - это использование для размещения некоторого элемента данных в стеке, и pop используется для удаления некоторого элемента данных из стека.