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

Напишите шаблон класса односвязного списка, который принимает элементы любого типа

05.05.2014, 20:31. Просмотров 1138. Ответов 2
Метки нет (Все метки)

Ребята, помогите. Надо решить следующую задачу:

Напишите шаблон класса односвязного списка, который принимает элементы любого типа. В классе реализуйте функции для работы с односвязным списком.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 20:31
Ответы с готовыми решениями:

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

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

Шаблон односвязного списка
Код: #include <iostream> #include <conio.h> using namespace std; template <typename T> class...

Шаблон для односвязного списка
Доброго времени суток! Проблема - пишу шаблон для односвязного списка На приведенном фрагменте...

Шаблон для односвязного списка
Помогите разобраться с шаблонами, выводятся ошибки, ничего не получается.. //List.h #include...

2
schdub
Эксперт С++
3052 / 1394 / 421
Регистрация: 19.01.2009
Сообщений: 3,752
Завершенные тесты: 1
05.05.2014, 22:52 2
Лучший ответ Сообщение было отмечено Paradise9999 как решение

Решение

list.hpp
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#pragma once
 
#include <cassert>
 
namespace op {
 
template <class T>
class OneLinkedList {
private:
    struct Node {
        T     value;
        Node *next;
        Node(const T & val, Node * nex) : value(val), next(nex) {}
    };
    Node * mHead;
    int    mCount;
public:
    class Iterator {
    public:
        Iterator(Node* curr) : mCurr(curr) {}
        T & operator*() {
            assert(mCurr != NULL);
            return mCurr->value;
        }
        const T & operator*() const {
            assert(mCurr != NULL);
            return mCurr->value;
        }
        void operator++() const {
            assert(mCurr != NULL);
            mCurr = mCurr->next;
        }
        bool operator==(const Iterator & other) const {
            return (mCurr == other.mCurr);
        }
        bool operator!=(const Iterator & other) const {
            return (mCurr != other.mCurr);
        }
    private:
        mutable Node * mCurr;
    };
 
    typedef Iterator iterator;
    typedef const Iterator const_iterator;
    typedef T& reference;
    typedef const T& const_reference;
    typedef T* pointer;
    typedef const T* const_pointer;
 
    const_reference front() const {
        assert(mHead != NULL);
        return mHead->value;
    }
    reference front() {
        assert(mHead != NULL);
        return mHead->value;
    }
 
    iterator begin() {
        return Iterator(mHead);
    }
    iterator end() {
        return Iterator(NULL);
    }
    const_iterator begin() const {
        return Iterator(mHead);
    }
    const_iterator end() const  {
        return Iterator(NULL);
    }
    void remove(const iterator & o) {
        for (Node * n = mHead, *p = 0; n; p=n, n=n->next) {
            if (n->value == *o) {
                (p ? p->next : mHead) = n->next;
                --mCount;
                delete n;
                return;
            }
        }
    }
 
    OneLinkedList() : mHead(0), mCount(0) {}
    ~OneLinkedList() { destroy(mHead); }
 
    void destroy(Node* r) {
        Node * n = r;
        while (n) {
            r = n;
            n = n->next;
            delete r;
        }
    }
    void insert(const T & value) {
        mHead = new Node(value, mHead);
        ++mCount;
    }
    void remove(const T & value) {
        for (Node * n = mHead, *p = 0; n; p=n, n=n->next) {
            if (n->value == value) {
                (p ? p->next : mHead) = n->next;
                --mCount;
                delete n;
                return;
            }
        }
    }
    bool contains(const T & value) const {
        for (const iterator & b = begin(), & e = end(); b != e; ++b) {
            if (*b == value) return true;
        }
        return false;
    }
    bool empty() const {
        return (mHead == 0);
    }
    int size() const {
        return mCount;
    }
};
 
} // namespace op
Использование (для Google Test):
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
// ...
 
TEST(List, oneLinked) {
    op::OneLinkedList<int> list;
    ASSERT_TRUE(list.empty());
    for (int i = 0; i < 10; ++i) {
        list.insert(i);
    }
    ASSERT_FALSE(list.empty());
    for (int i = 0; i < 10; ++i) {
        ASSERT_TRUE(list.contains(i));
        list.remove(i);
        ASSERT_FALSE(list.contains(i));
    }
    ASSERT_TRUE(list.empty());
}
 
TEST(List, oneLinkedIteratorTraverse) {
    op::OneLinkedList<int> list;
    ASSERT_TRUE(list.empty());
    for (int i = 0; i < 10; ++i) {
        list.insert(i);
    }
    ASSERT_FALSE(list.empty());
 
    ASSERT_TRUE(list.contains(9));
    list.front() = 99;
    ASSERT_TRUE(list.contains(99));
    ASSERT_FALSE(list.contains(9));
 
    int count = 0;
    op::OneLinkedList<int>::iterator it = list.begin(), ie = list.end();
    for (; it != ie; ++it, ++count) {
        *it = 99;
        std::cout << (*it) << std::endl;
    }
    ASSERT_EQ(list.size(), count);
}
 
// ...
1
Paradise9999
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 21
06.05.2014, 03:05  [ТС] 3
Чего так много кода, меня препод сожрёт же.
Но всё рано огромное спасибо
0
06.05.2014, 03:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 03:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Шаблон для узла односвязного списка
Есть узел typedef struct Var { String varname; int value; struct Var *next; }...

Напишите пример односвязного списка
Напишите пожалуйста простенький пример с односвязным списком для Visual C++ 6.0 (функции...

Сортировка Arraylist, который содержит элементы типа класса Hospital
У меня есть ArrayList , который содержит элементы типа класса Hospital, как мне написать метод...


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

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

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