¿Cómo puedo crear una lista en C++? Lo necesito para crear una lista vinculada. ¿Cómo voy a hacer eso? ¿Hay buenos tutoriales o ejemplos que pueda seguir?¿Cómo podría crear una lista en C++?
Respuesta
Supongo que sabe que C++ ya tiene una clase de lista vinculada, y desea implementar la suya porque quiere aprender a hacerlo.
Primero, lea Why do we use arrays instead of other data structures?, que contiene una buena respuesta de las estructuras de datos básicas. Luego piense en cómo modelarlos en C++:
struct Node {
int data;
Node * next;
};
¡Básicamente eso es todo lo que necesita para implementar una lista! (un muy simple).Sin embargo, no tiene abstracciones, tiene que vincular los artículos por mano:
Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
Ahora, hay que tener una lista enlazada de nodos, todos asignados en la pila:
d -> c -> b -> a
42 35 20 1
El siguiente paso es escribir una clase contenedora List
que apunta al nodo de inicio, y permite añadir nodos, según sea necesario, hacer el seguimiento de la cabeza de la lista (lo que sigue es muy simplificada):
class List {
struct Node {
int data;
Node * next;
};
Node * head;
public:
List() {
head = NULL;
}
~List() {
while(head != NULL) {
Node * n = head->next;
delete head;
head = n;
}
}
void add(int value) {
Node * n = new Node;
n->data = value;
n->next = head;
head = n;
}
// ...
};
el siguiente paso es hacer que la Lista sea una plantilla, de modo que pueda rellenar otros valores (no solo enteros).
Si está familiarizado con los punteros inteligentes, puede reemplazar los punteros sin formato utilizados con los punteros inteligentes. A menudo encuentro que la gente recomienda consejos inteligentes a los principiantes. Pero en mi opinión, primero debes entender por qué necesitas punteros inteligentes y luego usarlos. Pero eso requiere que primero se necesiten los indicadores crudos. De lo contrario, utiliza alguna herramienta mágica, sin saber por qué lo necesita.
Realmente debería usar el standard List class. A menos que, por supuesto, esta sea una pregunta de tareas, o si desea saber cómo STL implementa las listas.
Encontrarás muchos tutoriales sencillos a través de google, como this one. Si desea saber cómo funcionan las listas de enlaces "bajo el capó", intente buscar ejemplos/tutoriales de la lista C en lugar de C++.
lo siento ... estoy estudiando todo por mi cuenta, no de la escuela – jessemiel
Por qué reinventar la rueda. Solo use el contenedor de la lista STL.
#include <list>
// in some function, you now do...
std::list<int> mylist; // integer list
std :: list es un tipo parametrizado y new devuelve un puntero, su ejemplo debería ser más como: list
ya estamos en el siglo 21 !! No intente implementar las estructuras de datos ya existentes. Intenta usar las estructuras de datos existentes.
uso de la biblioteca STL o Boost
Imo siempre es una buena idea crear algo - simple - implementación de características o estructuras que uno intenta comprender. ;) – karx11erx
Estoy de acuerdo con karx.Tuvimos asignaciones como esta en la escuela y diría que estoy mucho más agradecido con el código que ya está escrito, y más comprensión de lo que realmente hace por eso. Un caso similar también sería aprender ensamblador. El conocimiento de lo abstraído es generalmente bueno. –
Si es una tarea, es simple de implementar, si es parte de un proyecto más grande, es decir, si se usa en un proyecto más grande para almacenar los datos, entonces no deberíamos implementar, deberíamos usar la biblioteca existente. – Vinay
Si se va a utilizar std::list
, lo necesario para pasar un parámetro de tipo:
list<int> intList;
list<int>* intListPtr = new list<int>;
Si usted quiere saber cómo funcionan las listas, me recomendar buscando en Google para algunos C/C++ tutoriales para obtener una comprensión de ese tema. El siguiente paso sería aprender suficiente C++ para crear una clase de lista, y finalmente una clase de plantilla de lista.
Si tiene más preguntas, vuelva a preguntar aquí.
Supongo que esta es una pregunta para la tarea, por lo que probablemente quiera ir al here. Tiene un tutorial que explica las listas enlazadas, da un buen pseudocódigo y también tiene una implementación en C++ que puedes descargar.
Recomiendo leer la explicación y comprender el pseudocódigo antes de usar a ciegas la implementación. Este es un tema que realmente debe comprender en profundidad si desea continuar en CS.
esto no es una pregunta de trabajo a domicilio, estoy estudiando – jessemiel
Crear lista mediante C++ plantillas
es decir
template <class T> struct Node
{
T data;
Node * next;
};
template <class T> class List
{
Node<T> *head,*tail;
public:
void push(T const&); // push element
void pop(); // pop element
bool empty() // return true if empty.
};
A continuación, puede escribir código como:
List<MyClass>;
El tipo T no es dinámico en tiempo de ejecución. Solo es para el tiempo de compilación.
Para el ejemplo completo click hear.
Para el tutorial de plantillas C++ click hear.
- 1. ¿Cómo se podría crear una Clojure Lint?
- 2. Crear una lista de listas en C#
- 3. ¿cómo podría crear una clase de notificación global?
- 4. ¿Cómo podría crear fábricas para una asociación cíclica en FactoryGirl?
- 5. Cómo crear una lista anidada en reStructuredText?
- 6. Crear una lista de EL
- 7. Cómo buscar una lista en C#
- 8. ¿Forma rápida de crear una lista de valores en C#?
- 9. Crear una lista distinta de tipo personalizado en C#
- 10. ¿Cómo crear una lista infinitamente repetitiva en Haskell?
- 11. ¿Cómo puedo crear una matriz/lista de diccionarios en python?
- 12. pyopengl: ¿Podría reemplazar C++?
- 13. ¿Cómo crear una lista de tamaño de arreglo en python?
- 14. ¿Cómo crear una lista de verificación en reStructuredText (reST)?
- 15. Esquema de cómo crear una lista
- 16. Cómo crear una lista desde el rango
- 17. Cómo crear una lista de correo electrónico
- 18. Crear una lista de símbolos en látex
- 19. ¿Cómo podría crear un mensaje de Windows personalizado?
- 20. cómo crear una lista de listas
- 21. cómo crear una lista de categorías/segmentos?
- 22. Crear una lista de páginas en Orchard
- 23. ¿Cómo puedo crear una nueva lista de la lista existente?
- 24. Crear una lista de respaldo en python
- 25. Crear una lista de objetos en Python
- 26. Crear una lista de objetos en Python
- 27. ¿Cómo vaciar una lista en C#?
- 28. Cómo ordenar una lista en C#
- 29. ¿Cómo trunco una lista en C#?
- 30. ¿Cómo crear dinámicamente una clase en C#?
dijo que él mismo estudia y no para la tarea. Creo que no es razonable agregar la etiqueta de la tarea, entonces –
@litb - De acuerdo. Acabo de ajustar las etiquetas. – Roddy
Necesitamos una etiqueta que describa cuándo un usuario quiere el código y no es tarea. Yo nomino a 'plzsendtehcodez'. –