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

Реализация кольцевого списка на СТЛ - C++

Восстановить пароль Регистрация
 
Equality
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 4
11.12.2012, 16:48     Реализация кольцевого списка на СТЛ #1
Добрый день! Появилось несколько вопросов в ходе выполнения задания.
Само задание звучит так:
Код
Реализовать шаблон контейнерного класса "кольцо", который был бы построен на базе одного из стандартных последовательных контейнеров STL и характеризовался таким поведением: возможностью циклического перемещения "головы", возможностью прохода в двух направлениях, поиска элементов по значению, вклеивания и удаление групп элементов, сравнение двух колец. Исключительная ситуация - отсутствие ссылок на "голову" (у одного из элементов кольца).
Пока стараюсь написать это не как шаблон, а в мэйне. Вот мой корявый код, что пока есть:

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
#include <iostream>
#include <list>
#include <algorithm>
#include <locale.h>
 
using namespace std;
 
void print(int i) 
{ 
    cout<< i << endl; 
}
 
int main()
{
setlocale (LC_CTYPE, "russian");
int n=0, n1=0, finder;
list<int> L;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Введите количество элементов в цикличном списке:"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cin>>n;
cout<<endl;
int k=n;
 
while(n1!=n)
{
    n1++;
    L.push_front(rand()%100000);
}
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Рандомной сформированный список в пределах от 0 до 100 000:"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
    
L.begin()=L.end();
 
list<int>::iterator i;
for_each(L.begin(), L.end(), print);
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Введите значение искомого элемента:"<<endl;
cin>>finder;
cout<<"-------------------------------------------------------------------------------"<<endl;
for(i=L.begin(); i != L.end(); ++i) 
    {
            int c = distance(L.begin(), i);          
            if (finder==*i)
                {
                    cout<<"Поиск успешен! Искомый элемент "<<*i<<" - "<<c+1<<" в списке "<<endl;
                }
            else
                {
                    cout<<"Ошибка! Элемент №"<<c+1<<" - Не соответствует искомому."<<endl;
                }
    }
int a=0, a1=0, z=0;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Добавление элемента в список"<<endl;
cout<<"Введите количество элементов, которые хотите добавить:"<<endl;
cin>>a;
cout<<"-------------------------------------------------------------------------------"<<endl;
char choice;
    for (;;){
        do {
        cout<<"Куда Вы хотите добавить элемент?\n\n\n"<<endl;
        cout<<"0 - В начало списка\n\n"<<endl;
        cout<<"1 - В конец списка\n\n"<<endl;
        cout<<"q - Выход из раздела добавления элементов\n\n\n"<<endl;
        cin>>choice;
        } while ( choice < '0' || choice > '1' && choice != 'q');
    if (choice == 'q') break;
           switch (choice) {
               case '0':
                        while (a!=a1)
                        {
                            a1++;
                            cout<<"\nВведите элемент №"<<a1<<" для добавления в начало списка;"<<endl;
                            cin>>z;
                            cout<<"\n\n";
                            L.push_front(z);
                        }
                        for_each(L.begin(), L.end(), print);
                    break;
               case '1':
                        while (a!=a1)
                        {
                            a1++;
                            cout<<"\nВведите элемент №"<<a1<<" для добавления в начало списка;"<<endl;
                            cin>>z;
                            cout<<"\n\n";
                            L.push_back(z);
                        }
                        for_each(L.begin(), L.end(), print);
                    break;
           }
    }
 
a=0, a1=0, z=0;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Удаление элементов из списка"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
    for(i=L.begin(); i != L.end(); ++i) 
        {
            int c = distance(L.begin(), i);          
            cout<<"№"<<c+1<<". "<<*i<<endl;
        }
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Введите количество элементов, которые хотите удалить:"<<endl;
cin>>a;
cout<<"-------------------------------------------------------------------------------"<<endl;
    while (a!=a1)
                        {
                            a1++;
                            cout<<"\nВведите элемент для удаления:"<<endl;
                            cin>>z;
                            cout<<"\n\n";
                            L.remove(z);
                        }
    for_each(L.begin(), L.end(), print);
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Перемещение элементов:"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
a=0, a1=0, z=0;
    for(i=L.begin(); i != L.end(); ++i) 
        {
            int c = distance(L.begin(), i);          
            cout<<"№"<<c+1<<". "<<*i<<endl;
        }
/*cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Циклическое перемещение головы"<<endl;
cout<<"Введите перемещаемый элемент:"<<endl;
cin >>z;
cout<<endl;
cout<<"Введите на каком месте должен быть элемент:"<<endl;
cin >>a;
cout<<endl;
    list<int>::iterator last, first, pos = L.begin();
    if( *pos == z )
         *pos++;
    for(list<int>::iterator i = pos; i != L.end(); *i++) 
    {
          if(*i == z ) 
            {
                  for(last = i, first = --i; 1; --last) 
                  {
                        swap(*last, *first);
                        if(first == pos)
                               break;
                         --first;
                   }
                   *pos++;
           }
      }*/
    for_each(L.begin(), L.end(), print);
 
return 0;
}
Собственно вопрос, как сделать список цикличным? Сомневаюсь, что
C++
1
L.begin()=L.end();
- правильный вариант.

И как реализовать возможность циклического перемещения "головы" ?
И вообще, я на правильном пути? Или весь мой код - тотальный бред? Буду благодарен за любые ответы и критику.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2012, 16:48     Реализация кольцевого списка на СТЛ
Посмотрите здесь:

СТЛ Вектор резинов? C++
консольный интерфейс для кольцевого односвязного списка, помогите найти ошибку C++
Мультисет СТЛ C++
C++ Чтение дат СТЛ
Параметризованный класс и СТЛ(список) C++
Шаблон однонаправленного кольцевого списка C++
C++ Нахождение и изменение элемента двунаправленного кольцевого списка
Сортировка кольцевого двусвязного списка (пузырьковая) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ptomaine
 Аватар для Ptomaine
13 / 13 / 0
Регистрация: 22.10.2011
Сообщений: 35
11.12.2012, 18:32     Реализация кольцевого списка на СТЛ #2
Возможно, вот этот код поможет: http://www.goodliffe.net/circularbuffers
Yandex
Объявления
11.12.2012, 18:32     Реализация кольцевого списка на СТЛ
Ответ Создать тему
Опции темы

Текущее время: 10:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru