Стек и очередь, почему?

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

  • Прослушивание события mouseup.
  • Передайте само событие с $event.
  • getSelection() не работает с входными значениями, поэтому используйте selectionStart и selectionEnd, чтобы получить выбор.

new Vue({
  el: '#app',
  methods: {
    logSelectionWithinInput(e) {
      var selection = e.target.value.substring(
        e.target.selectionStart,
        e.target.selectionEnd
      );
      console.log(selection);
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <input @mouseup="logSelectionWithinInput($event)" value="Text to select" />
</div>

40
задан Luiggi Mendoza 21 December 2015 в 22:03
поделиться

11 ответов

Поскольку они помогают управлять вашими данными более определенным образом, чем массивы и списки.

Очередь сначала в том, что в первую очередь (FIFO)

в последний раз в последний раз, первый (LIFO)

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

42
ответ дан 27 November 2019 в 01:03
поделиться

Стек

Существенно каждый раз, когда необходимо поместить задний ход & получите элементы в постоянное время, используйте Стек. Стек следует за LIFO it’s просто способ расположить данные.

Appln:

  1. Достижение операции отмены в блокнотах.
  2. кнопка "Назад" Браузера использует Стек.

Очередь:

Очереди реализованы с помощью принципа First-In-Fist-Out (FIFO)

Appln:

  1. В реальной жизни, телефонные системы Центра обработки вызовов будут использовать Очереди, для содержания людей, называющих их в порядке, пока сервисный представитель не будет свободен. Планирование ЦП, Дисковое Планирование. Когда несколько процессов требуют ЦП одновременно, различные алгоритмы планирования ЦП используются, которые реализованы с помощью структуры данных Очереди.
  2. В спулинге печати
  3. Поиск в ширину в Графике
  4. Обработка прерываний в режиме реального времени системы. Прерывания обрабатываются в том же порядке, как они прибывают, Первый пришел - первого обслужат.
0
ответ дан 27 November 2019 в 01:03
поделиться

Я бы также добавил: Не включает последовательность имени пользователя или даже часть имени пользователя, если она длинная.

-121--4043529-

Я брошу еще один критерий в кольцо:

  • Нет «прогулок по клавиатуре»

Потому что так много людей ожидают, что пользователи запомнят пароли, которые трудно запомнить, они прибегают к узорам клавиатуры, чтобы укротить безумие. Вброс сдвинутых версий для хорошей меры.

О, и ничего в списке запрещенных паролей Twitter .

-121--4043530-

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

9
ответ дан 27 November 2019 в 01:03
поделиться

Помимо исполнения использования, что другие уже упомянуты, существует также выпуск производительности. Когда вы хотите удалить что-то с начала массива или списка (ArrayList), он обычно принимает o (n) время, но для очереди требуется o (1) время. Это может сделать огромное значение, если есть много элементов.

6
ответ дан 27 November 2019 в 01:03
поделиться

Стек или очередь представляет собой логическую структуру данных; Он будет реализован в соответствии с крышками с физической структурой (например, список, массив, дерево и т. Д.)

Вы можете «бросить свой собственный», если хотите или воспользуйтесь уже реализованной абстракцией.

1
ответ дан 27 November 2019 в 01:03
поделиться

массивы / списки и стеки / очереди не являются взаимоисключающими концепциями. Infack любые стеки или реализации очередей, которые вы найдете, почти наверняка используют либо массивы, либо списки под капотом.

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

Стеки и очереди дают описание высокого уровня того, как элементы вставляются или удалены. FIFO для очередей, Фило для стеков.

Например. Если вы реализуете очередь сообщений, вы будете использовать очередь. Но сама очередь может хранить каждое сообщение в списке. «Нажатие» сообщение, добавляющее к передней части списка, «POPPING» сообщение, принимающее с конца списка.

5
ответ дан 27 November 2019 в 01:03
поделиться

Это вопрос намерений. Стеки и очереди часто реализуются с помощью массивов и списков, но добавление и удаление элементов более строго определено.

-121--1267640-

Android 2,1, Release 1 SDK

SDK был выпущен; это первый раз, когда Android SDK следует за выпуском устройства под управлением этой версии.

-121--3732660-

Вопрос неоднозначен, поскольку абстрактный тип данных стека или очереди можно представить с помощью массива или связанной структуры данных.

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

Связанная очередь/связанный стек имеет гибкие, высокоскоростные вставки/удаления с разумной реализацией, но требует больше ресурсов хранения, чем массив. Вставки/удаления недороги на концах массива до тех пор, пока не закончится пространство; реализация массива очереди или стека потребует большего объема работы для изменения размера, так как необходимо скопировать оригинал в более крупную структуру (или выполнить сбой с ошибкой переполнения).

0
ответ дан 27 November 2019 в 01:03
поделиться

Это вопрос намерения. Стеки и очереди часто реализуются с использованием массивов и списков, но добавление и удаление элементов определяется более строго.

4
ответ дан 27 November 2019 в 01:03
поделиться
  1. Используй очередь, когда хочешь вытащить вещи в том порядке, в котором ты их поставил.
  2. Используйте стек, когда вы хотите вытащить вещи в обратном порядке, чем вы положили их в.
  3. Используйте список, когда вы хотите вытащить что-либо, независимо от того, когда вы их вставляете (и когда вы не хотите, чтобы они автоматически удалялись).
16
ответ дан 27 November 2019 в 01:03
поделиться

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

Стек (Lifo - последний в первом выходе) и очередь (FIFO - первое в первую очередь) устанавливает и порядок, в котором ваши элементы вставляются и удалены из коллекции.

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

2
ответ дан 27 November 2019 в 01:03
поделиться

Вы бывали в кафетерии, верно? И видели стопку тарелок? Когда в стопку добавляется чистая тарелка, она ставится сверху. Когда тарелку убирают, ее убирают сверху. Такая система называется "Последний по порядку - первый по порядку" (LIFO). Компьютерная стопка похожа на эту, только в ней хранятся числа, и вы можете сделать ее из массива или списка, если хотите. (Если под стопкой тарелок есть пружина, то говорят, что вы "заталкиваете" одну тарелку на вершину, а когда вы ее убираете, то "отщелкиваете". Вот откуда эти слова.)

В кафетерии идите в заднюю часть, где моют посуду. У них есть конвейер, где в один конец ставят тарелки для мытья, а из другого конца они выходят в том же порядке. Это очередь или First-In-First-Out (FIFO). При желании вы можете создать такую очередь из массива или списка.

Для чего они нужны? Предположим, у вас есть древовидная структура данных (которая похожа на настоящее дерево из дерева, только перевернутое вверх ногами), и вы хотите написать программу для полного прохождения по ней, чтобы распечатать все листья.

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

Другой способ - это проход по ширине. Начиная со ствола, вы нумеруете все ответвления от ствола и заносите эти номера в очередь. Затем вы берете номер с другого конца, идете к этой ветке, и для каждой ветки, отходящей от нее, вы снова нумеруете их (последовательно с первой) и ставите в очередь. Продолжая делать это, вы сначала посетите ветви, которые находятся на расстоянии 1 ветви от ствола. Затем вы посетите все ветви, которые находятся на расстоянии 2 ветвей от ствола, и так далее. В конце концов вы доберетесь до листьев и сможете их распечатать.

Это две очень базовые концепции в программировании.

57
ответ дан 27 November 2019 в 01:03
поделиться
Другие вопросы по тегам:

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