Título: Problema con las Listas C++ Publicado por: 98Fran en 8 Septiembre 2019, 11:12 am 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? Título: Re: Problema con las Listas C++ Publicado por: @XSStringManolo en 8 Septiembre 2019, 14:17 pm 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 List assign 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.) Título: Re: Problema con las Listas C++ Publicado por: 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 :') ;-)
Título: Re: Problema con las Listas C++ Publicado por: RayR en 10 Septiembre 2019, 00:48 am 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.
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. |