стек против очередей? - PullRequest
       5

стек против очередей?

9 голосов
/ 01 октября 2010

Привет, я все еще студент, и я немного озадачен тем, что делать? первый вопрос,

  1. какая разница между ними двумя?

  2. Кстати, помимо обычных очередей, есть круговые очереди, как насчет этого? как они работают? есть ли другие способы поставить в очередь?

  3. я использую php, есть ли простой (очень простой или легкий для чтения) пример кода, который я могу изучить (ссылки тоже в порядке.)

  4. есть поп, пуш и т. Д. (Стеки и очереди), есть что-нибудь подобное в php?

Большое спасибо, что заглянули.

Ответы [ 5 ]

21 голосов
/ 01 октября 2010

1: при использовании стеков операции вставки / удаления работают на одном конце структуры данных (вверху)

image

с очередями вставка происходит на одном конце (сзади), а удаление - на другом конце (спереди).

image

(Both images are from the respective wikipedia entries)

2: see http://en.wikipedia.org/wiki/Circular_buffer

3: и 4: см. SplStack и SplQueue

7 голосов
/ 01 октября 2010

В php вы должны использовать array () для хранения ваших данных как для стеков, так и для очередей, а также использовать функции array_ * для управления ими.Взгляните на функции массива на php.net

У вас есть

  • array_push - поместить новый элемент в конец массива
  • array_pop- удалить элемент из конца массива
  • array_shift - удалить элемент из начала массива
  • array_unshift - поместить новый элемент в начало массива.

  • Для стека вы бы использовали array_push и array_pop

  • Для очереди вы использовали бы array_push и array_shift

Круговой буферреализовать как самостоятельный объект.

3 голосов
/ 01 октября 2010

Похоже, вас направляют к разнице между очередями «первым пришел - первым вышел» и «первым пришел - первым вышел».Стек является первым, а циклическая очередь является эффективной реализацией второго.

  1. A стек - это очередь LIFO (последний пришел, первый вышел).

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

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

  4. * * * * * * * * * * * предлагает много документации.

2 голосов
/ 01 октября 2010

A стек добавляет и удаляет элементы с того же конца.

A очередь добавляет элементы сзади и удаляет элементы спереди (как вбанк.)

Есть статья о них обоих , подробно объясняющая примеры кода.

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

1 голос
/ 01 октября 2010

http://www.php.net/manual/en/function.array-push.php

http://php.net/manual/en/function.array-pop.php

Вы можете посмотреть пример кода там

...