Как создать список на языке c++?

Как создать список в языке C++? Мне нужно, чтобы он создавал связанный список. Как мне это сделать? Есть ли хорошие учебники или примеры?

Комментарии к вопросу (7)
Решение

Я так понимаю, вы знаете, что 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;
    }

    // ...
};

Следующий шаг-создание списка шаблон, так что вы можете вещи и другие ценности (не только целые).

Если вы знакомы с умными указателями, то можно заменить на сырые указатели использовать смарт-указатели. Часто я нахожу, что люди рекомендуют смарт-указатели для пускателей. Но на мой взгляд, вы должны сначала понять, зачем нужен смарт-указатели, а затем использовать их. Но это требует, что сначала надо разобраться сырые указатели. Иначе, вы используете какую-то волшебный инструмент, не зная, зачем он нужен.

Комментарии (1)

На самом деле следует использовать стандартный класс List. Если, конечно, это не домашнее задание, или вы хотите узнать, как списки реализованы в STL.

В google можно найти множество простых учебников, например этот. Если вы хотите узнать, как работают связанные списки "под капотом", попробуйте поискать примеры/учебники по спискам на C, а не на C++.

Комментарии (1)

Если вы собираетесь использовать СТД::list, то вам нужно передать параметр типа:

list intList;  
list* intListPtr = new list;

Если вы хотите знать, как работают списки, я рекомендую погуглить по некоторым С/C++ учебники, чтобы получить представление о этой теме. Следующим этапом будет обучение достаточно на C++ создать класс список, и, наконец, класс шаблона списка.

Если у вас есть вопросы, задавайте сюда.

Комментарии (0)

Зачем изобретать колесо. Достаточно использовать контейнер списка STL.

#include 

// in some function, you now do...
std::list mylist; // integer list

Подробнее...

Комментарии (1)

Я'м предполагаем, что это домашнее задание вопрос, поэтому вы, вероятно, хотите пойти здесь. Он имеет объяснение, связные списки, дает хорошие псевдокод, а также реализацию на C++ можно скачать.

Я'd рекомендую для чтения через объяснение и понимание псевдокод перед слепо, использующие осуществления. Это тема, что вы действительно должны понимать, в глубину если вы хотите продолжать в CS.

Комментарии (1)

Создать список, используя шаблоны C++

я.е

template  struct Node 
{
    T data;
    Node * next;
};

template  class List 
{
    Node *head,*tail;

    public: 
        void push(T const&);  // push element 
        void pop();           // pop element 
        bool empty()          // return true if empty. 
}; 

Затем вы можете написать код вроде:

List;

Тип T не является динамически во время выполнения.Это только для компиляции.

Для полного примера нажмите здесь.

Для C++ учебник шаблоны нажмите здесь.

Комментарии (0)

Мы уже в 21 веке!!! Не пытайтесь реализовать уже существующие структуры данных. Попробуйте использовать существующие структуры данных.

Используйте библиотеку STL или Boost

Комментарии (3)