Probablemente tienes razón, y eso no es muy útil.
Hay muchos usos de listas enlazadas en teoría (especialmente los enlaces de baile). Pero la mayoría de ellos implica almacenar y clonar sus iteradores en otro lugar, acceder al contenido en más de dos direcciones o dividir y fusionar las listas. SplDoublyLinkedList parecía no tenerlos.
Si no es por algoritmos, un uso es permitir que un objeto elimine la referencia de sí mismo en una lista en tiempo constante, liberando su memoria y sin mezclar la lista (mediante hashing o intercambio con el último elemento) después de la inserción o eliminación Pero esto requiere almacenar un iterador de la lista en esos objetos.
Sin esas funcionalidades, simplemente se comportan como dos deques. Si solo necesita acceder a elementos utilizando el iterador, son como dos pilas. Una mejor manera en casos simples de un solo hilo, salvo que ya no esté incluido en una clase, es solo usar dos pilas (arreglos fijos, o ambos extremos del mismo conjunto). Haga estallar desde una pila y empújela a otra cuando quiera que se mueva el iterador, y la parte superior de una pila es el elemento actual. Si también necesita acceder a la cabeza y la cola, deberá reemplazar las pilas con deques.
Pero si quiere implementar stacks o deques sin saber el tamaño máximo, o incluso asignar nodos de listas enlazadas normales (en un lenguaje sin esas bibliotecas como PHP), la buena manera es encadenar algunas matrices fijas juntos, usando listas doblemente enlazadas sin esas características. De alguna manera, todavía lo necesitarás.
La documentación de PHP en sí, al igual que la de Java, sugiere que se supone que son simplemente un deque que admite algunas características extra extrañas, ni siquiera dos deques (creo). No los use si realmente necesita listas doblemente vinculadas.
Esta es la mejor respuesta aquí, y una buena para entender el propósito de estas estructuras de datos. Sin embargo, las cosas no son tan simples como implica esta respuesta. Basándose en el concepto de qué es una lista de doble enlace y qué es una tabla de hash (cómo se implementan las matrices en PHP), uno esperaría que una lista de doble enlace pudiera ahorrar MUCHA memoria en una matriz. Sin embargo, en mis pruebas, me quedé sin memoria en el lugar con cualquiera de los dos. Lo que me lleva a creer que las listas doblemente vinculadas se implementan muy estúpidamente en PHP. –
También intenté hacer mi propia clase de lista enlazada con un buen ojo para conservar la memoria. De alguna manera me estoy quedando sin memoria en el mismo lugar que si utilizo una matriz PHP normal, lo cual es muy extraño. Esto me lleva a sospechar que las partes internas de PHP usan matrices PHP en lugares inesperados. Es solo una suposición, pero no estoy seguro de qué más pensar. Por cierto, estoy usando PHP 5.3.2, así que espero que las versiones más nuevas sean mejores sobre esto, pero no sé. El punto es que si va a utilizar una estructura de datos distinta de la matriz PHP por motivos de rendimiento, asegúrese de medir el rendimiento para asegurarse de que sea útil. –