Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ пространство имен http://www.cyberforum.ru/cpp-beginners/thread200568.html
Добрый день, знаю что пространство имен делит на части области видимости, а оператор using включает член пространства/все пространство в глобальное пространство. Объяснять ненадо как это работает с...
C++ лаб 7 Памагите пожалуста Загальні умови: 1. Оголосити двовимірний масив array типу int. 2. Заповнити масив з клавіатури. 3. Вивести результати обчислень на екран. 4. Зобразити схему програми. ... http://www.cyberforum.ru/cpp-beginners/thread200563.html
C++ Добавить К элементов в массив, начиная с номера N
Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать. Добавить К элементов, начиная с номера N. На примере этого: Удалить элемент с заданным...
C++ Узнать какая последовательность периодическая, и найти ее период
Уважаемые программисты у меня проблема с задачами которые для меня являются еще очень сложными. Выручите пожалуйста;). Так не охота вылитать с универа. Вот те злосчастные задачи: 1. Задана...
C++ Поиск количества столбцов матрицы, содержащих больше трех положительных элементов http://www.cyberforum.ru/cpp-beginners/thread200548.html
Помогите пожалуйста с написанием кода. Дан двумерный массив, размерность массива и элементы вводятся вручную. Я не знаю как реализовать поиск количество столбцов, содержащих больше трех...
C++ Ввести значения элементов массива, поменять местами min/max элементы Помогите пожалуйста, нада написать программу которая позволяет ввести 10 елементов одного массива, результат выводилоб на екран,также изменяло найбольшее и найменьшеге значения массива местами на... подробнее

Показать сообщение отдельно
fantaz1
33 / 25 / 1
Регистрация: 08.11.2008
Сообщений: 107

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

30.11.2010, 12:07. Просмотров 398. Ответов 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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru