Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Вика666
0 / 0 / 0
Регистрация: 08.07.2017
Сообщений: 4
#1

Линейные односвязные списки, динамические массивы - C++

08.07.2017, 16:30. Просмотров 111. Ответов 1
Метки нет (Все метки)

Помогите пожалуйста
Читая целые числа из текстового файла, создать линейный односвязный список добавлением нового элемента в конец списка.
Описать процедуру добавления одного или нескольких элементов в список.
1) Продублировать все нечетные элементы.

Описать процедуру удаления одного или нескольких элементов списка.
2)Удалить из списка все элементы со значением большим заданного значения.

Описать рекурсивную процедуру или функцию обработки списка.
3)Определить сумму значений всех элементов списка.

Описать рекурсивную процедуру или функцию обработки списка.
4)Удалить из списка все нечетные элементы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2017, 16:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Линейные односвязные списки, динамические массивы (C++):

Односвязные линейные списки - C++
Помогите пожалуйста с задачей со списками, т.к вообще не могу в них разобраться. Задача такая: даны текстовый файл и натуральное число n....

Односвязные линейные списки - C++
Доброго времени суток. Передо мной стоит задача написание программы, которая принимает два списка, вводимых с клавиатуры и проверяет их на...

Односвязные линейные списки - C++
Подскажите пожалуйста, как заменить содержимое файла перечнем символов, которые в нем встречаются, упорядоченным в порядке убывания...

Линейные Односвязные Списки С++ - C++
Разработать и реализовать программу создания и обработки линейного односвязного списка с одним информационным полем, которое содержит целое...

Односвязные линейные списки - C++
Здравствуйте! Помогите пожалуйста. Даны текстовый файл и строка s. Группы символов, разделенные пробелами, будем называть ...

Линейные односвязные списки. Вставка элемента - C++
Добрый день! Никогда не была в ладах со списками, поэтому очень нужна помощь! как сделать Дублирование первого элемента после заданного...

1
Геомеханик
665 / 471 / 333
Регистрация: 26.06.2015
Сообщений: 1,101
09.07.2017, 19:01 #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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
#include <sstream>
#include <fstream>
 
struct node {
    node* next;
    int   val;
    node(int v):next(NULL), val(v){}
};
 
node* slist_load(std::istream& _in);
void  slist_print(std::ostream& _out, const node* ls);
void  slist_clear(node* ls);
void  slist_add_odd(node*& ls);
void  slist_del_greater(node*& ls, int v);
int   slist_sum(const node* ls);
void  slist_remove_odd(node*& ls);
 
int main(void){
    char s[] = "-7 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1 10 12 11 2000 23";
    std::istringstream sp(s);
    node* ls = slist_load(sp);
 
/*  ввод из файла
    std::ifstream fp("file.txt");
    node* ls = slist_load(fp);
    fp.close();
*/
    //Продублировать все нечетные элементы
    slist_add_odd(ls);
    slist_print(std::cout, ls);
 
    //Удалить из списка все элементы со значением большим заданного значения
    int val = 5;
    slist_del_greater(ls, val);
    slist_print(std::cout, ls);
 
    //сумма списка
    std::cout << "slist sum: " << slist_sum(ls) << std::endl;
 
    //Удалить из списка все нечетные элементы
    slist_remove_odd(ls);
    slist_print(std::cout, ls);
    slist_clear(ls);
    std::cin.get();
    return 0;
}
 
//загрузка целых чисел из потока
node* slist_load(std::istream& _in){
    node* h = NULL, *t = NULL;
    int   v;
    while(_in >> v){
        if(h == NULL)
            h = t = new node(v);
        else 
            t = t->next = new node(v);
    }
    return h;
}
 
//Описать процедуру добавления одного или нескольких элементов в список. 
void slist_add_odd(node*& ls){
    node* q, *p = ls, *i = ls;
    while(i != NULL){
        if((i->val % 2) != 0){
            q = new node(i->val);
            if(i == ls){
                q->next = ls;
                ls = q;
            } else {
                p->next = q;
                q->next = i;
            }
        }
        p = i;
        i = i->next;
    }
}
 
//Описать процедуру удаления одного или нескольких элементов списка.  
void slist_del_greater(node*& ls, int v){
    node* t, *p = ls, *i = ls;
    while(i != NULL){
        if(i->val > v){
            if(i == ls)
                t = ls = ls->next;
            else
                t = p->next = i->next;
            delete i;
            i = t;
        } else {
            p = i;
            i = i->next;
        }
    }
}
 
//Определить сумму значений всех элементов списка(рекурсивно)
int slist_sum(const node* ls){
    return (ls != NULL) ? ls->val + slist_sum(ls->next) : 0;
}
 
//Удалить из списка все нечетные элементы(рекурсивно)
void slist_remove_odd(node*& ls){
    if(ls != NULL){
        if((ls->val % 2) != 0){
            node* t = ls;
            ls = ls->next;
            delete t;
            slist_remove_odd(ls);
        } else
            slist_remove_odd(ls->next);
    }
}
 
//печать
void slist_print(std::ostream& _out, const node* ls){
    for(; ls != NULL; ls = ls->next)
        _out << ls->val << ' ';
    _out << std::endl;
}
 
//удаление всех
void slist_clear(node* ls){
    node* t;
    while(ls != NULL){
        t  = ls;
        ls = ls->next;
        delete t;
    }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2017, 19:01
Привет! Вот еще темы с ответами:

Не могу написать код к задаче. Линейные односвязные списки - C++
добавлением нового элемента в начало списка нужно удвоить в списке каждое вхождение нулевого элемента.

Динамические структуры данных. Односвязные списки - C++
Вот код. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; using namespace std; const int k = 101;...

Динамические структуры: линейные списки - C++
Люди помогите:wall: Дали задачу из учебника Павловской Вот вроде смотрю как в учебнике написано про линейные списки все понятно. Как...

Динамические структуры (линейные списки): Run-Time Check Failure #2 - Stack around the variable ... was corrupted. - C++
Снова необходима ваша срочная помощь. Программа по димнамическим структурам на С++. Выполняет все необходимые действия, но при программном...


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

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

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