Как создать список в языке C++? Мне нужно, чтобы он создавал связанный список. Как мне это сделать? Есть ли хорошие учебники или примеры?
Я так понимаю, вы знаете, что c++ уже имеет связанный список класса, и вы хотите реализовать свой собственный, потому что вы хотите научиться это делать.
Во-первых, читать https://stackoverflow.com/questions/392397/arrays-whats-the-point , который содержит хороший ответ на основные структуры данных. Затем подумайте о том, как смоделировать их в C++:
struct Node {
int data;
Node * next;
};
В принципе, что's все, что вам нужно реализовать список! (очень простой в одно). Но он не имеет никаких абстракций, необходимо связать элементы за руку:
Node a={1}, b={20, &a}, c={35, &b} d={42, &c};
Теперь у вас есть связанный список узлов, все выделенные в стеке:
d -> c -> b -> a
42 35 20 1
Следующий шаг-написать класс-оболочку список
, что указывает на начальный узел, и позволяет добавлять необходимые узлы, отслеживание главе списка (ниже очень упрощенный):
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++.
Если вы собираетесь использовать СТД::list, то вам нужно передать параметр типа:
list<int> intList;
list<int>* intListPtr = new list<int>;
Если вы хотите знать, как работают списки, я рекомендую погуглить по некоторым С/C++ учебники, чтобы получить представление о этой теме. Следующим этапом будет обучение достаточно на C++ создать класс список, и, наконец, класс шаблона списка.
Если у вас есть вопросы, задавайте сюда.
Зачем изобретать колесо. Достаточно использовать контейнер списка STL.
#include <list>
// in some function, you now do...
std::list<int> mylist; // integer list
Я'м предполагаем, что это домашнее задание вопрос, поэтому вы, вероятно, хотите пойти здесь. Он имеет объяснение, связные списки, дает хорошие псевдокод, а также реализацию на C++ можно скачать.
Я'd рекомендую для чтения через объяснение и понимание псевдокод перед слепо, использующие осуществления. Это тема, что вы действительно должны понимать, в глубину если вы хотите продолжать в CS.
Создать список, используя шаблоны C++
я.е
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++ учебник шаблоны нажмите здесь.