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

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

Войти
Регистрация
Восстановить пароль
 
kondusov
3 / 3 / 0
Регистрация: 01.06.2013
Сообщений: 153
#1

Написать функцию удаления четных элементов двусвязного списка - C++

08.10.2013, 21:35. Просмотров 735. Ответов 8
Метки нет (Все метки)

я тут что-то набросал, но это бред похоже.подправьте или переправьте кому не сложно. завтра зачет, пытаюсь разобраться
C++
1
2
3
4
5
6
7
8
void Delete(){
element * buf=head;
while (head->next !=NULL)
if (head->next%2==0){
buf=head->next->next;
head->next=buf;
buf->prev=head;
head=head->next;}
это безусловно без свяких проверок на то пуст ли список и тд
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2013, 21:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать функцию удаления четных элементов двусвязного списка (C++):

Функция удаления чётных элементов двусвязного списка - C++
bool delete_even(circle_list *&list) {circle_list *curr=list, *first=list; *temp=NULL; if (Empty_list(list)) return false; while...

Написать функцию стирания элемента двусвязного списка - C++
Ребята помогите , завтра надо принести преподу = но я честно незнаю как правильно все сделать и написать . Очень буду ценить если кто-то...

Функция удаления из двусвязного списка - C++
Создал двусвязный список на основе класса, работают ввод элементов в список и вывод всего списка. Помогите пожалуйста с функцией удаления...

Написать функцию удаления элемента из списка - C++
Надо написать функцию Void del (int value) , которая удаляет элемент в списке и Elem *searth (int value) , что в списке ищет первый элемент...

Написать функцию полного удаления списка на основе связного хранения - C++
Помогите составить такую функцию! Добавлено через 14 минут *связного

Написать функцию удаления из заданного массива отрицательных элементов - C++
Написать функцию удаления из заданного массива отрицательных элементов, использовать ее для массива целых и вещественных чисел.

8
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
08.10.2013, 22:15 #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
133
134
#include<iostream>
using namespace std;
 
struct List
{
    List(int n) : iParam(n) {}
    int iParam;
    List* next;
    List* prev;
};
 
List *head, *tail;
 
void Add(List* temp) {
 
    if (head == 0)  // список пуст
    {
        temp->next = 0;
        temp->prev = 0;
        head = temp;
        tail = head;
    }
    else if (head == tail)   // список имеет один элемент
    {
        head->next = temp;
        temp->prev = head;
        temp->next = 0;
        tail = temp;
    }
    else {
        List* cur = head;
        bool is_find = false;
        while (cur != 0) {
            if (cur->iParam == temp->iParam) 
            {
                is_find = true;             
 
                temp->prev = cur->prev;
                temp->next = cur->prev->next;
                cur->prev->next = temp;
                cur->prev = temp;               
            }
            cur = cur->next;
        }
        if (!is_find) {  // если элемент не найден, то вставляем в конец
            tail->next = temp;
            temp->prev = tail;
            temp->next = 0;
            tail = temp;
        }
    }
}
 
void ShowList() {
    if (head == 0) {   // список пуст
        return;
    }
    List* cur = head;
    while (cur != 0) {
        printf("parametr int %i\n", cur->iParam);
        printf("\n");
        cur = cur->next;
    }
}
 
void Delete(List* val) {  // удаление одиночного элемента
    if (head == 0) {   // список пуст
        return;
    }
    List* cur = head;
    if (head == tail && head->iParam == val->iParam)  // в списке один элемент 
    {
        head->next = 0;
        head->prev = 0;
        head = 0;
        tail = head;
        return;
    }
 
    if (head->iParam == val->iParam)  // удаляется начальный элемент 
    {
        head = head->next;
        head->prev = 0;
        val->next = 0;
        val->prev = 0;
        return;
    }
 
    if (tail->iParam == val->iParam)  // удаляется конечный элемент элемент 
    {
        tail = tail->prev;
        tail->next = 0;
        val->next = 0;
        val->prev = 0;
        return;
    }
    while (cur != 0) {
        if (val != cur)
            cur = cur->next;
        else 
        {
            cur->prev->next = cur->next;
            cur->next->prev = cur->prev;
            break;
        }
    }
}
 
void Delete_even()  // удаление четных элементов
{
    if (head == 0) {   // список пуст
        return;
    }
    List* cur = head;
    while (cur != 0) {
        if (cur->iParam % 2 == 0)
            Delete(cur);
        cur = cur->next;
    }
}
 
int main()
{
    List a(5);
    List b(6);
    List c(7);
    List d(8);
    Add(&a); Add(&b); Add(&c); Add(&d);
    ShowList();
    Delete_even();
    ShowList();
    system("pause>0");
    return 0;
}
1
5Hur1KEN
10 / 10 / 1
Регистрация: 25.09.2013
Сообщений: 64
08.10.2013, 22:41 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Прошу, могут быть и ошибки, компилятором не пользовался

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
void DeleteEven(){
    if(head!=NULL)
        element *temp=head;
        int k=0;
        while(temp!=NULL){
            if(head->next==NULL)
                if(temp->data%2==0){     //data - это поле данных вашего узла
                    k=1;
                    delete temp;
                    head=NULL;
                }
            else if(temp==head)}
                if(temp->data%2==0){
                    k=1;
                    head=temp->next;
                    delete temp;
                    temp=head;
                }
            }
            else if(temp->data%2==0){
                k=1;
                element *current=temp;
                temp=temp->next;
                delete current;
            }
        }
        if(k==0) cout<<"Чётных элементов в списке нету"<<endl;
    }
}
как-то так
1
kondusov
3 / 3 / 0
Регистрация: 01.06.2013
Сообщений: 153
08.10.2013, 22:57  [ТС] #4
огромное спасибо. Для циклических двусвязных списков код удаления сильно изменится?
0
5Hur1KEN
10 / 10 / 1
Регистрация: 25.09.2013
Сообщений: 64
08.10.2013, 23:02 #5
Цитата Сообщение от kondusov Посмотреть сообщение
огромное спасибо. Для циклических двусвязных списков код удаления сильно изменится?
не очень
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
09.10.2013, 07:36 #6
Цитата Сообщение от 5Hur1KEN Посмотреть сообщение
могут быть и ошибки, компилятором не пользовался
конечно могут... где тут вообще намёк на двусвязный список?

Добавлено через 1 минуту
Цитата Сообщение от kondusov Посмотреть сообщение
Для циклических двусвязных списков код удаления сильно изменится?
нет, просто также нужно особо рассмотреть случаи, когда в списке 0, 1, 2 элемента.
0
5Hur1KEN
10 / 10 / 1
Регистрация: 25.09.2013
Сообщений: 64
09.10.2013, 15:11 #7
Цитата Сообщение от SummerRain Посмотреть сообщение
конечно могут... где тут вообще намёк на двусвязный список?
ну вначале ему не нужен был двусвязный список, я его и не делал, всё просто
0
SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
09.10.2013, 18:54 #8
Цитата Сообщение от 5Hur1KEN Посмотреть сообщение
ну вначале ему не нужен был двусвязный список
Цитата Сообщение от kondusov Посмотреть сообщение
хочу написать функцию удаления четных элементов двусвязного списка
серьёзно?
0
5Hur1KEN
10 / 10 / 1
Регистрация: 25.09.2013
Сообщений: 64
10.10.2013, 15:12 #9
Цитата Сообщение от SummerRain Посмотреть сообщение
серьёзно?
сори, вот этого я не заметил)
0
10.10.2013, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 15:12
Привет! Вот еще темы с ответами:

Передача параметров в функцию (сортировка двусвязного списка) - C++
Дан работающий код (двусвязный список+сортировка его пузырьком) Нужно выделенную часть оформить в отдельную функцию. я делаю три...

Дан односвязный список. Написать функцию удаления из него всех элементов с минимальным значением - C++
Дан односвязный список. Написать функцию удаления из него всех элементов с минимальным значением. #include &lt;iostream&gt; #include &lt;string.h&gt;...

Добавление и удаление элементов из двусвязного списка - C++
Разбираю списки. Посмотрите код правильно ли я все понимаю?))) путаюсь с указателями. может можно проще чтото сделать? struct st { ...

Написать функцию, которая вычисляет среднее арифметическое элементов непустого списка - C++
Написать функцию, которая вычисляет среднее арифметическое элементов непустого списка.


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

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

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