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

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

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

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

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

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

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

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

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

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

2
schdub
Эксперт С++
3024 / 1369 / 418
Регистрация: 19.01.2009
Сообщений: 3,639
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 03:05

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

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

Напишите класс «Стек» для целочисленных данных на основе односвязного списка
Напишите класс «Стек» для целочисленных данных на основе односвязного списка....


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

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

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