Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
kondusov
2 / 2 / 0
Регистрация: 01.06.2013
Сообщений: 153
08.10.2013, 21:35     Написать функцию удаления четных элементов двусвязного списка #1
я тут что-то набросал, но это бред похоже.подправьте или переправьте кому не сложно. завтра зачет, пытаюсь разобраться
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;}
это безусловно без свяких проверок на то пуст ли список и тд
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2013, 21:35     Написать функцию удаления четных элементов двусвязного списка
Посмотрите здесь:

Передача параметров в функцию (сортировка двусвязного списка) C++
C++ Написать функцию, которая вычисляет среднее арифметическое элементов непустого списка
C++ Написать функцию удаления из заданного массива отрицательных элементов
C++ Функция удаления чётных элементов двусвязного списка
Написать функцию, которая вычисляет среднее арифметическое элементов непустого списка C++
Добавление и удаление элементов из двусвязного списка C++
Написать функцию полного удаления списка на основе связного хранения C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SummerRain
 Аватар для 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;
}
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;
    }
}
как-то так
kondusov
2 / 2 / 0
Регистрация: 01.06.2013
Сообщений: 153
08.10.2013, 22:57  [ТС]     Написать функцию удаления четных элементов двусвязного списка #4
огромное спасибо. Для циклических двусвязных списков код удаления сильно изменится?
5Hur1KEN
10 / 10 / 1
Регистрация: 25.09.2013
Сообщений: 64
08.10.2013, 23:02     Написать функцию удаления четных элементов двусвязного списка #5
Цитата Сообщение от kondusov Посмотреть сообщение
огромное спасибо. Для циклических двусвязных списков код удаления сильно изменится?
не очень
SummerRain
 Аватар для SummerRain
326 / 325 / 17
Регистрация: 16.12.2012
Сообщений: 544
09.10.2013, 07:36     Написать функцию удаления четных элементов двусвязного списка #6
Цитата Сообщение от 5Hur1KEN Посмотреть сообщение
могут быть и ошибки, компилятором не пользовался
конечно могут... где тут вообще намёк на двусвязный список?

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

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

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

Или воспользуйтесь поиском по форуму:
5Hur1KEN
10 / 10 / 1
Регистрация: 25.09.2013
Сообщений: 64
10.10.2013, 15:12     Написать функцию удаления четных элементов двусвязного списка #9
Цитата Сообщение от SummerRain Посмотреть сообщение
серьёзно?
сори, вот этого я не заметил)
Yandex
Объявления
10.10.2013, 15:12     Написать функцию удаления четных элементов двусвязного списка
Ответ Создать тему
Опции темы

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