Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352

Вставка списка.

13.11.2011, 15:30. Показов 1239. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!) У меня есть два списка. Мне нужно вставить один список в другой. Вот что у меня получилось.
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
// Списки и структуры.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "H1.h"
using namespace std;
 
//void sk(Node *pbeg,Node *pend);
 
int _tmain(int argc, _TCHAR* argv[])
{
    Node *pbeg = first('a'); // Формирование первого элемента списка 1
    Node *pend = pbeg;
    Node *n2=first('e');// Формирование первого элемента списка 2
    Node *pendn=n2;
    // Спискb заканчивается, едва начавшись
    
    /*
     ifstream fin("array.txt", ios::in);
     if (!fin)      cout << "Not file!"<< endl;
     int nrow, i;
     fin >> nrow;
     char *M = new char [nrow];
     for (i = 0; i < nrow; i++)      fin >> *(M + i);
*/
    int size;
    int size2;
    int ind;
    int scob=0;
    char Form[]={"bcd"};//из массива в список №1
    size=strlen(Form);
    for (int i = 0; i<size; i++)
    {
        add(&pend,Form[i]);
        if (Form[i]=='(')
        {               
            scob++;
            ind=i;
            
        }
        if (Form[i]==')')
        {
            scob--;
            ind=i;
        }   
    }       
    Node *pv = pbeg;
    Node *pk;
    char Temp[]={"frt"};//из массива в список №2
    size2=strlen(Temp);
    for (int i = 0; i<size2; i++)
    {   
        add(&pendn,Temp[i]);            
    }
    //incert(pbeg, &pend, 'y',&pendn);
    // Удаление элемента 5
    //if(!remove (&pbeg, &pend, Form[3]))cout << "не найден";
    // Вставка элемента 200 гюсле элемента 2:
    while (pv)
    {   
        /*
        if(pv->a=='(')
        {                   
            pk=pv;          
            while(pk->next!=NULL)
            {
                pk = pk->next;
                if(pk->a==')')
                {
                    pk->a=' ';
                    pv->a=' ';
                    break;
                }               
            }   
        }
        */
        
        //Вставка списка №2 в список №1
        if(pv->a=='c')
        {
            pk=pv;      
            pk->next=n2->next->prev;
        }   
        // вывод списка на экран
        cout << pv->a;
        pv = pv->next;
        
    }
    cout <<endl;
    
/*
    for(pv = pbeg; pv!=0; pv = pv-> next)
    {
        if(pv->a=='k')
        {
            pk=pv;
            pk=n2->next->prev;
        }
        cout<<pv->a;
    }
    
 
    
    if (scob> 0)
           cout << "( bigger"<<ind<<endl;
    else if (scob< 0) 
           cout << ") bigger"<<ind<<endl;
    else if (scob == 0) cout << "Good";
    */
 
    return 0;
}
 
/*void sk(Node **pbeg,Node **pend)
{
    Node *pv=new Node;
    if(pv->a=='(')
        {                   
            Node *pk=pv;            
            while(pk->next!=NULL)
            {
                pk = pk->next;
                if(pk->a==')')
                {
                    pk->a=' ';
                    pv->a=' ';
                    break;
                }               
            }   
        }
 
}
*/
У меня получается так...список№1 состоит из "abcd", а список№2 состоит из "efrt". Когда я вставляю список №2 в список №1 после символа 'c', то у меня пропадает символ 'd', хотя он должен быть последним элементом всего списка(список№1 + список№2). Как это исправить? Я не очень шарю в указателях....
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.11.2011, 15:30
Ответы с готовыми решениями:

Вставка в начало списка
Народ, поскажите как реализовать вставку в начало списка? текст вставки в конец сделал, а в начало не пойму как! Вот вставка в конец: int...

Односвязный список. Вставка списка
Доброго времени суток. Кто может подсказать в чём причина того что я не могу присвоить значение типа char.. void add_elem(List**...

Вставка узла в середину двусвязного списка
Уважаемые коллеги, прошу помощи! Изучаю двусвязный список. Вставку в конец и начало я реализовала, удаление из любого места тоже, но...

4
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.11.2011, 21:29
Цитата Сообщение от KOPC1886 Посмотреть сообщение
Здравствуйте!) У меня есть два списка. Мне нужно вставить один список в другой.
- я доделал
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
#include <iostream> //cout cin system
#include <cstdlib>  //strlen
using namespace std;
 
struct Node
{
    char a;
    Node *next;
    Node *prev;
};
 
//Формирование первого элемента
//я сделал функцию универсальной : 
//нет списка - выделили память
//есть список просто изменили букву в нём
Node * setfirst(Node **pbeg, char a)
{
    Node *pv = *pbeg;
    if(pv == NULL)
        pv = new Node;
    pv->a = a;
    pv->next = 0;
    pv->prev = 0;  
    return (*pbeg = pv);
}
//Возвращает первый узел в списке
Node * getfirst(Node *pend)
{
    Node *pv = pend;
    while(pv && pv->prev != 0)
        pv = pv->prev;
    return pv;
}
 
//Возвращает последний узел из списка
Node * getlast(Node *pend)
{
    Node *pv = pend;
    while(pv && pv->next != 0)
        pv = pv->next;
    return pv;
}
 
// Добавление в конец списка
Node * add(Node **pend, char a)
{
    Node *pv = new Node;
    pv->a    = a; 
    pv->next = 0; 
    pv->prev = *pend;
    (*pend)->next = pv;
    return (*pend = pv);
}
 
//Поиск в списке
Node * find(Node *pbeg, char a)
{
    Node *pv = getfirst(pbeg);
    while (pv->next != 0 && pv->a != a)
        pv = pv->next;
    return pv;
}
 
//Длинна списка - потом пригодиться
long length(Node *pend)
{
    long len = 0;
    Node *pv = getfirst(pend);
    if(pv->next != 0)
    {
        do
        {
            len++;
        }
        while((pv = pv->next) != 0);
    }
    return len;
}
 
//Удаление узла - единственную функцию которую пока не тестировал
/*Node * remove(Node **pbeg)
{
    if((*pbeg)->next == 0)
        (*pbeg)->prev->next = 0;
    else
        (*pbeg)->next->prev = (*pbeg)->next;
    return *pbeg;
}*/
 
//Вставка в список после узла *plst списка pins
Node * insert(Node **plst, Node *pins)
{
    const Node * pbeg = *plst;
    const Node * pend = pins;
    Node * pv = pins;
    if(pv->next != 0)
    {
        pv = getlast(pv);
        while((*plst)->next != 0)
        {
            add(&pv,(*plst)->a);
            *plst = (*plst)->next;
        }
        add(&pv,(*plst)->a);
        while(*plst != pbeg)
            *plst = (*plst)->prev;
        pv = getfirst(pv);
        pv->prev = (*plst)->prev;
        (*plst)->prev->next = pv;
    }
    return (*plst = getfirst(*plst));
}
 
int main()
{
    Node *pList1 = NULL;
    Node *pList2 = NULL;
    setfirst(&pList1,'a'); // Формирование первого элемента списка
    char str1[]= {"bcd"};
    char str2[]= {"234567"};
    long size1  = strlen(str1);
    for(long i = 0; i < size1; i++)
        add(&pList1,str1[i]);
    setfirst(&pList2,'1');
    long size2  = strlen(str2);
    for(i = 0; i < size2; i++)
        add(&pList2,str2[i]);
    cout<<"List 1 : "<<'a'<<str1<<endl;
    cout<<"List 2 : "<<'1'<<str2<<endl;
    cout<<"Enter position of inserting\n";
    cout<<"0 < pos < "<<length(pList1)<<endl;
    long pos;cin>>pos;
    Node * plst = find(pList1, str1[pos - 1]);
    pList2 = getfirst(pList2);
    pList1 = insert(&plst, pList2);
    while(pList1->next != 0)
    {
        cout<<pList1->a;
        pList1 = pList1->next;
    }
    cout<<pList1->a<<endl;
    system("pause");
    return 0;
}
Миниатюры
Вставка списка.  
0
03.12.2011, 22:54

Не по теме:

KOPC1886, я оживил топик, завтра плотно займусь!

0
27 / 6 / 0
Регистрация: 28.10.2010
Сообщений: 352
20.12.2011, 19:17  [ТС]
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
// Списки и структуры.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include "H1.h"
using namespace std;
 
//void sk(Node *pbeg,Node *pend);
 
int _tmain(int argc, _TCHAR* argv[])
{
    Node *pbeg = first('a'); // Формирование первого элемента списка 1
    Node *pend = pbeg;
    Node *n2=first('e');// Формирование первого элемента списка 2
    Node *pend2=n2;
    // Спискb заканчивается, едва начавшись
    
    /*
     ifstream fin("array.txt", ios::in);
     if (!fin)      cout << "Not file!"<< endl;
     int nrow, i;
     fin >> nrow;
     char *M = new char [nrow];
     for (i = 0; i < nrow; i++)      fin >> *(M + i);
*/
    int size;
    int size2;
    int ind;
    int scob=0;
    char Form[]={"bczxv"};//из массива в список №1
    size=strlen(Form);
    for (int i = 0; i<size; i++)
    {
        //add(&pend,Form[i]);
        add1(&pend, Form[i]);
        if (Form[i]=='(')
        {               
            scob++;
            ind=i;
            
        }
        if (Form[i]==')')
        {
            scob--;
            ind=i;
        }   
    }       
    Node *pv = pbeg;
    Node *ph=new Node;
    Node *pd=new Node;  
    Node *pk=new Node;
    
    char Temp[]={"frt"};//из массива в список №2
    size2=strlen(Temp);
    for (int i = 0; i<size2; i++)
    {   
        add(&pend2,Temp[i]);            
    }
    //incert(pbeg, &pend, 'y',&pendn);
    // Удаление элемента 5
    //if(!remove (&pbeg, &pend, Form[3]))cout << "не найден";
    // Вставка элемента 200 гюсле элемента 2:
    while (pv)
    {   
        /*// Поис скобок и их замена на пробелы
        if(pv->a=='(')
        {                   
            pk=pv;          
            while(pk->next!=NULL)
            {
                pk = pk->next;
                if(pk->a==')')
                {
                    pk->a=' ';
                    pv->a=' ';
                    break;
                }               
            }   
        }   */  
        //Вставка списка №2 в список №1     
        if(pv->a=='c')
        {
            ph=searchEnd(n2);
            pk=pv;
            ph->next=pk->next;  
            pk->next=n2;        
        }
        //Вставка списка №2 после списка №1 
        /*
        if(pv->next==0)
        {
            pk=pv;
            //ph=searchEnd(pbeg);           
            //pv->next=n2;
            pk->a='y';
            pk->next=n2->next;
    
        }*/
        //Вставка списка №2 в список №1  функция  
        //dob(pbeg,n2,'c');
        // вывод списка на экран
        cout << pv->a;
        pv = pv->next;
    
        
    }
 
    cout <<endl;
    
/*
    for(pv = pbeg; pv!=0; pv = pv-> next)
    {
        if(pv->a=='k')
        {
            pk=pv;
            pk=n2->next->prev;
        }
        cout<<pv->a;
    }
    
 
    
    if (scob> 0)
           cout << "( bigger"<<ind<<endl;
    else if (scob< 0) 
           cout << ") bigger"<<ind<<endl;
    else if (scob == 0) cout << "Good";
    */
 
    return 0;
}
 
/*void sk(Node **pbeg,Node **pend)
{
    Node *pv=new Node;
    if(pv->a=='(')
        {                   
            Node *pk=pv;            
            while(pk->next!=NULL)
            {
                pk = pk->next;
                if(pk->a==')')
                {
                    pk->a=' ';
                    pv->a=' ';
                    break;
                }               
            }   
        }
 
}
*/
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
25.12.2011, 18:22
KOPC1886, Я уже говорил вставлять проще всего так
Списки А,В,С
Есть АВ надо встваить С после А
Вот мнемоалгоритм
А[start]В[end]СВ затем берёшь и связываешь [start] с [end] в итоге выходит АСВ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2011, 18:22
Помогаю со студенческими работами здесь

Вставка элемента в начало односвязного списка
Помогите вставить элемент в начало односвязного списка. Написана функция Insert, но она работает только для вставки в середину и конец...

Вставка элемента в конец односвязного списка
Добрый день! Подскажите как вставить в конец списка. В моем варианте вставляется в начало. List *temp = new List; ...

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

Написать код программы, выполняющей растяжку списка и вставку, удаление из списка и сжатие списка
Люди ПОМОГИТЕ осталось совсем мало , мне нужна помощь!!! написать код программ: 1) Написать код программы, выполняющей растяжку...

Вставка нового элемента в список, удаление элемента из списка, просмотра содержимого списка
очень нужно:tender: 1. Разработать подпрограммы, реализующие основные операции обработки линейного односвязного списка: вставка нового...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru