Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
1

Перенос (копирование) элементов из одного односвязного линейного списка в другой

20.08.2020, 12:03. Показов 3452. Ответов 14

Здравствуйте, у меня возникла проблема. Мне нужно скопировать определенные элементы из одного линейного списка в другой, но я не имею ни малейшего понятия как это сделать. Пыталась найти статьи какие-нибудь, но находила только для С#.. ЕСли не сложно, то киньте какую-нибудь информацию по этому поводу, буду очень признательна

Заранее спасибо
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2020, 12:03
Ответы с готовыми решениями:

Копирование односвязного линейного списка
Можете дать подсказку того в каком направлении думать? Непонимание реализации именно в этом:

Копирование выбранных элементов одного списка в другой
как скопировать выделенные элементы с listbox1 на listbox2. через это метод копирует по одному ...

Найти сумму элементов линейного односвязного списка
Доброго времени суток! Помогите пожалуйста решить информационное поле линейного односвязного...

Перенос данных с одного списка в другой
Здравствуйте. Появилась проблема с заданием: сначала нужно задать один циклический список с...

14
1028 / 710 / 316
Регистрация: 26.02.2015
Сообщений: 3,225
20.08.2020, 12:14 2
А линейный список покажи?
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
20.08.2020, 15:32  [ТС] 3
Nishen, сам код или его данные?
0
6739 / 4537 / 1840
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
20.08.2020, 15:36 4
Цитата Сообщение от Vann_Gogg Посмотреть сообщение
Nishen, сам код или его данные?
Код. Покажи реализацию своего списка.
0
2136 / 1051 / 402
Регистрация: 08.11.2016
Сообщений: 3,018
20.08.2020, 15:37 5
Vann_Gogg, кот!
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
20.08.2020, 15:40  [ТС] 6
oleg-m1973, воть
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
#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct student
{
    string fam;
    string name;
    string otch;
    string data_postuplenia;
    string spec;
    float ball = 0;
};
 
struct LIST
{
    student element;
    LIST* next = NULL;
};
 
//Инициализация списка путём добавления первого элемента
LIST* Init_SingleList(student s)
{
    LIST* lst;
    lst = new LIST;
    lst->element = s;
    lst->next = NULL;
    return lst;
}
/*---------------------Базовые функции---------------------*/
//Вставка первого элемента в голову списка
LIST* InsFirst_SingleList(student s, LIST* L)
{
    LIST* q;
    q = new LIST;
    q->element = s;
    q->next = L;
    return q;
}
 
//Вставка в середину непустого однонаправленного списка L справа от элемента, на который указывает p
LIST* Ins_SingleList(student s, LIST* L, LIST* p)
{
    LIST* q;
    q = new LIST;
    q->element = s;
    q->next = p->next;
    p->next = q;
    return q;
}
 
//Просмотр списка
void Scan_SingleList(LIST* L)
{
    LIST* q;
    q = L;
    while (q != NULL)
    {
        {
            cout << q->element.fam << '\t'
                << q->element.name << '\t'
                << q->element.otch << '\t'
                << q->element.data_postuplenia << '\t'
                << q->element.spec << '\t'
                << q->element.ball << '\n';
            q = q->next;
        }
    }
}
 
//Стандартная функция поиска
LIST* Find_SingleList(student s, LIST* L, int N, student date1)
{
    LIST* q, *p;
    p = NULL;
    if (L != NULL)
    {
        q = L;
        while ((q != NULL) && (q->element.data_postuplenia != date1.data_postuplenia))
        {
            q = q->next;
        }
        if (q != NULL)
        {
            p = q;
        }
    }
    return p;
}
 
//Удаление первого элемента из списка
LIST* DelFirst_SingleList(LIST* L)
{
    LIST* q;
    if (L != NULL)
    {
        q = L;
        L = L->next;
        delete q;
        return L;
    }
    return L;
}
 
//Удаление непервого элемента из списка
LIST* Del_SingleList(LIST* L, LIST* p)
{
    LIST* q = NULL;
    if (p != NULL)
    {
        q = L;
        while (q->next != p)
        {
            q = q->next;
        }
        q->next = p->next;
        delete p;
    }
    return q;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    student s;
    int N = 0;
    int i = 0;
    LIST* L, *q;
 
    ifstream f("vvod.txt");
    f >> s.fam;
    f >> s.name;
    f >> s.otch;
    f >> s.data_postuplenia;
    f >> s.spec;
    f >> s.ball;
    N++;
    L = Init_SingleList(s);
 
    q = L;
    while (f.eof() == false)
    {
        f >> s.fam;
        f >> s.name;
        f >> s.otch;
        f >> s.data_postuplenia;
        f >> s.spec;
        f >> s.ball;
        N++;
        q = Ins_SingleList(s, L, q);
    }
    f.close();
 
    //Первый вывод списка
    cout << "\t\t--------Исходные элементы спискa--------\n";
    cout << endl;
    Scan_SingleList(L);
    cout << '\n';
    system("pause");
    return 0;
}
0
6739 / 4537 / 1840
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
20.08.2020, 15:50 7
Цитата Сообщение от Vann_Gogg Посмотреть сообщение
//Вставка первого элемента в голову списка
LIST* InsFirst_SingleList(student s, LIST* L)
Цитата Сообщение от Vann_Gogg Посмотреть сообщение
//Вставка в середину непустого однонаправленного списка L справа от элемента, на который указывает p
LIST* Ins_SingleList(student s, LIST* L, LIST* p)
Для начала реализуй эти две функции через вот такую
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LIST *SingleList_InsertAfter(LIST *node, LIST *head, LIST *pos = NULL)
{
    if (!pos)
    {
        node->next = head;
        head = node;
    }
    else
    {
        node->next = pos->next;
        pos->next = node;
    }
    return head;
}
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
20.08.2020, 16:02  [ТС] 8
oleg-m1973, хорошо, сделала
0
6739 / 4537 / 1840
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
20.08.2020, 16:12 9
Цитата Сообщение от Vann_Gogg Посмотреть сообщение
oleg-m1973, хорошо, сделала
Покажи, как сделала

Добавлено через 5 минут
Вторая функция, которая тебе понадобится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LIST *SingleList_ExtractNext(LIST *&head, LIST *pos = NULL)
{
    LIST *node = NULL;
    if (pos)
    {
        node = pos->next;
        pos->next = node? node->next: NULL;
    }
    else if (head)
    {
        node = head;
        head = head->next;
    }
    return node;
}
С её помощью надо реализовать DelFirst_SingleList и Del_SingleList
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
20.08.2020, 16:12  [ТС] 10
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Покажи, как сделала
Ну, вроде так, если я Вас правильно поняла

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
LIST *SingleList_InsertAfter(LIST *q, LIST *L, LIST *p = NULL)
{
    if (!p)
    {
        q->next = L;
        L = q;
    }
    else
    {
        q->next = p->next;
        p->next = q;
    }
    return L;
}
0
6739 / 4537 / 1840
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
20.08.2020, 16:13 11
Цитата Сообщение от Vann_Gogg Посмотреть сообщение
Ну, вроде так, если я Вас правильно поняла
Вот это сделала?
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Для начала реализуй эти две функции через вот такую
И вот это, потом
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
С её помощью надо реализовать DelFirst_SingleList и Del_SingleList
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
20.08.2020, 16:26  [ТС] 12
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
С её помощью надо реализовать DelFirst_SingleList и Del_SingleList
Ой, да, извините, я это не заметила

Вроде так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
LIST *SingleList_Deletete(LIST *L, LIST *p = NULL, LIST *q = NULL)
{
    if (!L)
    {
        q = L;
        L = L->next;
        delete q;
    }
    else
    {
        q = L;
        while (q->next != p)
        {
            q = q->next;
        }
        q->next = p->next;
        delete p;
    }
    return L;
}
0
6739 / 4537 / 1840
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
20.08.2020, 16:28 13
Цитата Сообщение от Vann_Gogg Посмотреть сообщение
Ой, да, извините, я это не заметила
InsFirst_SingleList, Ins_SingleList, DelFirst_SingleList и Del_SingleList переделала при помощи новых функций?
0
0 / 0 / 0
Регистрация: 17.02.2020
Сообщений: 17
20.08.2020, 16:30  [ТС] 14
oleg-m1973, да
0
6739 / 4537 / 1840
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
20.08.2020, 16:35 15
Лучший ответ Сообщение было отмечено Vann_Gogg как решение

Решение

Цитата Сообщение от Vann_Gogg Посмотреть сообщение
oleg-m1973, да
Ну так покажи их, именно эти четыре функции

Добавлено через 3 минуты
Перенос элемента из одного списка в другой будет выглядеть вот так
C++
1
2
3
4
5
6
void SingleList_SpliceNextAfter(LIST *&src_head, LIST *src_pos, LIST *&dst_head, LIST *dst_pos)
{
    auto *node = SingleList_ExtractNext(src_head, src_pos);
    if (node)
        dst_head = SingleList_InsertAfter(node, dst_head, dst_pos);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2020, 16:35

Перенос данных из одного списка в другой
/*Поместить в список все числа кратные 5- это написал 4 последних числа, которые делятся на 3...

Выбор из одного списка и перенос в другой...
Суть моей проблемы в следующем - не могу передать id в работе с Jquery См вложение. В...

Копирование нескольких строк из одного списка в другой
Всем привет. Есть задача. Диалоговая панель содержит два списка(ID_LIST1 и ID_LIST2) и кнопку...

Перенос записей из одного списка формы в другой
В форме нужно сделать 2 списка так, чтоб выбранный элемент одного из них можно было перенести в...

Создание линейного односвязного списка
-найти произведение элементов списка. -вывести на экран нечетные элементы списка.

QlistWidget перенос элемента из одного списка в другой при нажатии кнопки
Не получаться из одного QlistWidget перенести элемент в другой QlistWidget при нажатии кнопки


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

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

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