Estoy viendo Listas y no entiendo muy bien que estructura tiene que tener la lista.
He visto listas que usan el mismo método que las colas, luego que el usar el primer valor como inicio de la lista y los siguientes valores entran como si fueran una cola (pero el primer valor sigue teniendo la misma posición) o colas ordenadas por tamaño
Con colas ordenadas con tamaño me refiero a:
Cola normal: Nodo1 (Nodo1->Siguiente) ->Apunta a-> Nodo2(Nodo2->Siguiente) ->Apunta a-> Nodo3(Nodo3->Siguiente) ->Apunta a-> NULL
Cola ordenada por tamaño: Nodo1 (Nodo1->Siguiente) ->Apunta a-> Nodo3(Nodo3->Siguiente) ->Apunta a-> Nodo2(Nodo2->Siguiente) ->Apunta a-> NULL
siendo N1<N3<N2;
La conclusión que he llegado yo es que si no esta ordenado como una cola o una pila es una lista xD.
Se que de listas hay varios tipos como doblemente enlaza y circulares pero me refiero que cuando se hace una sucesión de nodos, sino es LIFO y no es FIFO ya se convierte automáticamente en una lista no?
https://es.cppreference.com/w/cpp/container/list
Una lista es un contenedor sin mas. No sé que tiene que ver ahí FIFO o LIFO. Es como decir que un string es FIFO o LIFO?
Tienes el unordered o el ordered list.
Para que no te comas la cabeza te diría que una lista es exactamente igual que un vector al que es mas rápido meterle y quitarle cosas. Pero más lento de recorrer por como se situa cada elemento de la lista en memoria. A parte tiene algunos métodos útiles para una lista que diría que el vector no tiene.
Te dejo los métodos que tiene:
Cita de: Metodos Listassign asigna elementos a la lista
back devuelve una referencia a el último componente de la lista
begin devuelve un iterator al principio de la lista
clear elimina todos los componentes de la lista
empty true si la lista está vacía
end devuelve un iterator al final de la lista
erase elimina componentes de la lista
front devuelve una referencia al primer componente de la lista
insert inserta componentes en la lista
max_size devuelve el número máximo de elementos soportados por la lista
merge une dos listas
pop_back elimina el último componente de la lista
pop_front elimina el primer componente de la lista
push_back añade un componente al final de la lista
push_front añade un componente al frente de la lista
rbegin devuelve un reverse_iterator hacia el final de la lista
remove elimina componentes de la lista
remove_if elimina condicionalmente componentes de la lista
rend devuelve un reverse_iterator hacia el inicio de la lista
resize cambia el tamaño de la lista
reverse pone al revés los componentes de la lista
size devuelve el número de componentes en la lista
sort ordena la lista
splice unión de dos listas
swap intercambia el contenido de una lista con el de otra
unique elimina componentes duplicados
A parte de los métodos se pueden usar algunos de los algoritmos y operadores que funcionan con otros elementos de la biblioteca de plantillas estandar(STL.)
Y sin olvidar que una lista ocupa el doble de tamaño en memoria que un arreglo convencional :') ;-)
Una lista, como te dice string Manolo, es simplemente un contenedor, sin limitaciones de acceso a sus elementos. Te parecen similares a las colas porque comúnmente estructuras como colas y pilas se implementan internamente justamente con listas enlazadas, sólo que con restricciones en cuanto a dónde puedes insertar y tomar elementos, por lo que son más simples en ese sentido. Pero eso son detalles de su implementación y nada impide crear una cola usando alguna otra estructura interna, así que no hay que mezclar los conceptos.
Cita de: Beginner Web en 8 Septiembre 2019, 23:04 PM
Y sin olvidar que una lista ocupa el doble de tamaño en memoria que un arreglo convencional :') ;-)
Bueno, no necesariamente. Una lista enlazada simple le añade a cada elemento 4 u 8 bytes (el tamaño de un puntero). Si los elementos de la lista son, digamos, structs, y ocupan 32 bytes, entonces una lista ocupará un 12.5 o 25% más que si se usara un arreglo.