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
Я полагаю, что вы знаете, что в 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 шаблоном, чтобы вы могли добавлять другие значения (не только целые числа).
Если вы знакомы с умными указателями, вы можете заменить необработанные указатели, используемые умными указателями. Часто я нахожу, что люди рекомендуют умные указатели для начинающих. Но, на мой взгляд, вы должны сначала понять, зачем вам нужны умные указатели, а затем использовать их. Но для этого необходимо, чтобы вы сначала поняли сырые указатели. В противном случае вы используете какой-то магический инструмент, не зная, зачем он вам нужен.
Создать список, используя шаблоны 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 ++ щелкните «услышать» .
Если вы собираетесь использовать 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
Вы действительно должны использовать стандартный класс List . Если, конечно, это не домашний вопрос, или вы не хотите знать, как списки реализованы STL.
Вы найдете множество простых учебников через Google, например, , этот . Если вы хотите узнать, как связанные списки работают «под капотом», попробуйте поискать примеры / учебники по списку C, а не C ++.
Я предполагаю, что это домашнее задание, так что вы, вероятно, хотите перейти сюда . Он содержит учебник, объясняющий связанные списки, дает хороший псевдокод, а также имеет реализацию C ++, которую вы можете скачать.
Я бы рекомендовал прочитать объяснение и понять псевдокод, прежде чем вслепую использовать реализацию. Это тема, которую вы действительно должны глубоко понять, если хотите продолжить в CS.
Мы уже в 21 веке !! Не пытайтесь реализовать уже существующие структуры данных. Попробуйте использовать существующие структуры данных.
Использовать библиотеку STL или Boost