Как бы я пошел по созданию этого списка вдвойне связанного списка?
-
21-12-2019 - |
Вопрос
В настоящее время учусь о структурах данных и связанных списках. Я пытаюсь создать вдвойне связанный список, и я не уверен, как сделать это. Данные «узла» я хотел бы быть классом, который я уже создал. Все, что я могу найти в Интернете об связанных списках, они просто используют целочисленные значения, и я не уверен, как лучше включить другие классы.
Что я думаю, я бы сделал это ....
У меня есть абстрактный класс «аккаунт». Тогда классы «сбережения» и «Проверка» получены из аккаунта. Я хотел бы иметь данные «узла», чтобы быть типом учетной записи, возможно, указатель базового класса, поэтому можно использовать как «сбережения», так и «проверка».
Что я не уверен, что в том, что в моем классе «Узел» Мои частные данные - указатель базового класса «Указатель» на саму аккаунт, NectPointer и предыдущий поставщик. Класс «Список» будет управлять связанным списком и создать новые узлы. Но как тогда я бы получить доступ к функциям-членам учетной записи?
Мне было интересно, каковы лучший способ подойти к этому? Должен ли я добавить GetTers к классу «узел», который вызовите учетные записи Gotter функций для получения данных о учетной записи? Или это будет лучше просто сделать «сбережения» и «проверять» сами узлы, и добавить следующий указатель и предыдущий указатель на участников частных данных?
Решение
Вы должны создать универсальный вдвойне списка
template <class T> class List{
T value;
Node& next; //Or Node* whatever you choose
Node& prev;
public:
...
};
.
Таким образом, ваш список будет служить как оно должно - в виде списка. Теперь, если вам нужен список учетных записей, просто заявляйте один
List<Account> allAccounts = new List<Account>(); //assuming there's a default c'tor
.
И если вам нужно иметь некоторые отношения между учетной записью, а остальными, вы можете использовать наследование.
Тот факт, что вы делаете свой список универсальными и не ограничены любым типом, сделают ваш код более элегантным, чистым и иметь смысл.