4 / 4 / 5
Регистрация: 12.11.2016
Сообщений: 107
1

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

27.05.2017, 23:03. Показов 7786. Ответов 2
Метки нет (Все метки)

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

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

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

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

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

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

Решение

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>
 
struct node {
    node* prev;
    node* next;
    int   val;
    node(int v):prev(NULL), next(NULL), val(v){}
};
 
typedef struct {
    node* head, *tail;
} list_t;
 
void  list_init(list_t* lst){ lst->head = lst->tail = NULL; }
void  list_copy(list_t* lst, const int* a, int n);
node* list_erase(list_t* lst, node* pos);
node* list_insert_before(list_t* lst, node* pos, int val);
void  list_clear(list_t* lst);
 
int main(void){
    list_t lst;
    int a[] = { 4, -4, 1, 1, 1, 1, 4, 7, 4, 8, 4, 9, 1, 1, 4, -9 };
    list_init(&lst);
    list_copy(&lst, a, sizeof(a)/sizeof(a[0]));
 
    //Удалить из списка элемент после каждого элемента, равного 4
    node* p = lst.head;
    while(p != NULL){
        if((p->val == 4) && (p->next != NULL))
            p = list_erase(&lst, p->next);
        else
            p = p->next;
    }
 
    //Вставить число 0 перед каждым числом 1
    for(p = lst.head; p != NULL; p = p->next){
        if(p->val == 1)
            p = list_insert_before(&lst, p, 0);
    }
 
    //вывод
    for(const node* x = lst.head; x != NULL; x = x->next)
        std::cout << x->val << ' ';
    std::cout << std::endl;
 
    for(const node* y = lst.tail; y != NULL; y = y->prev)
        std::cout << y->val << ' ';
    std::cout << std::endl;
 
    list_clear(&lst);
    std::cin.get();
    return 0;
}
 
//копирование массива
void list_copy(list_t* lst, const int* a, int n){
    node* p;
    list_init(lst);
    for(int i = 0; i < n; ++i){
        p = new node(a[i]);
 
        if(lst->head == NULL)
            lst->head = lst->tail = p;
        else {
            p->prev = lst->tail;
            lst->tail->next = p;
            lst->tail = p;
        }
    }
}
 
//удаление
node* list_erase(list_t* lst, node* pos){
    node* p = pos->next;
    if(pos == lst->head){
        lst->head = lst->head->next;
        if(lst->head == NULL)
            lst->tail = NULL;
        else
            lst->head->prev = NULL;
    } else if(pos == lst->tail){
        lst->tail = lst->tail->prev;
        lst->tail->next = NULL;
    } else {
        pos->prev->next = pos->next;
        pos->next->prev = pos->prev;
    }
    delete pos;
    return p;
}
 
//вставка перед pos
node* list_insert_before(list_t* lst, node* pos, int val){
    node* p = new node(val);
    if(pos == lst->head){
        lst->head->prev = p;
        p->next   = lst->head;
        lst->head = p;
    } else {
        p->next = pos;
        p->prev = pos->prev;
 
        pos->prev->next = p;
        pos->prev = p;
    }
    return pos;
}
 
//удаление всех
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;
}
0
4 / 4 / 5
Регистрация: 12.11.2016
Сообщений: 107
30.05.2017, 16:58  [ТС] 3
Спасибо!!
0
30.05.2017, 16:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2017, 16:58
Помогаю со студенческими работами здесь

Создать динамический список из случайных целых чисел?
Создать динамический список из случайных целых чисел (от -30 до +30), поменять местами элементы,...

Создать однонаправленный кольцевой список целых чисел
Помогите написать программу (СРОЧНО)!!! Тип списка:Однонаправленный кольцевой Элемент списка:...

Массив целых чисел, двунаправленный список
Дан массив целых чисел. Поместить все элементы этого массива в двунаправленный список . Вывести все...

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


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

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

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