С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Centurion0110
0 / 0 / 0
Регистрация: 19.01.2017
Сообщений: 6
1

Найти сумму второго и предпоследнего элемента двунаправленного списка

27.01.2017, 15:21. Просмотров 166. Ответов 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
#include <iostream>
using namespace std;
//struktura dinamizeckogo spiska
struct LIST
{
    int dann;
    LIST *next;
    LIST *prev;
};
LIST *head = NULL;
LIST *rear = NULL;
 
void summa(){
    LIST* ptr = head;
    int sum = 0;
    while (ptr)
    {
        sum += ptr->dann;
        ptr = ptr->next;
    }
    cout << sum;
}
 
//funzia formirovania spiska
void make(int a)
{
    LIST *ptr;
    ptr = new LIST;
    if (!head) head = ptr;
    else rear->next = ptr;
    ptr->dann = a;
    rear = ptr;
    rear->next = NULL;
}
 
//funkzia vuvoda na ekran elementov spiska
void print(void)
{
    LIST *ptr = head;
    while (ptr)
    {
        cout << ptr->dann << " ";
        ptr = ptr->next;
    }
    cout << endl;
}
 
//funkzia udalenia pervogo elementa
void deletenhead(void)
{//ukazatel ptr ustanavlivaem na 1-i elem
    LIST *ptr = head;
    //ukazatel head ustanavlivaet na 2-i elem
    head = ptr->next;
    //1-i elem udalaem
    delete ptr;
}
 
//funkzia udalenia poslednego elem
void deletenrear(void)
{
    //ukazatel ptr ustanavlivaem na nachalo spiska
    LIST *ptr = head;
    //esli v spiske 1-n elem
    if (ptr == rear)
    {
        //to ego udalaem
        delete ptr;
        //ukazateli rear i head obnulaem
        head = rear = NULL;
    }
    //esli v spiske 2 elem i bolee
    else
    {
        //ukazatel ptr ustanavlivaem na predposlednii elem
        while (ptr->next != rear) ptr = ptr->next;
        //poslednii elem udalaem
        delete rear;
        // teper poslednii elem - eto tot,
        //na kotorii ukazuvaet ptr
        rear = ptr;
        //u poslednego elem pole next soderzut NULL
        rear->next = NULL;
    }
}
 
void main(void)
{
    int n, i, b;
    cout << "VVedite kolichestvo elementov spiska: ";
    cin >> n;
    cout << "VVedite elementi spiska: " << endl;
    for (i = 0; i<n; i++)
    {
        cin >> b;
        make(b);
    }
    cout << "\nVveden spisok: ";
    print();
    deletenhead();
    cout << "\nspisok posle udalenia pervogo elementa: ";
    print();
    deletenrear();
    cout << "\nspisok posle udalenia poslednego elementa: ";
    print();
    cout << endl;
    LIST* ptr = head;
 
    int sum = 0;
    while (ptr)
    {
        sum += ptr->dann;
        ptr = ptr->next;
 
    }
    cout << "\nVivod summi:\n" << sum << endl;
    cin >> sum;
    system("pause");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2017, 15:21
Ответы с готовыми решениями:

Удаление второго и предпоследнего элемента списка
Как осуществить доступ к внутренним элементам списка?

Найти сумму последнего и предпоследнего эл-тов списка L целых чисел, содержащего не менее 2-ух эл-тов.
Прошу помочь решить задачки!:(очень нужно (Билет №21) Найти сумму последнего и предпоследнего...

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

Найти сумму первого и последнего элемента списка
Двунаправленный список.Найти сумму первого и последнего элемента. спасибо

Односвязный список. Вывести сумму последнего элемента и первого, предпоследнего и последнего и т.д.
Считываю с клавиатуры числа пока не встречаю 0. Например 1 3 7 5 8 1 0 Вывожу суму последнего...

1
ящюр
97 / 97 / 60
Регистрация: 15.03.2013
Сообщений: 528
Записей в блоге: 1
27.01.2017, 21:09 2
Если смысл я уловил, то после удаления элементов нужно найти сумму второго и предпоследнего элемента получившегося массива. Что менял не помню, поэтому выкладываю весь код.
Кликните здесь для просмотра всего текста
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
#include <iostream>
using namespace std;
//struktura dinamizeckogo spiska
struct LIST
{
    int dann;
    LIST *next;
    LIST *prev;
};
LIST *head = NULL;
LIST *rear = NULL;
 
void  summa(){
    LIST* ptr = head;
    int sum = 0;
    sum = (head->next )->dann;
    sum += (rear->prev )->dann;
 
    cout << sum;
}
 
//funzia formirovania spiska
void make(int a)
{
    LIST *ptr;
    ptr = new LIST;
    if (!head) head = ptr;
    else rear->next = ptr;
    ptr->dann = a;
    ptr->prev = rear;
    rear = ptr;
    rear->next = NULL;
    
}
 
//funkzia vuvoda na ekran elementov spiska
void print(void)
{
    LIST *ptr = head;
    while (ptr)
    {
        cout << ptr->dann << " ";
        ptr = ptr->next;
    }
    cout << endl;
}
 
//funkzia udalenia pervogo elementa
void deletenhead(void)
{//ukazatel ptr ustanavlivaem na 1-i elem
    LIST *ptr = head;
    //ukazatel head ustanavlivaet na 2-i elem
    head = ptr->next;
    //1-i elem udalaem
    delete ptr;
}
 
//funkzia udalenia poslednego elem
void deletenrear(void)
{
    //ukazatel ptr ustanavlivaem na nachalo spiska
    LIST *ptr = head;
    //esli v spiske 1-n elem
    if (ptr == rear)
    {
        //to ego udalaem
        delete ptr;
        //ukazateli rear i head obnulaem
        head = rear = NULL;
    }
    //esli v spiske 2 elem i bolee
    else
    {
        //ukazatel ptr ustanavlivaem na predposlednii elem
        while (ptr->next != rear) ptr = ptr->next;
        //poslednii elem udalaem
        delete rear;
        // teper poslednii elem - eto tot,
        //na kotorii ukazuvaet ptr
        rear = ptr;
        //u poslednego elem pole next soderzut NULL
        rear->next = NULL;
    }
}
 
void main(void)
{
    int n, i, b;
    cout << "VVedite kolichestvo elementov spiska: ";
    cin >> n;
    cout << "VVedite elementi spiska: " << endl;
    for (i = 0; i<n; i++)
    {
        cin >> b;
        make(b);
    }
    cout << "\nVveden spisok: ";
    print();
    deletenhead();
    cout << "\nspisok posle udalenia pervogo elementa: ";
    print();
    deletenrear();
    cout << "\nspisok posle udalenia poslednego elementa: ";
    print();
    cout << endl;
    LIST* ptr = head;
 
    int sum = 0;
    
    cout << "\nVivod summi:\n";
    summa();
    cout << endl;
    
    system("pause");
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2017, 21:09

Удаление второго элемента списка
Здравствуйте! Дана программа формирования и редактирования списка студентов. Но последняя функция...

Удаление каждого второго элемента линейного списка
нужно написать функцию удаления каждого 2 элемента списка, вот код по сути требуется только...

Найти сумму элементов первого столбца без одного последнего элемента, сумму элементов второго столбца без двух последних...
Здравствуйте, форумчане! У меня вот такая вот задачка: Задан двумерный массив. Найти сумму...


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

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

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