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

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

Войти
Регистрация
Восстановить пароль
 
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
#1

Из списка удалить первый из четных элементов - C++

27.12.2012, 19:27. Просмотров 803. Ответов 4
Метки нет (Все метки)

Добрый вечер!помогите пожалуйста с заданием Из списка удалить первый из четных элементов.вот мой код пожалуйста допилите

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
#include "stdafx.h"
#include <malloc.h>
 
typedef struct element_
{
    int value;
    struct element_* next;
} element;
 
element* add_to_end(element* end, int val)
{
    element* new_el = (element* )malloc( sizeof( element) );
    new_el -> next = 0;
    new_el -> value = val;
    end -> next = new_el;
    return new_el;
}
 
#define add(val) end = add_to_end( end, (val))
 
void delete_spisok_(element* start)
{
    if( start -> next != NULL )
        delete_spisok_(  start -> next );
    free(start);
}
 
 
void delete_spisok(element start)
{
    delete_spisok_(start.next);
}
 
element* remove_element(element* el)
{
    element* temp = el -> next;
    printf("%d %d\n",temp,el->value);
    free(el);
    return temp;
}
 
 
void printf_spisok_(element* start)
{
    printf("%d ",start -> value);
    if( start -> next != NULL )
        printf_spisok_(  start -> next );
    else puts("");
}
void printf_spisok(element start)
{
    printf_spisok_(start.next);
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    element start = { 0, 0};
    element *end = &start;
    element *el = &start;
 
    add(25);
    add(75);
    add(21);
    add(78);
 
    printf_spisok(start);
 
    while ( el != NULL)
    {
        if( el -> value % 2 == 0 )
        {
            el = remove_element( el );
            break;
        }
        el = el -> next;
    }
 
    delete_spisok( start);
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2012, 19:27     Из списка удалить первый из четных элементов
Посмотрите здесь:
Из массива удалить первый из четных элементов C++ C++
C++ Удалить первый элемент из списка
C++ Удалить первый элемент списка
Удалить первый элемент односвязного списка C++
C++ Удалить из списка первый элемент с четным информационным полем
C++ Поменять местами первый и последний элементы списка и удалить их средне арифметическое
C++ Надо удалить n-ный элемент списка, при том, что он не первый и не последний
Удалить первый из отрицательных элементов и минимальный из положительных элементов массива C++
Поменять местами минимальный среди четных элементов и первый элемент строки матрицы C++
C++ Найдите сумму четных элементов списка
C++ Написать функцию удаления четных элементов двусвязного списка
Составить два списка из четных и нечетных элементов исходного C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 15:27     Из списка удалить первый из четных элементов #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
#include <iostream> 
 
struct node 
{  
    int data; 
    node* next; 
}; 
 
class linklist 
{ 
private: 
    node* first; 
public: 
    linklist() { first = NULL; } 
    void additem(int d); 
    void show(); 
    void delet(); // функция удаление конкретного элемента из списка
}; 
 
void linklist::additem(int d) 
{  
    node* newnode = new node; // создаём новый элемент списка
    newnode->data = d; // присваиваем полю data, значение переданное в как аргумент функции
    if(first == NULL) // если элемент первый в списки, то есть first равно NULL
    {
        newnode->next = first; // указателю на следующий элемент, присваиваем значение хранящиеся в указатели first
        first = newnode;       // присваиваем указателю first, значение на новый элемент списка
    }  
    else // еcли элемент не первый в списке
    { 
        node* current = first; // создаём элемент текущей и присвоим ему firts, то есть начало списка 
        while(current->next!=NULL) // цикл идёт до тех пор пока указатель элемента не равен значению NULL, то есть до конца списка  
              current = current->next;// переходим от узла к узлу
        current->next = newnode; // когда мы достигли конца списка, элемент расположенный в конце, указывает на наш новый элемент
        newnode->next = NULL;    // новый элемент указывает, на NULL, то есть на конец списка
    } 
}
 
void linklist::show() 
{ 
    node* current = first; 
    while(current) 
    { 
        std::cout << current->data << " "; 
        current = current->next;
    }  
}  
 
void linklist::delet() // функция удаления конкретного элемента из списка
{   
   node* current = first; // текущий элемент
    node* temp;             // временный элемент
 
    while(current->data%2 != 0) // проходим циклом, пока не дойдём до элемента с искомым номером
    {   
        temp = current; // временному присваиваем текущий
        current = current->next; // переход на следующий узел
    }   
    temp->next = current->next; // временный ( то есть элемент, стоящий перед текущим, указывает на элемент идущий после текущего
    delete current; // удаляем текущий
}
 
int main() 
{ 
    linklist li; 
    li.additem(11); 
    li.additem(12); 
    li.additem(13); 
    li.additem(14); 
    li.additem(15); 
 
    li.show(); 
    std::cout << std::endl;
    li.delet(); 
    std::cout << std::endl;
    li.show(); 
    
}
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
07.01.2013, 19:57  [ТС]     Из списка удалить первый из четных элементов #3
Цитата Сообщение от David Sylva Посмотреть сообщение
Можно вот так реализовать
добавил библиотеки
#include "stdafx.h"
#include "conio.h"
но пишет error C4703: используется потенциально неинициализированная локальная переменная-указатель "temp"
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 20:22     Из списка удалить первый из четных элементов #4
Цитата Сообщение от Виктор242424 Посмотреть сообщение
#include "conio.h"
Это не надо.

Цитата Сообщение от Виктор242424 Посмотреть сообщение
#include "stdafx.h"
это зависит от того как вы создавали проект.
Попробовал на двух компиляторах, отработало без замечаний, какой у вас компилятор?

Добавлено через 1 минуту
52 строка сделай так node* temp = new node;
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
07.01.2013, 20:59  [ТС]     Из списка удалить первый из четных элементов #5
Цитата Сообщение от David Sylva Посмотреть сообщение
Это не надо.


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

Добавлено через 1 минуту
52 строка сделай так node* temp = new node;
я работаю с Visual Studio 2012,спасибо после замены все получилось))
Yandex
Объявления
07.01.2013, 20:59     Из списка удалить первый из четных элементов
Ответ Создать тему
Опции темы

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