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

Динамические списки - C++

Восстановить пароль Регистрация
 
fantaz1
 Аватар для fantaz1
33 / 25 / 1
Регистрация: 08.11.2008
Сообщений: 107
30.11.2010, 12:07     Динамические списки #1
Пишу курсовую работу про динамические списки, и хотелось узнать мнение специалистов про мою функцию удаления элемента со списка.. Прост первый раз встретился с этими списками, и почему то мне кажится что сильно громоздкая моя функция, нельзя ее как нибуть упростить, или по другому удалять заданый элемент?
Вот моя структура списка
C++
1
2
3
4
5
6
struct  NumbersStruct
{
    int data;
    NumbersStruct *next;
    NumbersStruct *previous;
};
Вот сама функция:
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
NumbersStruct* DeleteItem(NumbersStruct *numbers)        //Передаем в функцию элемент который нужно удалить
{       
    NumbersStruct *del = numbers;
    NumbersStruct *ret;
 
    if(numbers->previous && numbers->next)
    {
        numbers->previous->next = numbers->next;
        numbers->next->previous = numbers->previous;
        ret = numbers->previous;
    }
    else if(!numbers->previous)                //Проверяем, первый ли он в списке
    {   
        del = numbers->next;
        if(numbers->next->next)      //Проверяем, единственый ли он в списке
        {
            numbers->data = numbers->next->data;
            numbers->next = numbers->next->next;    
            numbers->next->previous = numbers;
        }
        else
        {
            numbers->data = 0;
            numbers->next = 0;
        }
        ret = numbers;
    }
    else                                                      //Или последний
    {       
        numbers->previous->next = numbers->next;
        numbers->next->previous = numbers->previous;
        numbers->next->next = 0;
        ret = numbers->previous;
    }
 
    delete del;
 
    return ret;
}
И вот пример использования этой функции (удалить элементы которые содержат введенное число):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void DeleteThisNumber(NumbersStruct *numbers)//Передаем сюда первый элемент списка
{
    system("cls");
 
    wcout<<L"Введите число: ";
    int num;
    cin>>num;
 
    while(numbers->next)
    {       
        if(numbers->data == num)
        {
            numbers = DeleteItem(numbers);
        }
        numbers = numbers->next;
    }
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2010, 12:07     Динамические списки
Посмотрите здесь:

Динамические списки C++
C++ Динамические структуры.Списки
Динамические структуры (связанные списки) C++
Динамические Списки!!!! Очень нужно...! C++
C++ Две задачи на списки (динамические структуры)
C++ Динамические структуры данных. Линейные списки.
C++ Динамические структуры. Линейные списки
Динамические структуры данных. Списки C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.11.2010, 17:11     Динамические списки #2
C++
1
if(numbers->next->next)      //Проверяем, единственый ли он в списке
а если в списке только один элемент ?
дальше тоже что-то не то, перемещение данных numbers->data, такого не должно быть при удалении узла

C++
1
2
                        numbers->data = 0;
                        numbers->next = 0;
тоже что-то лишнее, какая разница чему они будут равны

это по ходу используется лишний элемент, обозначающий конец списка
список с двумя элементами может выглядеть так: NULL <- data1 -> <- data2 -> NULL
без всяких лишних узлов
Yandex
Объявления
30.11.2010, 17:11     Динамические списки
Ответ Создать тему
Опции темы

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