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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Greyewi
1 / 1 / 0
Регистрация: 10.10.2013
Сообщений: 25
#1

Как обратиться к следующему элементу списка? - C++

23.01.2015, 13:34. Просмотров 303. Ответов 2
Метки нет (Все метки)

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
#include <iostream>
 
using namespace std;
 
template <typename T>
 class List
{
 
     struct Node{
        T data;
        Node *next;
        Node(T d, Node *n = 0):data(d), next(n) {}
    };
    Node *head;
    Node *original;
    Node *finder;
    
    
 
public:
    List(Node *h = 0):head(h){}
    ~List();
    bool isEmpty(); 
    void remove_list(Node *head);
    void insertAfter(Node *pre, T d); 
    void removeAfter(Node *pre); 
    void pushFront(T d);
    T popFront();
    void print();
    Node *search(T d);
    void create(int k); 
    bool find_in_list(Node *pre, Node *finder);
};
 
template <typename T>
bool List<T>::find_in_list(Node *pre, Node *finder) {
    while (pre != 0 && finder != 0) {
        if (pre->data != finder->data) return false;
        pre = pre->next;
        finder = finder->next;
    }
    if (finder ==0) return true;
    return false;
}
 
template <typename T>
void List<T>::remove_list(Node *head) {
    if (head->next) remove_list(head->next);
    delete head;
}
 
 
template <typename T>
List<T>::~List(){
    while (!isEmpty())
       popFront();
}
 
template <typename T>
bool List<T>::isEmpty() {
    return !head;
}
 
template <typename T>
void List<T>::insertAfter(Node *pre, T d) { 
    if(!pre) return;
    Node *newNode = new Node(d,0);
    newNode->next = pre->next;
    pre->next = newNode;
}
 
template <typename T>
void List<T>::removeAfter(Node *pre){
    Node *tmp = pre->next; 
    pre->next = pre->next->next;
    delete tmp;
}
 
template <typename T>
void List<T>::pushFront(T d){
    Node *newNode = new Node(d,0);
    if(!head) {
        head = newNode;
        return;
    }
    newNode->next = head;
    head = newNode;
}
 
template <typename T>
T List<T>::popFront(){
    T data;                 
    if(!head) return data;
    Node *tmp = head;
    data = head->data;
    if(head->next) {
        head = head->next;
       delete tmp;
        return data;
    }
    delete tmp;
    head = NULL;
    return data;
}
 
 
template <typename T>
typename List<T>::Node* List<T>::search(T d){
    if(!head) return NULL;
    Node* cur = head;
    while(cur) {
        if(cur->data == d) return cur;
        cur = cur->next;
    }
    return NULL;
}
 
 
template <typename T>
void List<T>::print(){
    if(!head) return;
    Node *cur  = head;
    while(cur) {
        cout << cur->data << "; ";
        cur = cur->next;
    }
    cout << endl;
}
 
template <typename T>
void List<T>::create(int k){
    T d;
    for (int i = k; i >= 1; i--)
    {
        cout << "Enter " << i << " element: ";
        cin >> d;
        pushFront(d);
    }
}
 
 
int main(){
List<int> *L = new List <int>(NULL);
List<int> *L1 = new List <int>(NULL);
List<int> *L2 = new List <int>(NULL);
int n1,n2,n3,i,j;
cout << "ââåäèòå äëèГ*Г*Гі Г±ГЇГЁГ±ГЄГ* L1 ";
cin >> n1;
cout << "ââåäèòå äëèГ*Г*Гі Г±ГЇГЁГ±ГЄГ* L2 ";
cin >> n2;
cout << "ââåäèòå äëèГ*Г*Гі Г±ГЇГЁГ±ГЄГ* L3 ";
cin >> n3;
L->create(n1);
L->print();
L1->create(n2);
L1->print();
L2->create(n3);
L2->print();
 
List<int> *counter = L;
for (int i=0; i<n1-n2;++i){
if (!find_in_list(counter->next, L1)) counter = counter->next;
   else{
    List<int> *left_border = counter;  List<int> *right_border = counter;  List<int> *del_head = counter->next;
    for(int i=0;i<n2;++i) right_border = right_border->next;
    List<int> *temp = right_border;
    right_border = right_border->next;
    temp->next =0;
    remove_list(del_head);
    left_border->next = L2;
     while(left_border->next){
     left_border=left_border->next;
     }
    left_border->next = right_border;
    break;
   }
}
L->print();
}
Сама программа описана в конце но не работают конструкции типа counter->next в методе main(), видимо что то дописать нужно. Какую то строчку, видать упустил...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2015, 13:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как обратиться к следующему элементу списка? (C++):

Как обратиться к следующему элементу в std::list? - C++
Добрый день. Пусть у меня есть список std::list&lt;int&gt; l; Есть итератор it, указывающий на элемент этого списка. Я хочу посмотреть на...

Как обратиться к элементу списка? - C++
Подскажите как автоматически (в цикле например) обратиться к члену списка. Список выглядит так: //Определение: class Node: { ...

Как обратиться к элементу списка list ? - C++
list&lt;int&gt; a;

Как сделать переход к следующему элементу в STL vector - C++
Есть пример с книги по STL, и я его решил модернизировать: 1) Дописать код который выводит количество элементов. Это я сделал 2-я...

Как обратиться к элементу структуры в классе - C++
есть класс #include &lt;iostream&gt; class bayer { public: bayer(); bayer(const char *name, double pay); void...

Как обратиться к элементу массива с использованием указателя - C++
Всем привет, есть некоторая задачка, которую мне очень важно решить... Дословно пишу условие в С\С++ обьявлен массив mas значений...

2
Kerry_Jr
Модератор
Эксперт PHP
2207 / 2003 / 701
Регистрация: 14.05.2014
Сообщений: 5,870
Записей в блоге: 1
Завершенные тесты: 5
23.01.2015, 13:37 #2
Цитата Сообщение от Greyewi Посмотреть сообщение
что то дописать нужно
counter->head->next или counter->original->next или counter->finder->next, что-то из этого, особо в код не вчитывался
0
Greyewi
1 / 1 / 0
Регистрация: 10.10.2013
Сообщений: 25
23.01.2015, 14:57  [ТС] #3
Kerry_Jr, Нет не подходит, я имел ввиду отдельный метод наверно нужно дописать, который бы работал, как counter->next
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2015, 14:57
Привет! Вот еще темы с ответами:

Как с указателем обратиться к 4му элементу массива - C++
Имеем массив из 50 элементов. Как с помощью указателей обратиться к 4му элементу массива?

Как в связном списке обратиться к элементу по адресу - C++
как в связном списке обратиттся к элементу по нужному адресу? Добавлено через 46 минут как в связном списке обратится к нужному...

Как напрямую обратиться к элементу объекта, который находится в векторе? - C++
Только один вопрос. Как напрямую обратится к элементу объекта, который находится в векторе. Например у нас есть вектор. он хранит...

Как обратиться к первому и последнему элементу в строчке в двумерном массиве - C++
День Добрый. Не могу понять как обратиться к первому и последнему элементу в строчке в двумерном массиве содержащем n-строк m-столбцов...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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