sourabh sukhija Ответов: 2

Как создать связанный список с помощью шаблонов в C++


реализуйте шаблонный класс односвязного списка.

1.Определите узел класса шаблона, который состоит из двух элементов данных: данных шаблона и указателя узла next. Вы можете определить необходимые функции-члены для класса шаблона.

2.Определение шаблона класса MyList класса в класс MyList файл.сек. Класс шаблона состоит из двух элементов данных: головки указателя узла и хвоста указателя узла. Головка указателя указывает на первый узел связанного списка. Хвост указателя указывает на последний узел связанного списка. Изначально связанный список пуст. Определите следующие функции-члены для класса MyList

1.конструктор по умолчанию.
2.конструктор копирования.
3.деструктор.
4.функция push_front принимает данные шаблона в качестве параметра и добавляет их в начало связанного списка (перед первым узлом, если он не пуст).
5.функция push_back принимает данные шаблона в качестве параметра и добавляет их в хвост связанного списка (после последнего узла, если он не пуст).
6.функция isEmpty возвращает true, если связанный список пуст.
7.функция front возвращает данные в первом узле связанного списка.
8.функция back возвращает данные в последнем узле связанного списка.
9.функция pop_front удаляет первый узел в связанном списке. Он не возвращает никаких данных.
10.функция pop_back удаляет последний узел в связанном списке. Он не возвращает никаких данных.
11.определите вложенный итератор класса в классе MyList, который состоит из элементов данных: текущего указателя узла и последнего указателя узла. Определите следующие функции-члены и операторы перегрузки для класса iterator.
11.1 конструктор по умолчанию.
11.2 оператор разыменования * возвращает данные текущего узла.
11.3 оператор Post increment ++ перемещает текущий указатель на следующий узел в списке.
11.4 перегрузка оператора сравнения “не равно” сравнивает итератор с другим итератором. Возвращает true, если текущие указатели обоих итераторов не совпадают.

12. функция begin возвращает итератор с указателем current указывает на первый узел списка, а указатель last указывает на хвост списка.
13. функция end возвращает итератор с указателем current, установленным в NULL, и указателем last, указывающим на хвост списка.
14. функция печати принимает ссылочный параметр std::ostream и печатает все данные, хранящиеся в связанном списке, в ostream с помощью итератора define выше.

Реализуйте функции-члены для узла шаблонных классов, мой список и итератор в списке "мой список" файл.ч



template<class T> 
class List 
{
    public:
        //Class declarations.
        class Iterator;
        class ConstIterator;

        //Constructors and Destructors.
        List() : head(NULL), tail(NULL), size(0) {} //Constructor
        ~List(); //Destructor

        //Methods
        Iterator<T> begin();
        Iterator<T> end();
        void insert(const T& data);
        void insert(const T& data, const Iterator<T>& iterator);
        void remove(const Iterator<T>& iterator);
        int getSize() const;
        Iterator<T> find();
        void sort();

    private:
        class Node<T>;
        Node<T>* head;
        Node<T>* tail;
        int size;
};


template<class T> 
class List<class T>::Iterator 
{
    public:
        Iterator(); //Constructor
        ~Iterator(); //Destructor

        T& operator ++ ();
        T operator ++ (int);
        T& operator -- ();
        T operator -- (int);
        bool operator == (const Iterator<T>& iterator) const;
        bool operator != (const Iterator<T>& iterator) const;
        T& operator * ();

    private:
        List<T>* list;
        Node<T>* node;
};


template<class T>
class List<class T>::ConstIterator 
{
    public:
        ConstIterator(); //Constructor
        ~ConstIterator(); //Destructor

        T& operator ++ ();
        T operator ++ (int);
        T& operator -- ();
        T operator -- (int);
        bool operator == (const ConstIterator<T>& iterator) const;
        bool operator != (const ConstIterator<T>& iterator) const;
        T& operator * ();

    private:
        const List<T> * list;
        const Node<T> * node;
};


template<class T>
class List<class T>::Node
{
    public:
        Node(const T& _data, const Node* _next = NULL) : data(_data), next(_next) {} //Constructor
        ~Node(); //Destructor 

    private:
        T data;
        Node* next;
};


Что я уже пробовал:

Это мой 50% код. пожалуйста, помогите мне сделать еще 50%.

Sergey Alexandrovich Kryukov

- Нет, извини. "Помогите мне сделать еще 50%" - это не вопрос, это просьба сделать 50% (но на самом деле около 90-99, 5%) вашей работы за вас. Вы даже не указали на какие-либо проблемы.
Единственный способ научиться чему-то, выполняя свои задания, - это делать все это самостоятельно.
Однако, если у вас есть какие-то вопросы по смежным темам, мы с удовольствием ответим.
—СА

Patrice T

Твоя Домашняя Работа !

2 Ответов

Рейтинг:
19

KarstenK

Вы должны сделать свою домашнюю работу, чтобы научиться кодированию. Это повысит ваши знания и навыки, и, возможно, вы когда-нибудь заработаете много денег.

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

;-)


CPallini

5. Оооо, немного поздно. :-)

Рейтинг:
0

Member 14622605

#include <iostream>
использование пространства имен std;
шаблон <typename t="">
структурный узел{
T данные;
узел* далее;
};

класса Stack {
частный :
узел<t>* toptr;
узел<t>* сверху;
общественный:
стек(){
toptr=NULL;
}
void push(int v)
{ узел<t>* temp;
temp=новый узел<t>;
top->data* v;
temp->next=toptr;
top->data* v;
temp->next=toptr;
toptr=темп;
}
пустота поп() {
узел<t>* temp=toptr;
toptr=toptr->Далее;
удалить темп;
}
булевую переменную пустой() константный {
return toptr==NULL;
}
bool full() const {
узел<t>* temp;
temp=новый узел<t>;
if(temp==NULL)
вернуть true;
еще
удалить темп;
возвращать false;
}
пустота make_empty() {
в то время как (!пусто)
{
хлопок();
}

}
~стек()
{
make_empty();
}
};
тап_п()
{
возвращает 0;
}


Richard Deeming

Неформатированный, необъяснимый код-дамп не является решением этого уже решенного вопроса.