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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
VitasLys_625
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 9
#1

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

11.10.2012, 13:00. Просмотров 2130. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать шаблон класса для хранения динамического списка (C++):

Разработать шаблон класса для хранения данных (контейнер) - C++
Я не понял как описать шаблон класса для хранения данных (контейнер). Данные должны хранится, например, в виде массива. Шаблон должен...

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

Шаблон класса Node для узла связного списка - C++
Здравствуйте, помогите пожалуйста реализовать и протестируйте функцию: template &lt;class T&gt; Node&lt;T&gt; *GetNode(const T &amp;item, Node&lt;T&gt;...

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

Разработать шаблон класса для работы со стеком реализованным в виде связного списка - C++
Разработать шаблон класса для работы со стеком реализованным в виде связного списка. Тип эле-ментов задается как параметр шаблона. Написать...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 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 / 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;
1
aihb
0 / 0 / 0
Регистрация: 20.10.2012
Сообщений: 5
20.10.2012, 21:28 #10
на примере примерно понятно, что делается)
только вопрос:
вообще что за спецификатор friend?
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
20.10.2012, 21:30 #11
Это спецификатор со смыслом "я, класс <имя класса>, находясь в здравом уме и ясной памяти, действуя по собственной воле, разрешаю <тому, что идёт после friend> лезть в мои private-поля и пользоваться моими private-методами".
1
ilikeMagic
11 / 11 / 2
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 21:57
Привет! Вот еще темы с ответами:

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

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

Сколько памяти необходимо для динамического хранения массива из 5 элементов - C++
Сколько памяти необходимо для динамического хранения массива из 5 элементов, каждый из которых занимает 7 байт памяти, в 64-х разрядной ОС?...

Шаблоны функций, Ошибка: для использования класса шаблон требуется список аргументов шаблон - C++
Есть у меня 3 структуры Трамвай , Троллейбус , Автобус. Для автобуса определены функции (работают) Троллейбус и Трамвай одинаковые поля...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.10.2012, 21:57
Ответ Создать тему
Опции темы

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