Как организовать очередь?

DmitriyF

Guest
Как организовать очередь?

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

DmitriyF

Guest
Мне надо иметь возможность быстро выкидывать элемент из середины. Если сделать на массиве, то после выкидывания придется сдвигать остаток за время порядка n. Как работает array_slice, не очень понятно, но довольно медленно.
Боюсь что и реализация на классах будет тормозить. А вот экстеншн счас посмотрю. Он только для PHP5 или на 4 тоже будет работать?
 

Фанат

oncle terrible
Команда форума
мне всегда казалось, что структура данных очередь подразумевает последовательный доступ. Но я могу ошибаться.

но если так хочется выкидывать, то зачем тогда array_slice? Не проще сделать unset?
 

DmitriyF

Guest
Originally posted by Макс
может сначало тесты проведешь ?
Да, попробую

-~{}~ 27.01.05 17:27:

Originally posted by Фанат
Ну... Такое вот у меня определение очереди :) Односвязный список это вроде называется....
А про массив - имеется в виду делать так:

PHP:
$a = array();
$a[] = 5;
$a[] = 3;
unset($a[0]);
? Остается Array ( [1] => 3 ).
Тогда я не понимаю, как мне идти с конца этого списка в начало. :(
 

neko

tеam neko
агрх
читаем внимательно мануал по массивам

болтовня про скорость без тестов не принимается
 

su1d

Старожил PHPClubа
DmitriyF
тебе правильно сказали: массив.
только данные туда клади всегда через [m]array_push[/m](), а доставай через [m]array_shift[/m]().
тогда можешь "убивать" любой элемент массива, никак не влияя на обычную работу с ним.
 

DmitriyF

Guest
Originally posted by su1d
DmitriyF
тебе правильно сказали: массив.
только данные туда клади всегда через [m]array_push[/m](), а доставай через [m]array_shift[/m]().
тогда можешь "убивать" любой элемент массива, никак не влияя на обычную работу с ним.
Туплю - как убить элемент посередине?
 

Макс

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