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

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

Войти
Регистрация
Восстановить пароль
 
Maratovich
13 / 17 / 1
Регистрация: 05.09.2012
Сообщений: 210
#1

Не работает удаление в списке - C++

23.12.2012, 22:47. Просмотров 282. Ответов 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
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
#include <iostream>
using namespace std;
 
struct List
{
    int value;
    List *next;
};
 
List *add(List *end)
{
    if(end == NULL)
    {
        end = new List;
    }
    else
    {
        end->next = new List;
        end = end->next;
 
    }
    cin>>end->value;
    end->next = NULL;
    return end;
}
 
List *find(List *beg, int value)
{
    List *index;
    while(beg != NULL)
    {
        if(beg->value == value)
        {
            index = beg;
            break;
        }
        else
        {
            index = NULL;
        }
        beg = beg->next;
    }
    return index;
}
 
 
bool del(List *beg, int value)
{
    List *new_beg;
    new_beg = find(beg,value);
    if(new_beg != NULL) 
    {
        new_beg = beg->next;
        delete beg;
        beg = new_beg;
        return true;        
    }
    return false;
}
 
void show(List *beg)
{
    while(beg != NULL)
    {
        cout<<beg->value<<endl;
        beg = beg->next;
    }
}
 
int main()
{   
    List *beg = NULL, *end = NULL;
    int element;
    if(beg == NULL) 
    {
        beg = add(end);
        end = beg;
    }
    else
    {
        end = add(end);
    }   
 
 
    show(beg);  
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 22:47     Не работает удаление в списке
Посмотрите здесь:

В программе не работает 1)удаление элемента, последнего в списке-зависает и - C++
В программе не работает 1)удаление элемента, последнего в списке-зависает и нужна операция обработки -обмен местами элементов с заданными...

Удаление в списке - C++
Реализован метод удаления после какого-то элемента в спике: void remove(Node *where) { if (nodes&gt;1 &amp;&amp; where-&gt;next != 0) { ...

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

Удаление элементов в списке - C++
Помогите написать программу(скорее функцию), где нужно удалить в списке элементы с позиции N по K. Список циклический однонаправленный. ...

Удаление элемента в списке - C++
Привет, всем снова! Помогите, пожалуйста, разобраться теперь уже с удалением элемента из линейного односвязного списка с максимальным...

Удаление элемента в списке - C++
Необходимо реализовать метод удаления элемента из списка не после определённого элемента (как сделано в коде), а по индексу этого элемента ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
24.12.2012, 00:23     Не работает удаление в списке #2
Цитата Сообщение от Maratovich Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
List *find(List *beg, int value)
{
* * List *index;
* * while(beg != NULL)
* * {
* * * * if(beg->value == value)
* * * * {
* * * * * * index = beg;
* * * * * * break;
* * * * }
* * * * else
* * * * {
* * * * * * index = NULL;
* * * * }
* * * * beg = beg->next;
* * }
* * return index;
}
У тебя и эта функция неверно работает и в большинстве случаев возвращает вместо найденного NULL!

Добавлено через 3 минуты
Надо так!
C++
1
2
3
4
5
6
7
List *find(List *beg, int value)
{
    while(beg != NULL)
        if(beg->value == value) return beg;
        else beg=beg->next;
    return NULL;
}
Добавлено через 1 минуту
Цитата Сообщение от Maratovich Посмотреть сообщение
beg = new_beg;
ты что, не знаешь, что изменение аргументов функции не влияет на них после выхода из неё, даже если передаётся указатель?
Maratovich
13 / 17 / 1
Регистрация: 05.09.2012
Сообщений: 210
24.12.2012, 20:41  [ТС]     Не работает удаление в списке #3
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ты что, не знаешь, что изменение аргументов функции не влияет на них после выхода из неё, даже если передаётся указатель?
про это я знаю, просто такая привычка подстраховываться - вдруг что...
за счет исправления функции find спасибо, учту.

а как насчет функции delete мог бы ты мне ее объяснить - показать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2012, 21:25     Не работает удаление в списке
Еще ссылки по теме:

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

Удаление по ключу в односвязном списке - C++
Написал алгоритм удаления по ключу в линейном, односвязном списке, но он не удаляет, а коверкает записи. Помогите разобраться.. ...

Добавление и удаление элемента в списке - C++
Ребят сделал код создания элементов списка, но не могу написать 1) код добавления элемента списка в конец списка 2) код удаления...

Удаление узла в линейном списке - C++
У меня есть структура (файловая система) , я могу помещать туда файлы (здесь все работает). Содержаться следующие поля : имя файла , время...

Удаление узлов в односвязном списке - C++
Помогите пожалуйста, не могу понять что не так. Нужно удалить узлы содержащие простые числа.Программа не удаляет! #include&lt;iostream&gt; ...

Поиск и удаление в односвязном списке - C++
Помогите с удаление элемента по ключу(номеру этажа). При удалении 2-го элемента в списке, удаляется вместе с 1-ым, но если удалять 3, то 2...


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

Или воспользуйтесь поиском по форуму:
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
24.12.2012, 21:25     Не работает удаление в списке #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
#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 // ели элемент не первый в списке
    { 
        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() // функция удаления конкретного элемента из списка
{   
    int n = 3;         // номер элемента, который удаляем
    int count = 1;     // счётчик элементов, начинаем с первого элемента
    node* current = first; // текущий элемент
    node* temp;             // временный элемент
 
    while(count!=n) // проходим циклом, пока не дойдём до элемента с искомым номером
    {   
        temp = current; // временному присваиваем текущий
        current = current->next; // переход на следующий узел
        count++;                 // увеличиваем счётчик
    }   
    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(); 
    
}
Yandex
Объявления
24.12.2012, 21:25     Не работает удаление в списке
Ответ Создать тему
Опции темы

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