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

Необходимо создать список, элемент которого может быть список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Цикл for: найти сумму членов ряда a=2^n/(n-1)!, модуль которых больше или равен заданному е http://www.cyberforum.ru/cpp-beginners/thread1089041.html
Дано числовой ряд и некоторое число e.найти сумму тех членов ряда модуль которых больше или равен задорному е. Общий член имеет вид a=2^n/(n-1)!.
C++ Цикл for: найти сумму членов ряда a=1/(3n-2)(3n+1), модуль которых больше или равен заданному е Дано числовой ряд и некоторое число e.найти сумму тех членов ряда модуль которых больше или равен задорному е. Общий член имеет вид a=1/(3n-2)(3n+1) http://www.cyberforum.ru/cpp-beginners/thread1089039.html
C++ Решение СЛАУ методом Гаусса
Всем привет))) Друзья, сколько я уже лазию по инету и по этому форуму, я никак не могу найти правильно работающей программки. Может кто нибудь поможет в реализации, программа должна работать в консольном приложении Visual Studio 2008. А задача такая: Написать программу, которая решает систему линейных уравнений методом Гаусса, а также вычисляет определитель матрицы этим же методом. То есть,...
C++ Каким образом зашифровать Hex строки
Интересует следующий вопрос, каким образом можно зашифровать hex строку в dll чтобы ее нельзя было расшифровать. Сам в прикладном программировании ноль, просто прогер говорит что в любом случае можно будет расшифровать. В этой строке содержаться адрес сайта с обработчиком. Жду ответа только от знающих людей, спасибо.
C++ Написать программу, которая выводит матрицу смежности графа с определенным количеством вершин и ребер http://www.cyberforum.ru/cpp-beginners/thread1088996.html
Всем доброго времени суток!!! Передо мной стоит задача: написать программу, которая выводит матрицу смежности графа с определенным количеством вершин и ребер, а также должен быть нарисован сам граф. Пользователь должен вводить: 1) кол-во вершин (например: 1, 2, 3, 4); 2) кол-во ребер (например: 4); 3) название самих рёбер (например: 1 2, 2 3, 3 4, 4 1); Дальше должен строиться граф (видимо...
C++ Как скрыть строку: для продолжения нажмите любую клавишу? Я новичок. Интересуюсь, как, с помощью какой команды в C++, скрыть строку в MS DOS: ,,Для продолжения нажмите любую клавишу" ? подробнее

Показать сообщение отдельно
Sgushenka
0 / 0 / 0
Регистрация: 10.07.2013
Сообщений: 9
04.02.2014, 14:54     Необходимо создать список, элемент которого может быть список
Всем доброго времени суток! Стоит следующая задача: необходимо создать список, элемент которого может быть список (да да, звучит парадоксально). Вот пример моего кода. В нём достаточно показать как это сделать на самом первом class List node
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// Объявление шаблона односвязного списка
#include <cassert>
#include <iostream>
using namespace std;
// Объявление шаблона списка
template <class T>
 
class List{
 
     private:
        // описание элемента списка
        class List_node {
 
                friend class List<T>;
 
                // Создать List_node с осмысленным значением.
                List_node(T node_val): val(node_val) {}
 
                // Создать пустой List_node.
                List_node(){}
 
                ~List_node(){}
                // Напечатать значение.
                void print_val() const{cout << val << " ";}
                
                List_node *next;  //Указывает на следующий List_node.
                T val; // Данные.
                };
 
          List_node *head;        // Указывает на начало списка.
          List_node *tail;        // Указывает на запредельный узел.
          List_node *current;     // Указывает на текущий узел.
 
          // Объявленные закрытыми и не определенные операции копирования
          // и присваивания, что делает их недоступными
          List & operator=(const List &);
          List(const List &);
 
          // Вспомогательная функция, вызываемая из List_node(T),
          // add_front(T) и add_rear(T).
 
          void add_to_empty(T node_val) {
                List_node *node_to_add = new List_node(node_val);
                node_to_add->next = head;
                head = node_to_add;
                tail->next = head;
                current = head;
                }
      public:
 
      // Создать пустой список
      List(){
        head = tail = new List_node;
        tail->next = 0;
        current = tail;
        }
 
      // Создать список, содержащий один элемент
      List(T node_val){
        head = tail = new List_node;
        tail->next = 0;
        add_to_empty(node_val);
      }
 
      // Пройти по списку от начала к концу, удаляя каждый элемент
      ~List() {
 
        List_node *node_to_delete = head;
        for (List_node *sn = head; sn != tail;) {
                sn = sn->next;
                delete node_to_delete;
                node_to_delete = sn;
        }
 
        // assert( node_to_delete == tail);
        delete node_to_delete;
      }
      bool is_empty() const {return head == tail;}
 
      // Ввести новый элемент в начало списка.
      // Отметьте особый случай пустого списка, когда tail->next
      //  равно 0 и потому tail->next не имеет смысла.
 
      void add_front (T node_val) {
        if (is_empty())
                add_to_empty(node_val);
        else {
                List_node *node_to_add = new List_node (node_val);
                node_to_add->next = head;
                head = node_to_add;
        }
      }
 
      // Добавить новый элемент в конец списка.
      // Отметьте специальный случай пустого списка, когда tail->next
      // равно 0 и потому tail->next->next не имеет смысла.
 
      void add_rear(T node_val) {
        if (is_empty())
                add_to_empty(node_val);
        else {
                List_node *node_to_add = new List_node(node_val);
                node_to_add->next = tail;
                tail->next->next  = node_to_add;
                tail->next        = node_to_add;
              }
        }
 
        // Удалить начальный элемент списка.
        // Заметьте, что remove_front() освобождает занимаемую
        // удаляемым элементом память, и потому должна правильно
        // обрабатывать пустые списки. В противном случае она может
        // удалить List_node, который удаляться не должен.
 
        T remove_front() {
                if (is_empty()) throw "tried to remove from an empty list";
 
                List_node *node_to_remove = head;
                T return_val = node_to_remove->val;
                head = node_to_remove->next;
 
                // Помимо конструкторов и вставки в пустой список, это единственное
                // место, где изменяется current (в качестве побочного эффекта).
                if (current == node_to_remove) current = node_to_remove->next;
 
                delete node_to_remove;
                return return_val;
        }
 
        // Возвращает true, если список содержит node_val
        // и false в противном случае.
        bool find(T node_val) const {
            for(List node *sn = head; sn != tail; sn = sn->next) {
                if(sn->val == node_val) return true;
                }
            return false;
        }
 
        // Возвращает значение n-го элемента списка. Пользователь должен
        // быть уверен, что element_num  не меньше единицы и не больше,
        // чем размер списка.
 
        T get_nth(const int element_num) const {
                if(element_num < 1) throw "get_nth argument less than one";
 
                int count = 1;
                for ( List_node *sn = head; sn !=tail; sn = sn->next) {
                    if (count++ == element_num) return sn->val;
                }
 
                throw "element_num exceeds list size";
        }
 
        // Возвращает размер списка, подсчитывая его элементы.
        // Неэффективна, поскольку предполагается, что такая операция
        //  не будет частой (для тестирования), и поэтому лучше затратить
        // здесь дополнительное время, чем терять его на модификацию
        // переменной размера списка при каждом включении/удалении элемента.
 
        int size() const {
                if(is_empty()) return 0;
                int count = 0;
                for(List_node *sn = head; sn != tail; sn=sn->next) ++count;
                return count;
        }
 
        // Печатает список удобно и эффективно
 
        void print() const {
                for (List_node *sn = head; sn != tail; sn = sn->next) {
                        sn->print_val();
                }
                cout << endl;
        }
 
        //
        // Здесь начинаются функции, поддерживающие перечислитель.
        //
 
        void reset_current() { current = head; }
 
        bool increment_current() {
                if(current != tail) {
                        current = current->next;
                        return true;
                }
                return false;
        }
 
        // Вызов get_current в случае, если current == tail не определено.
        // Пользователь должен проверить.
        T get_current() const { return current->val;}
 
        bool current_is_tail() const { return current == tail; }
 
        // Заметьте, что current  не изменяется.
        bool insert_after_current(const T node_val) {
                if (current_is_tail()) return false;
 
                List_node *node_to_add = new List_node(node_val);
                node_to_add->next = current->next;
                current->next = node_to_add;
        }
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru