Форум программистов, компьютерный форум CyberForum.ru

Реализовать шаблон класса для хранения динамического списка - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
11.10.2012, 13:00     Реализовать шаблон класса для хранения динамического списка #1
Нужно реализовать:
1.Операции вставки элемента в начало списка
2.Операцию удаления первого элемента
3.Деструктор высвобождающий всю выделенную память

Пример
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T> class List
{
  private:
    struct element
      {
         T data;
         element *next;
       }
       element *head;
  ...
};
Прошу подсказок и помощи.
Я полный нуб в с++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 13:00     Реализовать шаблон класса для хранения динамического списка
Посмотрите здесь:

C++ Шаблон класса Node для узла связного списка
Сколько памяти необходимо для динамического хранения массива из 5 элементов C++
C++ Разработать шаблон класса для реализации односвязного списка
Как создать шаблон класса одномерного динамического массива? C++
C++ Разработать шаблон класса для работы со стеком реализованным в виде связного списка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
11.10.2012, 13:09
  #2

Не по теме:

VitasLys_625, где-то вы, братец, лукавите. Полным нубам такие задания не дают. Задания для полных нубов - найти сумму двух чисел, вывести максимум из трех чисел, реализовать факториал через циклы и рекурсию.
Вы пропустили часть материала что ли?

VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
11.10.2012, 13:31  [ТС]     Реализовать шаблон класса для хранения динамического списка #3
Цитата Сообщение от I.M. Посмотреть сообщение

Не по теме:

VitasLys_625, где-то вы, братец, лукавите. Полным нубам такие задания не дают. Задания для полных нубов - найти сумму двух чисел, вывести максимум из трех чисел, реализовать факториал через циклы и рекурсию.
Вы пропустили часть материала что ли?

Ну можно и так сказать. Не успел разобраться с материалом))
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.10.2012, 16:04     Реализовать шаблон класса для хранения динамического списка #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
Нужно реализовать:
 1.Операции вставки элемента в начало списка
 2.Операцию удаления первого элемента
 3.Деструктор высвобождающий всю выделенную память
*/
#ifndef LIST_H
#define LIST_H
 
template <class T>
class TList
{
private:
    class TElement
    {
    private:
        T data_;
        TElement * next_;
    public:
        TElement(T Data, TElement * Next) : data_(Data), next_(Next) {};
        TElement * Next(void) const { return next_; }
        void setNext(const TElement * Next) { next_ = Next; }
    };
    TElement * head_;
public:
    TList(void);
    ~TList(void);
    void push_front(T el);
    void del_front(void);
};
 
template <class T>
TList<T>::TList(void) : head_(0)
{}
 
template <class T>
TList<T>::~TList(void)
{
    TElement * p = head_;
    while (p != 0)
    {
        TElement * next = p->Next();
        delete p;
        p = next;
    }
}
 
template <class T>
void TList<T>::push_front(T el)
{
    TElement * newEl = new TElement(el, head_);
    head_ = newEl;
}
 
template <class T>
void TList<T>::del_front(void)
{
    TElement * newHead = head_->Next();
    delete head_;
    head_ = newHead;
}
#endif
VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
11.10.2012, 16:12  [ТС]     Реализовать шаблон класса для хранения динамического списка #5
Цитата Сообщение от John Prick Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*
Нужно реализовать:
 1.Операции вставки элемента в начало списка
 2.Операцию удаления первого элемента
 3.Деструктор высвобождающий всю выделенную память
*/
#ifndef LIST_H
#define LIST_H
 
template <class T>
class TList
{
private:
    class TElement
    {
    private:
        T data_;
        TElement * next_;
    public:
        TElement(T Data, TElement * Next) : data_(Data), next_(Next) {};
        TElement * Next(void) const { return next_; }
        void setNext(const TElement * Next) { next_ = Next; }
    };
    TElement * head_;
public:
    TList(void);
    ~TList(void);
    void push_front(T el);
    void del_front(void);
};
 
template <class T>
TList<T>::TList(void) : head_(0)
{}
 
template <class T>
TList<T>::~TList(void)
{
    TElement * p = head_;
    while (p != 0)
    {
        TElement * next = p->Next();
        delete p;
        p = next;
    }
}
 
template <class T>
void TList<T>::push_front(T el)
{
    TElement * newEl = new TElement(el, head_);
    head_ = newEl;
}
 
template <class T>
void TList<T>::del_front(void)
{
    TElement * newHead = head_->Next();
    delete head_;
    head_ = newHead;
}
#endif
Спасибо большое.
А можете еще немного прокомментировать?

TElement - это сам список???

TElement(T Data, TElement * Next) : data_(Data), next_(Next) {}; )
TElement * Next(void) const { return next_; } ) что это???
void setNext(const TElement * Next) { next_ = Next; } )

Пожалуйста оставьте комментарии к функциям
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.10.2012, 16:37     Реализовать шаблон класса для хранения динамического списка #6
Ну по-моему, всё очевидно. TElement - это элемент списка. Список - TList. Сделал исключительно по вашему примеру, хотя можно было и без этого обойтись (имею ввиду структуру TElement).

Цитата Сообщение от VitasLys_625 Посмотреть сообщение
TElement * Next(void) const { return next_; } ) что это???
Функция, возвращающая next_. Мне кажется, если вам не понятны или не известны подобные вещи, вам надо "откатиться" на несколько ступеней ниже по обучению и повторить там всё хорошенько. Иначе дальше будет ещё труднее во всём разбираться, и никакие коменнтарии не помогут.
VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
11.10.2012, 17:48  [ТС]     Реализовать шаблон класса для хранения динамического списка #7
Цитата Сообщение от John Prick Посмотреть сообщение
Ну по-моему, всё очевидно. TElement - это элемент списка. Список - TList. Сделал исключительно по вашему примеру, хотя можно было и без этого обойтись (имею ввиду структуру TElement).


Функция, возвращающая next_. Мне кажется, если вам не понятны или не известны подобные вещи, вам надо "откатиться" на несколько ступеней ниже по обучению и повторить там всё хорошенько. Иначе дальше будет ещё труднее во всём разбираться, и никакие коменнтарии не помогут.
Спасибо за пояснение.
Да надо подучить.
Учту на будущее.
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:02     Реализовать шаблон класса для хранения динамического списка #8
здравствуйте)
у меня такая же задача.
написала по-другому.
но дело не в этом.
споткнулась на операторе вывода <<. не могу перегрузить.
кто сможет-объясните)
сколько и какие параметры получает, как преобразует.
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
20.10.2012, 21:12     Реализовать шаблон класса для хранения динамического списка #9
Цитата Сообщение от aihb Посмотреть сообщение
здравствуйте)
у меня такая же задача.
написала по-другому.
но дело не в этом.
споткнулась на операторе вывода <<. не могу перегрузить.
кто сможет-объясните)
сколько и какие параметры получает, как преобразует.
Я, обычно, объявляю перегрезку оператора вывода как метод класса со спецификатором friend.
Например, есть класс комплексных чисел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Complex
{
   private:
        float _re;
        float _imag;
 
   public:
   /*....... */
   friend ostream & operator << (ostream & out, Complex obj)
   {
       out << obj._re << " + " << obj._imag << " *i "<< endl;
       return out; 
   }  
};
В main обращайся так:
C++
1
2
Complex my_comp_numb;
cout << my_comp_numb;
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:28     Реализовать шаблон класса для хранения динамического списка #10
на примере примерно понятно, что делается)
только вопрос:
вообще что за спецификатор friend?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.10.2012, 21:30     Реализовать шаблон класса для хранения динамического списка #11
Это спецификатор со смыслом "я, класс <имя класса>, находясь в здравом уме и ясной памяти, действуя по собственной воле, разрешаю <тому, что идёт после friend> лезть в мои private-поля и пользоваться моими private-методами".
ilikeMagic
11 / 11 / 2
Регистрация: 26.04.2012
Сообщений: 104
20.10.2012, 21:50     Реализовать шаблон класса для хранения динамического списка #12
Цитата Сообщение от aihb Посмотреть сообщение
на примере примерно понятно, что делается)
только вопрос:
вообще что за спецификатор friend?
Спецификатор friend позволяет обращаться к private полям тем методам, которые определены в других классах, функциях и т.д.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 21:57     Реализовать шаблон класса для хранения динамического списка
Еще ссылки по теме:

Спроектировать шаблон класса spisok для реализации односвязного линейного списка. Не работает сортировка C++
Создать шаблон динамического списка C++
C++ Инкапсуляция класса, который является элементом динамического списка

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:57     Реализовать шаблон класса для хранения динамического списка #13
так разве методы, описанные в теле класса, не имеют доступа ко всем полям этого класса?без спецификатора friend?

Добавлено через 6 минут
все.врубилась)
просто затормозила)
Yandex
Объявления
20.10.2012, 21:57     Реализовать шаблон класса для хранения динамического списка
Ответ Создать тему
Опции темы

Текущее время: 03:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru