Как я могу создать список на C ++? Мне это нужно, чтобы создать связанный список. Как бы я это сделал? Есть ли хорошие уроки или примеры, которым я мог бы следовать?
Как я могу создать список на c ++?
Ответы (8)
Я так понимаю, вы знаете, что в C ++ уже есть класс связанного списка, и вы хотите реализовать свой собственный, потому что хотите узнать, как это сделать.
Сначала прочтите Почему мы используем массивы вместо других структур данных?, в котором содержится хороший ответ. базовых структур данных. Затем подумайте, как их смоделировать на C ++:
struct Node {
int data;
Node * next;
};
По сути, это все, что вам нужно для реализации списка! (очень простой). Тем не менее, в нем нет абстракций, вы должны связывать элементы в каждой руке:
Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
Теперь у вас есть связанный список узлов, все они размещены в стеке:
d -> c -> b -> a
42 35 20 1
Следующий шаг - написать класс-оболочку List
, который указывает на начальный узел и позволяет добавлять узлы по мере необходимости, отслеживая заголовок списка (следующее очень упрощено):
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;
}
// ...
};
Следующий шаг - сделать список шаблоном, чтобы вы могли вставлять другие значения (не только целые числа).
Если вы знакомы с интеллектуальными указателями, вы можете заменить необработанные указатели, используемые интеллектуальными указателями. Часто я нахожу, что начинающим рекомендуют умные указатели. Но на мой взгляд, вы должны сначала понять, зачем вам нужны умные указатели, а потом уже ими пользоваться. Но для этого необходимо сначала понять необработанные указатели. В противном случае вы используете какой-то волшебный инструмент, не зная, зачем он вам нужен.
Вам действительно следует использовать стандартный класс List. Если, конечно, это не домашний вопрос или вы не хотите знать, как списки реализуются в STL.
В Google вы найдете множество простых руководств, например этот. Если вы хотите узнать, как работают связанные списки «под капотом», попробуйте поискать примеры / руководства для списков C, а не C ++.
Если вы собираетесь использовать std::list
, вам необходимо передать параметр типа:
list<int> intList;
list<int>* intListPtr = new list<int>;
Если вы хотите узнать, как работают списки, я рекомендую поискать в Google несколько руководств по C / C ++, чтобы понять эту тему. Следующим шагом будет изучение C ++, достаточное для создания класса списка и, наконец, класса шаблона списка.
Если у вас есть еще вопросы, задавайте их здесь.
Зачем изобретать велосипед. Просто используйте контейнер списка STL.
#include <list>
// in some function, you now do...
std::list<int> mylist; // integer list
Я предполагаю, что это вопрос домашнего задания, поэтому вы, вероятно, захотите пойти сюда < / а>. В нем есть руководство, объясняющее связанные списки, хороший псевдокод, а также есть реализация на C ++, которую вы можете скачать.
Я бы рекомендовал прочитать объяснение и понять псевдокод, прежде чем слепо использовать реализацию. Это тема, которую вам действительно следует глубоко понять, если вы хотите продолжить работу в CS.
Увеличить ptr_list
http://www.boost.org/doc/libs/1_37_0/libs/ptr_container/doc/ptr_list.html
HTH
Создать список с помощью шаблонов C ++
i.e
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.
};
Затем вы можете написать такой код:
List<MyClass>;
Тип T
не является динамическим во время выполнения, а только во время компиляции.
Чтобы просмотреть полный пример, щелкните здесь.
Чтобы просмотреть руководство по шаблонам C ++, щелкните здесь.
Мы уже в 21 веке !! Не пытайтесь реализовать уже существующие структуры данных. Попробуйте использовать существующие структуры данных.
Использовать библиотеку STL или Boost