0 / 0 / 0
Регистрация: 23.09.2016
Сообщений: 51
1

Односвязный список, удалить все отрицательные элементы

15.12.2017, 22:06. Показов 1514. Ответов 1
Метки нет (Все метки)

Односвязный список

Реализация динамических структур

Написать программу, которая удаляет из списка L все отрицательные элементы

Ребят, помогите пожалуйста переделать код так, чтобы он был односвязным

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
#include <iostream>
#include <cstdlib>
 
class list_int {
public:
    struct node {
        node* next, *prev;
        int   val;
    };
private:
    node* hd, *tl;
public:
    list_int(void):hd(NULL), tl(NULL){}
    ~list_int(){ clear(); }
public:
    //добавление в конец списка
    void add(int val){
        node* p = new node();
        p->val  = val;
        p->next = p->prev = NULL;
        if(hd == NULL)
            hd = tl = p;
        else {
            p->prev  = tl;
            tl->next = p;
            tl = p;
        }
    }
 
    //удаление
    node* erase(node* pos){
        node* p = pos->next;
        if(pos == hd){
            if((hd = hd->next) != NULL)
                hd->prev = NULL;
            else
                tl = NULL;
        } else if(pos == tl){
            tl = tl->prev;
            tl->next = NULL;
        } else {
            pos->prev->next = pos->next;
            pos->next->prev = pos->prev;
        }
        delete pos;
        return p;
    }
 
    //удаление всех
    void clear(void){
        node* t;
        while(hd != NULL){
            t  = hd;
            hd = hd->next;
            delete t;
        }
        tl = NULL;
    }
 
    const node* front(void) const { return hd; }
    const node* back(void)  const { return tl; }
    node* front(void){ return hd; }
    node* back(void) { return tl; }
    bool empty(void) const { return (hd == NULL); }
};
 
int main(void){
    list_int lst;
    for(int i = 0; i < 20; ++i){
        lst.add(-9 + std::rand() % 19);
        std::cout << lst.back()->val << ' ';
    }
    std::cout << std::endl;
 
    //удалить все отрицательные числа
    list_int::node* p = lst.front();
    while(p != NULL){
        if(p->val < 0)
            p = lst.erase(p);
        else
            p = p->next;
    }
 
    //вывести список
    for(const list_int::node* a = lst.front(); a != NULL; a = a->next)
        std::cout << a->val << ' ';
    std::cout << std::endl;
 
    lst.clear();
    std::cin.get();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2017, 22:06
Ответы с готовыми решениями:

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

Кольцевой односвязный список, удалить из него все отрицательные числа
Здравствуйте, необходимо решить проблему в задаче: &quot;Сформулируйте кольцевой список с вещественным...

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

Создать односвязный список из последовательности чисел, удалить из него все простые числа
Прошу помощи, не могу понять в чем ошибка, надо создать односвязный список из последовательности...

1
4004 / 3265 / 914
Регистрация: 25.03.2012
Сообщений: 12,193
Записей в блоге: 1
16.12.2017, 04:43 2
Удалить из списка все отрицательные элементы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2017, 04:43
Помогаю со студенческими работами здесь

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

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

Сформировать список из натуральных чисел. Удалить из списка отрицательные элементы
Помогите 1. Сформировать список из натуральных чисел. Удалить из списка отрицательные элементы....

Удалить все отрицательные элементы
#include &lt;iostream&gt; using namespace std; int main() { int i=0, g=0, j=0, n=0; int arr;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru