Как я могу создать список в C ++?

int [][] twoDim = new int [5][5];

int a = (twoDim.length);//5
int b = (twoDim[0].length);//5

for(int i = 0; i < a; i++){ // 1 2 3 4 5
    for(int j = 0; j <b; j++) { // 1 2 3 4 5
        int x = (i+1)*(j+1);
        twoDim[i][j] = x;
        if (x<10) {
            System.out.print(" " + x + " ");
        } else {
            System.out.print(x + " ");
        }
    }//end of for J
    System.out.println();
}//end of for i
29
задан David Grant 29 December 2008 в 16:58
поделиться

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 шаблоном, чтобы вы могли добавлять другие значения (не только целые числа).

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

43
ответ дан Community 29 December 2008 в 16:58
поделиться

Создать список, используя шаблоны 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 ++ щелкните «услышать» .

0
ответ дан Community 29 December 2008 в 16:58
поделиться

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

list<int> intList;  
list<int>* intListPtr = new list<int>;

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

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

15
ответ дан martijnn2008 29 December 2008 в 16:58
поделиться

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

#include <list>

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

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

8
ответ дан mepcotterell 29 December 2008 в 16:58
поделиться
0
ответ дан plan9assembler 29 December 2008 в 16:58
поделиться

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

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

22
ответ дан Roddy 29 December 2008 в 16:58
поделиться

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

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

1
ответ дан brien 29 December 2008 в 16:58
поделиться

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

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

-3
ответ дан Vinay 29 December 2008 в 16:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: