Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
ksu04061992
0 / 0 / 0
Регистрация: 12.12.2011
Сообщений: 27
#1

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

03.04.2015, 22:52. Просмотров 821. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

1
catr
11 / 11 / 6
Регистрация: 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

Объединение списков
Все работает, но каждый элемент 3-го списка идет через пробел, можно ли убрать...

Объединение списков (list)
Как правильно сделать объединение списков? #include &lt;list&gt; #include...

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


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

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

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