2010-10-01 2 views
8

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

  1. , что является основным разностное между ними двумя?

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

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

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

Большое спасибо за глядя в.

+4

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

+1

Посмотрите LIFO и FIFO. –

+1

@noon - может быть, у него есть, но он уже задал более 30 вопросов по StackOverflow, поэтому он должен доверять качеству ответов. – kevchadders

ответ

20

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

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

(Оба изображения из соответствующих записей Википедии)

2: см http://en.wikipedia.org/wiki/Circular_buffer

3: и 4: см SplStack и SplQueue

+0

+1 для фактического упоминания правильных типов SPL. – Gordon

+0

+1. Отличный !!! Давайте посмотрим, что говорят другие. –

3

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

  1. stack является LIFO (последний вошел, первым вышел) очереди.

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

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

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

2

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

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

Там в article about them both, что подробно объясняет, с примерами кода.

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

7

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

Вы

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

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

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

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

Смежные вопросы