Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Простая база данных на С++ https://www.cyberforum.ru/ cpp-beginners/ thread1732121.html
Всем привет! Помогите с написанием программы и с поиском ошибки. Надо создать базу данных, структура изображена на картинке. Первый раз пишу программу такого размера. Большую часть программы я...
Вычислить значение функции заданной разложением в ряд Тейлора C++
Помогите составить программу для вычисления суммы {(1+x)}^{n}=1+nx+\frac{n(n-1){x}^{2}}{2!} ....
C++ Поиск минимального из элементов больших двух
В одномерном массиве x={x(i)}, где i=0,1...,10 нужно найти минимальный из элементов больших двух и поменять его местами с первым. Помогите исправить код и написать функцией. //Программа для...
C++ Не корректно работает добавление Готовая курсовая сделанная на C free 5.0, не корректно работает добавление, а создание хорошо... Помогите исправить... Cllas.cpp главный файл программы compani.h файл описания класса и его... https://www.cyberforum.ru/ cpp-beginners/ thread1732082.html
C++ Расчетная контрольная работа (мини курсовая) https://www.cyberforum.ru/ cpp-beginners/ thread1732079.html
Мне нужно написать расчетную контрольную работу по программированию (мини курсовая). Я обыскал весь интернет и ничего не нашел, ни теории ни программы. Буду очень благодарен если поможете. Вот тема:...
Домножить элементы массива на максимальный элемент C++
Все элементы массива А = (а1, а2, ..., аn), следующие за элементом, равны max (а1, а2, ..., аn), умножить на max (а1, а2, ..., аn). Напечатать начальный и результирующий массив. Исходные данные:...
C++ Вычисление выражения
Пожалуйста, помогите с задачей Составить программу для вычисления: S=\begin{cases} & \text{ \prod_{i=2(2)}^{8}{i}^{2}-a, } a\geq 0 \\ & \text{ \sum_{i=3(3)}^{9}(i-2), } a<0 \end{cases}...
C++ Найти количество отрицательных и произведение положительных элементов массива Найти количество отрицательных и произведение положительных элементов массива. https://www.cyberforum.ru/ cpp-beginners/ thread1732060.html
C++ Организовать цикл худения и кормежки жирафа https://www.cyberforum.ru/ cpp-beginners/ thread1732055.html
Если кому нетрудно написать, помогите решить эту задачу Сделать через конструктор (2 класса) , жираф (1 класс) , весит 1000кг, каждую секунду он худеет на 3кг, как только он достигает веса 940кг,...
C++ Как вывести массив в файл? #include <iostream> #include <fstream> using namespace std; int main() { int n; cout<<"kolichestvo elementov "; cin >>n; int *arr=new int; for (int i=0;i<n; i++) *(arr+i)=i+1; https://www.cyberforum.ru/ cpp-beginners/ thread1732041.html
670 / 286 / 99
Регистрация: 04.07.2014
Сообщений: 803
11.05.2016, 18:40 0

Кольцевой двусвязный список

11.05.2016, 18:40. Просмотров 1749. Ответов 2
Метки (Все метки)

Ответ


ФЕРЗЬ1, А тут и списка у вас нет. Ваш struct c - это только данные. Заведите методы для работы со списком. А ещё лучше класс:

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>
 
struct Node {
  int data;
  Node *prev;
  Node *next;
};
 
class CircularDoublyLinkedList {
public:
private:
  Node *m_head;
  size_t m_size;
 
public:
  CircularDoublyLinkedList();
  ~CircularDoublyLinkedList();
  // WARNING: Мы не соблюли правило трёх/пяти
 
  bool isEmpty();
  void push(int data);
  int pop();
  size_t size();
  Node *getHead();
};
 
CircularDoublyLinkedList::CircularDoublyLinkedList()
    : m_head(nullptr)
    , m_size(0)
{
}
 
CircularDoublyLinkedList::~CircularDoublyLinkedList()
{
  while (!isEmpty()) {
    pop();
  }
}
 
bool CircularDoublyLinkedList::isEmpty()
{
  return (m_head == nullptr);
}
 
void CircularDoublyLinkedList::push(int data)
{
  if (isEmpty()) {
    m_head = new Node();
    m_head->data = data;
    m_head->prev = m_head;
    m_head->next = m_head;
    m_size = 1;
  } else {
    Node *tmp = new Node();
    tmp->data = data;
    tmp->next = m_head;
    tmp->prev = m_head->prev;
    m_head->prev = tmp;
    tmp->prev->next = tmp;
    m_head = tmp;
    ++m_size;
  }
}
 
int CircularDoublyLinkedList::pop()
{
  int res;
  if (m_size > 1) {
    Node *tmp = m_head;
    m_head = tmp->next;
    tmp->prev->next = m_head;
    m_head->prev = tmp->prev;
    res = tmp->data;
    delete tmp;
    --m_size;
 
  } else if (m_size == 1) {
    res = m_head->data;
    delete m_head;
    m_head = nullptr;
    m_size = 0;
  } else {
    res = 0;
  }
  return res;
}
 
size_t CircularDoublyLinkedList::size()
{
  return m_size;
}
 
Node *CircularDoublyLinkedList::getHead()
{
  return m_head;
}
 
void print_nodes_data_forward(Node *node, size_t count)
{
  if (node) {
    std::cout << "Forward:  ";
    Node *tmp = node;
    for (size_t i = 0; i < count; ++i) {
      std::cout << tmp->data << " -> ";
      tmp = tmp->next;
    }
    std::cout << "...\n";
  } else {
    std::cerr << "ERROR: Empty!!!\n";
  }
}
 
void print_nodes_data_backward(Node *node, size_t count)
{
  if (node) {
    std::cout << "Backward: ";
    Node *tmp = node;
    for (size_t i = 0; i < count; ++i) {
      std::cout << tmp->data << " -> ";
      tmp = tmp->prev;
    }
    std::cout << "...\n";
  } else {
    std::cerr << "ERROR: Empty!!!\n";
  }
}
 
int main()
{
  CircularDoublyLinkedList circ;
 
  for (size_t i = 1; i < 6; ++i) {
    std::cout << "Push: " << i << "\n";
    circ.push(i);
    print_nodes_data_forward(circ.getHead(), 10);
    print_nodes_data_backward(circ.getHead(), 10);
  }
  for (size_t i = 1; i < 6; ++i) {
    int n = circ.pop();
    std::cout << "Pop: " << n << "\n";
    print_nodes_data_forward(circ.getHead(), 10);
    print_nodes_data_backward(circ.getHead(), 10);
  }
  return 0;
}
Bash
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
Push: 1
Forward:  1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> ...
Backward: 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> ...
Push: 2
Forward:  2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> ...
Backward: 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> ...
Push: 3
Forward:  3 -> 2 -> 1 -> 3 -> 2 -> 1 -> 3 -> 2 -> 1 -> 3 -> ...
Backward: 3 -> 1 -> 2 -> 3 -> 1 -> 2 -> 3 -> 1 -> 2 -> 3 -> ...
Push: 4
Forward:  4 -> 3 -> 2 -> 1 -> 4 -> 3 -> 2 -> 1 -> 4 -> 3 -> ...
Backward: 4 -> 1 -> 2 -> 3 -> 4 -> 1 -> 2 -> 3 -> 4 -> 1 -> ...
Push: 5
Forward:  5 -> 4 -> 3 -> 2 -> 1 -> 5 -> 4 -> 3 -> 2 -> 1 -> ...
Backward: 5 -> 1 -> 2 -> 3 -> 4 -> 5 -> 1 -> 2 -> 3 -> 4 -> ...
Pop: 5
Forward:  4 -> 3 -> 2 -> 1 -> 4 -> 3 -> 2 -> 1 -> 4 -> 3 -> ...
Backward: 4 -> 1 -> 2 -> 3 -> 4 -> 1 -> 2 -> 3 -> 4 -> 1 -> ...
Pop: 4
Forward:  3 -> 2 -> 1 -> 3 -> 2 -> 1 -> 3 -> 2 -> 1 -> 3 -> ...
Backward: 3 -> 1 -> 2 -> 3 -> 1 -> 2 -> 3 -> 1 -> 2 -> 3 -> ...
Pop: 3
Forward:  2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> ...
Backward: 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> 2 -> 1 -> ...
Pop: 2
Forward:  1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> ...
Backward: 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> 1 -> ...
Pop: 1
ERROR: Empty!!!
ERROR: Empty!!!


Вернуться к обсуждению:
Кольцевой двусвязный список
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2016, 18:40
Готовые ответы и решения:

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

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

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

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

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