Форум программистов, компьютерный форум CyberForum.ru

Вставка списка. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Помогите разобраться в программе (классы, исключения) http://www.cyberforum.ru/cpp-beginners/thread382965.html
Всем привет. Есть проблема. Через 5 дней надо сдать в универе все долги, которые накопились по программированию (а это 3 лабы). Две лабы пока буду писать самостоятельно, а в виду нехватки времени, 1 лабу мне дали одногруппники готовую. Но я пытался в ней разобраться (2 дня потратил) - и воообщееееее, ну никак не могу вчехлиться. А от товарищей помощи не добьешься, знаете же как обычно неохотно...
C++ Какой жгуче зеленый цвет символов в консоли? #include <iostream> #include <conio.h> #include <stdlib.h> #include <windows.h> #include <stdio.h> #include <string> using namespace std; int main(int argc, char * argv) { int a; http://www.cyberforum.ru/cpp-beginners/thread382962.html
Получить последовательность b1,b2....bn C++
1)Получить последовательность b1,b2....bn, n<=50,если 2) Нужны коды на языке си
Написать программу! C++
Напишете программу, состоящую из трех процедур и основных программы. Первая процедура организует ввод двух целых чисел Х и У, вторая проверяет их суму, третья выводит результатю Используйте эти процедуры в основной программе. Используйте Х и У как глобальные переменные.
C++ Задание с матрицой http://www.cyberforum.ru/cpp-beginners/thread382950.html
Дано действительную квадратную матрицу порядка n. Найти все нечетные элементы в заштрихованной области. Опишите сам принцип как искать в этой заштрихованной области и как искать нечетные в ней спасибо)
C++ Ошибка народ, всем привет вот столкнулся с такой проблемкой на компе прога компилируется норм, вот скинул на нетбук и вылазит такая ошибка: помогите плиз нужно срочно...( подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
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;
}
Миниатюры
Вставка списка.  
 
Текущее время: 03:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru