У меня есть одна сдержись Списка Вдвойне Соединенная и Узла. Я хочу осуществить объект типа ListaLigada внутри структуры, начиная с которой я верю в Соединенный главный Список. Проблема, которая у меня есть, состоит в том, что я не заканчиваю понимать, как в том, чтобы соглашаться на внутренний список.
Мой Узел получает структуру, чтобы создавать узлы, которые идут внутри Соединенного Списка; так что я хочу согласиться на Соединенный Список, который будет внутри центрального блока. У меня нет даже идеи, из как делания этого, я очень потеряна.
Приложение я сдержись LL и заявления моей структуры.
И после только я распределил память внутри моего void main (). Пожалуйста, я нуждаюсь в помощи.
Сдержись:
#pragma once
#ifndef LL
#define ll
template struct Nodo {
public:
T1 info;
Nodo* prev;
Nodo* next;
Nodo(){ }
Nodo(T1 data)
{
this->info = info;
}
~Nodo() {}
};
template class ListaLigada
{
public:
T* head=NULL, *tail=NULL;
ListaLigada();
void AddNodo(T nodo);
};
template void ListaLigada::AddNodo(T nodo)
{
T* aux = NULL;
aux = new T(nodo);
aux->next = NULL;
aux->prev = NULL;
if (head == NULL)
{
head = aux;
tail = aux;
}
else
{
tail->next = aux;
aux->prev = tail;
tail = aux;
}
}
#endif
У тебя есть серьезные проблемы diseГ±o, концепции и implementaciГіn в тебе cГіdigo.
LL
, но определяешь ll
. #pragma once
, которые это include guard из составителя C ++ Microsoft, а следовательно он не estГЎndar ни портативно. default
, то же самое для разрушителя. Nodo::info
, если сама. Alumno
хранит указатель в список, это склонное к ошибкам, использует инстанцию. , Чтобы соглашаться на список внутри Alumno
, достаточно использовать действующую точку (.
):
Alumno a;
a.materias_alumno->AddNodo(/* lo que corresponda */);
, Но это serГ - в с cГіdigo, поскольку это у тебя есть сейчас, что не является ни правильным ни подходящим, мое предложение - следующее:
template <class T> class ListaLigada
{
// El nodo debe ser privado e inaccesible desde fuera.
// No es necesario que sea plantilla, porque usa los datos plantilla de la clase madre.
struct Nodo {
T dato;
Nodo* prev = nullptr;
Nodo* next = nullptr;
Nodo() = default; // Deja que el compilador te haga el constructor.
Nodo(T1 data) : dato{data}
// ^^^^^^^^^^ <--- Usa la lista de inicialización del constructor.
{
}
~Nodo() = default; // Deja que el compilador te haga el destructor.
};
// Los datos, deben ser internos e inaccesibles desde fuera.
Nodo* head=NULL, *tail=NULL;
public:
ListaLigada();
void AddDato(T dato)
{
// Hacer cosas...
}
};