Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
1

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

11.10.2012, 13:00. Просмотров 2741. Ответов 12
Метки нет (Все метки)

Нужно реализовать:
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;
  ...
};
Прошу подсказок и помощи.
Я полный нуб в с++
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 13:00
Ответы с готовыми решениями:

Разработать шаблон класса для хранения данных (контейнер)
Я не понял как описать шаблон класса для хранения данных (контейнер). Данные...

Разработать шаблон класса для реализации односвязного списка
Помогите пожалуйста разработать шаблон класса для реализации односвязного...

Шаблон класса Node для узла связного списка
Здравствуйте, помогите пожалуйста реализовать и протестируйте функцию:...

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

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

12
I.M.
11.10.2012, 13:09
  #2

Не по теме:

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

0
VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
11.10.2012, 13:31  [ТС] 3
Цитата Сообщение от I.M. Посмотреть сообщение

Не по теме:

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

Ну можно и так сказать. Не успел разобраться с материалом))
0
John Prick
837 / 768 / 258
Регистрация: 27.07.2012
Сообщений: 2,180
Завершенные тесты: 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
0
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; } )

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

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


Функция, возвращающая next_. Мне кажется, если вам не понятны или не известны подобные вещи, вам надо "откатиться" на несколько ступеней ниже по обучению и повторить там всё хорошенько. Иначе дальше будет ещё труднее во всём разбираться, и никакие коменнтарии не помогут.
Спасибо за пояснение.
Да надо подучить.
Учту на будущее.
0
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:02 8
здравствуйте)
у меня такая же задача.
написала по-другому.
но дело не в этом.
споткнулась на операторе вывода <<. не могу перегрузить.
кто сможет-объясните)
сколько и какие параметры получает, как преобразует.
0
ilikeMagic
11 / 11 / 1
Регистрация: 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;
1
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:28 10
на примере примерно понятно, что делается)
только вопрос:
вообще что за спецификатор friend?
0
OhMyGodSoLong
~ Эврика! ~
1247 / 996 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
20.10.2012, 21:30 11
Это спецификатор со смыслом "я, класс <имя класса>, находясь в здравом уме и ясной памяти, действуя по собственной воле, разрешаю <тому, что идёт после friend> лезть в мои private-поля и пользоваться моими private-методами".
1
ilikeMagic
11 / 11 / 1
Регистрация: 26.04.2012
Сообщений: 104
20.10.2012, 21:50 12
Цитата Сообщение от aihb Посмотреть сообщение
на примере примерно понятно, что делается)
только вопрос:
вообще что за спецификатор friend?
Спецификатор friend позволяет обращаться к private полям тем методам, которые определены в других классах, функциях и т.д.
1
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:57 13
так разве методы, описанные в теле класса, не имеют доступа ко всем полям этого класса?без спецификатора friend?

Добавлено через 6 минут
все.врубилась)
просто затормозила)
0
20.10.2012, 21:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 21:57

Спроектировать шаблон класса spisok для реализации односвязного линейного списка. Не работает сортировка
Здравствуйте! Очень нужна помощь в реализации программы. Задание:...

Как создать шаблон класса одномерного динамического массива?
Нужно решить задачу(консольное приложение(совместимое с visual studio 2005)): ...

Инкапсуляция класса, который является элементом динамического списка
Задание: создать два класса, первый содержит требуемые данные и является членом...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru