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

Переделать двусвязный список в двусвязный кольцевой - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сравнение строки в структуре с переменной типа char http://www.cyberforum.ru/cpp-beginners/thread534598.html
Есть некая функция Х которая возвращает кол-во строк структуры Poezda a, строка a.StNazn в которой равна введеному с клавиатуры c и создает структуру Poezda b в которую записывает те строки в а которые совпали с "с". я наверное плхо объяснила, но всё же. проблемма в том что строка структуры и "с" не хотят стравниваться. как бы так их сравнить чтобы всёбыло ок?)) int X(Poezda a,Poezda b,int...
C++ Вставить нуль перед k-тым элементом последовательности Прошу помочь с задачей: Дана последовательность целых чисел. Перед каждым k-тым элементом по счету вставить 0. http://www.cyberforum.ru/cpp-beginners/thread534596.html
Угол между прямой и осью ОХ C++
Доброго времени суток всем. Сдаю курсовую по OpenGL, и, собственно, на опеделенной стадии возникла следующая проблема: нужно по введенным параметрам прямой a, b и с определить в двухмерном пространстве угол между этой прямой и осью ОХ. Вопрос в большей мере математический, но преподаватель сказал "обратите особое внимание на ф-ю atan2". почитав в мсдн о ней, я не совсем понял, какое отношение...
Итераторы и стеки C++
Вот условие: Задано целое число. Записать все десятичные цифры этого числа в стек. Переписать элементы в новый стек удалив все цифры 0. Вот исходник (сори за коменты): //--------------------------------------------------------------------------- #pragma hdrstop #include <stdlib.h>
C++ Онлайн среды разработки http://www.cyberforum.ru/cpp-beginners/thread534576.html
Здравствуйте. Я постоянно бываю не за своим компом, но иногда ребуется покодить, есть ли онлайн среды разработок С++, С# и тд. И подскажите какие лучше, какие русские и простенькие. Заранее спасибо
C++ Книжки Win32 API на с++ Доброго времени суток! Нам в универе на лабораторные работы задают задание, написать консольную програмку с использованием win32 api. И при этом не объясняя как, чего, где, что и зачем ;) Лабы на темы: работа с дисками в системе, работа с файлами и тд.. Хотелось бы научиться самому делать подобные приложения. Подскажите что мне, как начинающему, нужно почитать по win32 api чтобы я понял как... подробнее

Показать сообщение отдельно
rostykm
2 / 2 / 0
Регистрация: 30.03.2011
Сообщений: 34

Переделать двусвязный список в двусвязный кольцевой - C++

30.03.2012, 15:30. Просмотров 1788. Ответов 3
Метки (Все метки)

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

list.h
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
#include <iostream>
 
using namespace std;
 
template <class T>
class List 
{
    private:
       class Node 
       { 
           public:
                Node *next;                     
                Node *prev;             
                T val;                   
            
                Node(T node_val) : val(node_val) { }        
                Node() { }                                  
 
                ~Node() { }                                 
 
           void print_val( ) { cout << val << " "; }
        };
 
    public:
        class Iterator 
        {
            private:
                friend class List<T>;
                Node *t_node;
            public:
                Iterator( ) : t_node(0) { }
                Iterator(Node * dn) : t_node(dn) { }
 
                Iterator(const Iterator & it) : t_node(it.t_node) { }
                
                Iterator& operator=(const Iterator& it) 
                { 
                  t_node = it.t_node;
                  return *this;
                 }
                
                bool operator==(const Iterator& it) const 
                { 
                    return (t_node == it.t_node); 
                }
 
                bool operator!=(const Iterator& it) const 
                { 
                    return !(it == *this); 
                }
 
                Iterator& operator++( ) 
                { 
                    if ( t_node == 0 )
                        throw "incremented an empty Iterator";
                    if ( t_node->next == 0 )
                        throw "tried to increment too far past the end";
                    t_node = t_node->next;
                    
                    return *this;
                }
 
                Iterator& operator--( ) 
                { 
                    if ( t_node == 0 )
                        throw "decremented an empty Iterator";
                    if ( t_node->prev == 0 )
                        throw "tried to decrement past the beginning";
                    t_node = t_node->prev;
 
                    return *this;
                }
 
                T& operator*( ) const 
                {
                    if ( t_node == 0 )
                        throw "tried to dereference an empty Iterator";
                
                    return t_node->val;
                }
         };
 
    private:
        Node *head;      
        Node *tail;       
        List & operator=(const List &);
        List(const List &);
        
        Iterator head_iterator;
        Iterator tail_iterator;
    
    public:
        List( ) 
        {  
            head = tail = new Node;
            tail->next = 0;
            tail->prev = 0;
            head_iterator = Iterator(head);
            tail_iterator = Iterator(tail);
        }
 
        List(T node_val) 
        { 
            head = tail = new Node;
            tail->next = 0;         
            tail->prev = 0;
            head_iterator = Iterator(head);
            tail_iterator = Iterator(tail);
            add_front(node_val);
        }
 
        ~List( )  
        {  
            Node *node_to_delete = head;
            
            for (Node *sn = head; sn != tail;) 
            { 
                sn = sn->next;
                delete node_to_delete;
                node_to_delete = sn;
            }
            
            delete node_to_delete;
        }
 
        bool is_empty( ) 
        {
            return head == tail;
        }
 
        Iterator front( ) 
        { 
            return head_iterator; 
        }
 
        Iterator rear( )  
        { 
            return tail_iterator; 
        }
 
        void add_front(T node_val)  
        { 
                Node *node_to_add = new Node(node_val);
                node_to_add->next = head;
                node_to_add->prev = 0;
                head->prev = node_to_add;
                head = node_to_add;
                head_iterator = Iterator(head);
        }
 
 
        bool remove_it(Iterator & key_i)  
        {  
            for ( Node *dn = head; dn != tail; dn = dn->next ) 
                if ( dn == key_i.t_node )     
                { 
                    dn->prev->next = dn->next;
                    dn->next->prev = dn->prev;
                    delete dn;                             
                    key_i.t_node = 0;
                    
                    return true;
                }
                
                return false;
        }
 
 
        Iterator find(T node_val) const 
        {   
            for ( Node *dn = head; dn != tail; dn = dn->next ) 
                if ( dn->val == node_val ) return Iterator(dn);
                    return tail_iterator;
        }
 
        int size( ) const 
        {  
            int count = 0;
            for ( Node *dn = head; dn != tail; dn = dn->next ) 
                count++;
            return count;
        }
 
        void print( ) const 
        {    
            for ( Node *dn = head; dn != tail; dn = dn->next ) 
                dn->print_val( );
            cout << endl;
        }
};
main.cpp
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
#include "stdafx.h"
#include "list.h"
 
List<int> the_list;                 
 
int main()
{ 
    int ret  = 0;
    List<int>::Iterator list_iter;
 
    for (int j = 9; j > 1; --j) 
        the_list.add_front(j*j-j);
 
    the_list.print( );
 
    //реверс і на екран
    for ( list_iter = the_list.rear( ) ; list_iter != the_list.front( ) ; )
    {   
        --list_iter;
        cout << *list_iter << " ";
    }
    cout << endl;
 
    the_list.remove_it(the_list.find(72));
 
 
     for ( list_iter = the_list.front( ); list_iter != the_list.rear( ); ++list_iter ) 
          cout << *list_iter << " ";
 
    cout << endl;
 
    cout<<the_list.size( )<<endl;
 
    the_list.add_front(1);
 
 
    the_list.print( );
    
    system("pause");
    
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru