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

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

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

Объединение двух списков - C++

03.04.2015, 22:52. Просмотров 782. Ответов 1
Метки нет (Все метки)

Помогите пожалуйста с решением следующей задачи.

Нужно добавить функцию для объединения двух списков.

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
#include <iostream>
#include <cstdlib>
#include <locale>
 
using namespace std;
 
struct element{
    int data;
    element * next;
};
 
 
 
class List{
    friend ostream& operator<<(ostream&, List &);
    friend ostream& operator>>(ostream&, List &);
    element * head;
    int Length;
public:
    List():head(NULL), Length(0){}
    List(int count):head(NULL), Length(0){ for(int i=0; i < count; i++, this->addFirst(rand()%100)); }
    ~List(){ clear(); };
    void addFirst( int );
    void addLast( int );
    bool getFirst( int &);
    bool getLast( int & );
    void clear();
    bool isEmpty(){ return Length == 0; } 
    int getLegnth(){ return Length; }
    int findOnKey( int );
    List & operator+ ( List &);
};
 
List & List::operator+ ( List & right){
    element * buf = this->head;
    List * L = new List;
    while (buf != NULL){
        L->addLast(buf->data);
        buf = buf->next;
    }
    buf = right.head;
    while (buf != NULL){
        L->addLast(buf->data);
        buf = buf->next;
    }
    return *L;
};
 
int List::findOnKey(int key){
    if (isEmpty()) return -1;
    element * buf = this->head;
    int i = 0;
    while (buf != NULL)
        if (buf->data == key){
            return ++i;
        }else{ 
            i++;
            buf = buf->next;
        }
    return -1;
};
 
bool List::getFirst(int & val){
    if (isEmpty()) return false;
    element * tmp = this->head;
    val = tmp->data;
    this->head = tmp->next;
    delete tmp;
    Length--;
    return true;
}
 
bool List::getLast(int & val){
    if (isEmpty()) return false;
    element * tmp = this->head;
    while (tmp->next->next != NULL) tmp = tmp->next;
    val = tmp->next->data;
    tmp->next = NULL;
    delete tmp->next;
    Length--;
    return true;
}
 
void List::addFirst(int value){
    element * tmp = new element;
    tmp->data = value;
    tmp->next = head;
    head = tmp;
    Length++;
}
 
void List::addLast(int value){
    if (Length == 0){
        element * tmp = new element;
        tmp->data = value;
        tmp->next = NULL;
        this->head = tmp;
        Length++;
        return;
    }
    element * tmp = this->head;
    while (tmp->next != NULL) tmp = tmp->next;
    element * newb = new element;
    newb->data = value;
    newb->next = NULL;
    tmp->next = newb;
    Length++;
}
 
ostream& operator<<(ostream& o, List & mc){
    if (mc.Length == 0) {
        o << " пустой";
        return o;
    };
    element * buf = mc.head;
    while(buf != NULL){
        o << ' ' << buf->data;
        buf = buf->next;
    }
    o << " [" << mc.Length << "]";
    return o;
}
 
istream&operator>>(istream&  i, List & mc){
    int key;
    i >> key;
    mc.addLast(key);
    return i;
}
 
void List::clear(){
    while (this->head != NULL){
        element * buf = this->head;
        this->head = this->head->next;
        delete buf;
    }
    this->Length = 0;
}
 
int main(){
    
    setlocale(LC_ALL,"rus");
    srand((int)time(NULL));
    
    List L(5);
    cout << "Список: " << L << endl;
    cout << "\nВведите значение: ";
    cin >> L;
    cout << "Список: " << L << endl;
 
    int buf;
    L.getLast(buf);
    cout << "\nЧтение из списка: " << buf << endl;
    cout << "Список: " << L << endl;
 
    cout << "\nВведите эл-нт для поиска: ";
    int a;
    cin  >> a;
    int res = L.findOnKey(a);
    if (res == -1) { cout << "Эл-нт не найден!\n"; }
    else cout << "Эл-нт [" << a << "] найден в списке: " << res << endl; 
 
    List L2(2);
    
    // вот тут объединение списков L1 и L2
     
 
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2015, 22:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Объединение двух списков (C++):

Найти объединение двух списков - C++
Помогите мне решить задачку, я в принципе не понимаю как её решать, вот её условие. Найти объединение двох списков,тоисть получить такой...

Объединение (конкатенация) двух односвязных списков - C++
Задача: Построить стек (односвязный список). Показать реализацию стека на следующем примере: сцепить два связанных списка данных...

Объединение двух связанных списков (нужен совет) - C++
шаблон ListNode #pragma once // оголошення, щоб зробити другом template&lt; typename NODETYPE &gt; class List; // шаблон класу ...

Объединение двух списков в один без повтора элементов (С++) - C++
нужно дописать функцию, которая делает из двух списков один (новый), в котором все элементы разные, то есть не повторяются. Спасибо! ...

Объединение двух связных списков с объектами одного типа - C++
Здравствуйте. При изучении связных списков, написал шаблон для связного списка, с функциями добавления и удаления с начала и конца списка....

Объединение списков - C++
Все работает, но каждый элемент 3-го списка идет через пробел, можно ли убрать эти пробелы? #include &lt;iostream&gt; using namespace std; ...

1
catr
11 / 11 / 3
Регистрация: 27.11.2013
Сообщений: 65
03.04.2015, 22:58 #2
кто-то уже сделал всё остальное?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2015, 22:58
Привет! Вот еще темы с ответами:

Объединение списков (list) - C++
Как правильно сделать объединение списков? #include &lt;list&gt; #include &lt;iostream&gt; using namespace std; int main() { list...

АТД список. Объединение списков. - C++
Здравствуйте! Подскажите пожалуйста как объединить два списка в один?? Или второй список добавить в конец первого? Вот так...

Объединение 2х списков <list>, выделение уникальных элементов из них - C++
# include &lt;iostream&gt; # include &lt;string&gt; # include &lt;fstream&gt; # include &lt;list&gt; # include &lt;iterator&gt; # include &lt;algorithm&gt; ...

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


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

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

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