Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
1

Динамические списки

30.11.2010, 12:07. Показов 778. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу курсовую работу про динамические списки, и хотелось узнать мнение специалистов про мою функцию удаления элемента со списка.. Прост первый раз встретился с этими списками, и почему то мне кажится что сильно громоздкая моя функция, нельзя ее как нибуть упростить, или по другому удалять заданый элемент?
Вот моя структура списка
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");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2010, 12:07
Ответы с готовыми решениями:

Динамические списки
Всем привет. Подскажите пожалуста идеи. Дано стек, разработать функцию, которая формирует два новых...

Динамические списки
Задание: разработать функцию перестановки заданного элемента в начало списка. Есть библиотека, на...

Динамические списки
Здравствуйте. Написан мною код по заданию: из введенных слов составить списки, в 1 списке все...

Динамические списки, жуть
Дали мне задание. Моделирование баз данных автомобилей с использованием динамическим списком. Я...

1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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
без всяких лишних узлов
0
30.11.2010, 17:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2010, 17:11
Помогаю со студенческими работами здесь

Динамические структуры: списки
Создать линейный однонаправленный список из вещественных чисел. Удалить из списка элемент перед...

Динамические Списки!!!! Очень нужно...!
Помогите пожалуйста решить задачи на Си....горит стипендия(( Задача 1. Описать функцию, которая...

Динамические структуры данных. Списки
Ребят, срочно нужна помощь, помогите пожалуйста, кто чем может! Задание: В деке задать слово....

Динамические массивы и списки данных
1.Дана матрица А(n´n). Найти номера строк и столбцов, элементы которых образуют возрастающую...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru