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

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

Восстановить пароль Регистрация
 
Виктор242424
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 37
27.12.2012, 19:27     Из списка удалить первый из четных элементов #1
Добрый вечер!помогите пожалуйста с заданием Из списка удалить первый из четных элементов.вот мой код пожалуйста допилите

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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
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
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
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     Из списка удалить первый из четных элементов
Ответ Создать тему
Опции темы

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