-9 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 24
1

Сформировать двунаправленный список целых чисел

14.06.2016, 19:42. Показов 2624. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сформировать двунаправленный список целых чисел. Удалить из списка все четные числа. Вывести на экран список в обоих направлениях.
Зарание спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2016, 19:42
Ответы с готовыми решениями:

Сформировать упорядоченный двунаправленный список целых чисел
1. Сформировать упорядоченный двунаправленный список целых чисел. Включить в список новый элемент ,...

Создать двунаправленный список из целых чисел
Нужна помощь! Создать двунаправленный список из целых чисел. Удалить из списка элемент после...

Сформировать список целых чисел и упорядочить их по неубыванию
Не могу разобраться с лабораторной работой. Прошу помочь. Сформировать список целых чисел и...

Сформировать список целых чисел, считав их из заданного файла
В текстовом файле INPUT.TXT записаны целые числа через пробел, возможно, в несколько строк. За один...

1
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
14.06.2016, 21:00 2
Лучший ответ Сообщение было отмечено mr_burtak как решение

Решение

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
#include <iostream>
#include <cstdlib>
 
struct node {
    node* prev;
    node* next;
    int   val;
};
 
typedef struct {
    node* head;
    node* tail;
} list_t;
 
inline void list_init(list_t* lst);
bool  list_add(list_t* lst, int val);
void  list_clear(list_t* lst);
node* list_delete(list_t* lst, node* pos);
void  list_remove(list_t* lst, bool (*pcmp)(int));
 
bool icmp(int val) { return ((val % 2) == 0); }
 
 
int main(void){
    list_t lst;
    list_init(&lst);
    for(int i = 0; i < 10; ++i){
        int n = 1 + rand() % 9;
        list_add(&lst, n);
        std::cout << n << ' ';
    }
    std::cout << std::endl;
 
    //удалить все чётные числа
    list_remove(&lst, &icmp);
 
    //вывести с начало
    for(const node* a = lst.head; a != NULL; a = a->next)
        std::cout << a->val << ' ';
    std::cout << std::endl;
 
    //вывести с конца
    for(const node* b = lst.tail; b != NULL; b = b->prev)
        std::cout << b->val << ' ';
    std::cout << std::endl;
    list_clear(&lst);
    return 0;
}
 
//удаление элементов по функтору
void list_remove(list_t* lst, bool (*pcmp)(int)){
    for(node* p = lst->head; p != NULL; ){
        if((*pcmp)(p->val))
            p = list_delete(lst, p);
        else
            p = p->next;
    }
}
 
//удаление элемента
node* list_delete(list_t* lst, node* pos){
    node*  p;
    node*& h = lst->head;
    node*& t = lst->tail;
    if(pos == NULL)
        return NULL;
    else if(pos == h){
        p = h = h->next;
        if(h != NULL)
            h->prev = NULL;
        else
            t = NULL;
    } else if(pos == t){
        p = NULL;
        t = t->prev;
        if(t != NULL)
            t->next = NULL;
        else
            h = NULL;
    } else {
        pos->prev->next = pos->next;
        pos->next->prev = pos->prev;
        p = pos->next;
    }
    delete pos;
    return p;
}
 
//вставка в конец списка
bool list_add(list_t* lst, int val){
    node* p = new (std::nothrow) node();
    if(p == NULL)
        return false;
 
    p->prev = p->next = NULL;
    p->val  = val;
 
    if(lst->head == NULL)
        lst->head = lst->tail = p;
    else {
        p->prev = lst->tail;
        lst->tail->next = p;
        lst->tail = p;
    }
    return true;
}
 
//удаление всех
void list_clear(list_t* lst){
    node* t;
    while(lst->head != NULL){
        t = lst->head;
        lst->head = lst->head->next;
        delete t;
    }
    lst->tail = NULL;
}
 
//инициализация
inline void list_init(list_t* lst){
    lst->head = lst->tail = NULL;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2016, 21:00
Помогаю со студенческими работами здесь

Как сформировать двунаправленный список?
Как сформировать двунаправленный список действительных чисел? Нужно удалить из списка второй и...

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

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

Сформировать двунаправленный список, тип информационного поля char*
Всем привет, кто сможет помочь с заданием? 1. Сформировать двунаправленный список, тип...


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

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

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