Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 01.03.2020
Сообщений: 3
1

Кольцевой двусвязный список. Есть ошибки в коде

01.03.2020, 16:26. Просмотров 276. Ответов 3


Программа не работает. Это моя первая практика, поэтому, конечно же, есть ошибки. Нуждаюсь в помощи. Надеюсь, я правильно оформил вопрос.
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
#include <iostream>
using namespace std;
struct Double_node{ 
    int val;
    Double_node* next;
    Double_node* prev;
};
class Double_list {
private:
    Double_node* tail= nullptr;
    int sz=1;
public:
    Double_list() { tail = new Double_node();
    tail->next = tail;
    tail->prev = tail;
    }
    Double_list(int x) {
        Double_node* t = new Double_node();
        t->next = t;
        t->prev = t;
            t->val = x;
    }
    ~Double_list() {}
        void push_front(int x) {
            Double_node*cur = tail -> next;
            tail->next = new Double_node(x,cur,tail);
    }
        void push_back(int x) {
            Double_node* cur = tail->prev;
            tail->prev = new Double_node(x, tail, cur);
            }
        void pop_back() {
            Double_node* cur = tail->prev->prev;
            delete tail->prev;
            tail->prev = cur;
            cur->next = tail;
        }
        void pop_front() {
            Double_node* cur = tail->next->next;
            delete tail->next;
            tail->next = cur;
            cur->prev = tail;
        }
 
        bool empty() { 
            if (tail->next = tail) return true;
            else return false;
        }
        int size() {
            Double_node* cur = tail->next;
            while (cur != tail)
            {
                sz++;
                cur = cur->next;
            }
            return sz;
        }
        void clear() {}
        int& front() { return tail->next->val; }
        int& back() { return tail->prev->val; }
        void print() {
            Double_node* cur = tail->next;
            while (cur != tail)
            {
                cout << cur->val << endl;
                cur = cur->next;
            }
        }
    };
 
int main()
{
    Double_list a;
    Double_list zz;
    cout << zz.size;
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2020, 16:26
Ответы с готовыми решениями:

Кольцевой двусвязный список шаблон класса ошибки
Код выдаёт некоторые ошибки (прикрепили, на картинке): Что исправить? #include &quot;StdAfx.h&quot; ...

Переделать двусвязный список в двусвязный кольцевой
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и...

Кольцевой двусвязный список
Что здесь нужно поменять, чтобы был кольцевой двусвязный список? #include &lt;iostream&gt; #include...

Двусвязный кольцевой список
подскажите пожалуйста как будит выглядеть Двусвязный кольцевой список? #include &quot;stdafx.h&quot;...

3
1827 / 821 / 317
Регистрация: 08.11.2016
Сообщений: 2,457
01.03.2020, 17:26 2
Цитата Сообщение от Sunagatullin Посмотреть сообщение
C++
1
cout << zz.size;
после size скобочки, вот так:
C++
1
cout << zz.size();
Добавлено через 53 секунды
вообще неплохо бы вывод компилятора, на что он ругается приложить.
0
127 / 86 / 46
Регистрация: 27.12.2019
Сообщений: 495
01.03.2020, 17:53 3
Sunagatullin, деструктор нужно реализовать с очисткой памяти!!!!!!!
C++
1
 ~Double_list() {}
0
3953 / 2228 / 928
Регистрация: 07.02.2019
Сообщений: 5,850
01.03.2020, 20:22 4
Sunagatullin, исправил очевидные ошибки, тестируй сам
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <iostream>
 
using namespace std;
 
struct Double_node {
    int val;
    Double_node* next;
    Double_node* prev;
};
 
class Double_list {
private:
    Double_node* tail = nullptr;
    size_t sz = 0;
public:
    Double_list() = default;
    Double_list(const Double_list&) = delete;
    Double_list& operator=(const Double_list&) = delete;
 
    explicit Double_list(int x) : Double_list()
    {
        push_back(x);
    }
        
    ~Double_list()
    {
        clear();
    }
 
    void push_front(int x) {
        if (tail)
        {
            Double_node* cur = new Double_node{ x, tail->next, tail };
            tail->next = tail->next->prev = cur;
        }
        else
        {
            tail = new Double_node{ x };
            tail->next = tail->prev = tail;
        }
        ++sz;
    }
    void push_back(int x) {
        push_front(x);
        tail = tail->next;
    }
    void pop_back() {
        if (sz > 1)
        {
            Double_node* cur = tail;
            tail = tail->prev;
            tail->next = cur->next;
            cur->next->prev = tail;
            delete cur;
        }
        else
        {
            delete tail;
            tail = nullptr;
        }
        --sz;
    }
    void pop_front() {
        tail = tail->next;
        pop_back();
    }
 
    bool empty() const {
        return sz;
    }
    size_t size() const {
    
        return sz;
    }
 
    void clear() {
        Double_node* cur = tail->next;
        while (cur != tail)
        {
            Double_node* to_del = cur;
            cur = cur->next;
            delete to_del;
        }
        delete tail;
        tail = nullptr;
        sz = 0;
    }
 
    int& front()
    {
        if (sz) return tail->next->val;
        throw std::runtime_error{ __FUNCTION__ };
    }
    int& back()
    {
        if (sz) return tail->val;
        throw std::runtime_error{ __FUNCTION__ };
    }
    void print() const {
        if (tail)
        {
            Double_node* cur = tail->next;
            while (cur != tail)
            {
                cout << cur->val << ' ';
                cur = cur->next;
            }
            cout << cur->val << endl;
        }
        else
        {
            cout << "empty\n";
        }
    }
};
 
int main()
{
    Double_list a;
    for (int i{}; i < 5; ++i) a.push_back(i);
    a.print();
 
    for (int i{}; i < 5; ++i) a.push_front(i);
    a.print();
 
    a.pop_front();
    a.print();
 
    a.pop_back();
    a.print();
 
    a.clear();
    a.print();
 
    try
    {
        cout << a.back() << endl;
    }
    catch (const std::runtime_error& err)
    {
        cerr << "exception: " << err.what() << '\n';
    }
 
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2020, 20:22

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

Двусвязный кольцевой список
Используя циклический двунаправленный список определить, симметрична ли данная строка символов.

Двусвязный кольцевой список
Здравствуйте, подскажите пожалуйста где ошибка, список ложится при выводе, исключение: &quot;temp был...

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

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


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

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

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