Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Комплексные числа http://www.cyberforum.ru/cpp-beginners/thread727578.html
Никогда не работал в c++ с комплексными числами. Вот программа которую нужно осуществить, но я не знаю как, если не трудно подскажите! #include "stdafx.h" #include "iostream" #include <complex>...
C++ Реализация полиморфизма Читал что существует примерно 10 способов реализации полиморфного контейнера. Видел только один где создается виртуальный класс и у него наслебуются другие классы. а как еще можно сделать... http://www.cyberforum.ru/cpp-beginners/thread727576.html
C++ Составить одномерный массив B из номеров строк двумерного массива, в которых есть хотя бы одно нечетное число
Здравствуйте, помогите написать программу, условие задачи: Дан двумерный целочисленный массив A(M,N). Составить одномерный массив B из номеров строк этого массива, в которых есть хотя бы одно...
C++ Как будет ИЛИ
Извиняюсь, за столь простой вопрос, но нигде не могу найти как будет "ИЛИ" на C++.
C++ Найти матрицу, получающуюся перестановкой столбцов, используя указатель http://www.cyberforum.ru/cpp-beginners/thread727533.html
Дана целочисленная матрица размера m х n. Найти матрицу, получающуюся перестановкой столбцов (первого с последним, второго с предпоследним и т.д.). Используя указатель. Помогите, не как не пойму как...
C++ Матрицу K(m, n) заполнить следующим образом Матрицу K(m, n) заполнить следующим образом. Элементам, находящимся на периферии (по периметру матрицы), присвоить значение 1; периметру оставшейся подматрицы - значение 2 и так далее до заполнения... подробнее

Показать сообщение отдельно
Equality
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 4

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

11.12.2012, 16:48. Просмотров 402. Ответов 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();
- правильный вариант.

И как реализовать возможность циклического перемещения "головы" ?
И вообще, я на правильном пути? Или весь мой код - тотальный бред? Буду благодарен за любые ответы и критику.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.