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

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

Восстановить пароль Регистрация
 
Spb1337
-13 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 13
21.02.2013, 15:42     Удалить из линейного списка элемент между двумя заданными #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
// Удаление элемента перед элементом find
void Before_Del ( char find )
{
    
    ELEM    *pprev,                 // Указатель на предпредыдущий элемент по отношению к заданному
        *del,               // Указатель на удаляемый элемент
        *cur;               // Указатель на текущий элемент
    if( start == NULL )
    {
        printf( "\n Список пуст. Нельзя найти нужный элемент ");
    }
    if( start->next == NULL )
    {
        printf( "\n В списке только один элемент. Нельзя выполнить данную операцию");
        return;
    }
        // Поиск элементов, содержащих символ find, с удалением элементов, предшествующих найденным
    pprev = NULL;
    cur = start->next;
    while( cur != NULL )
    {
        if( cur->ch == find )
        {   // Нужный элемент найден (он является текущим)
            // Найденный элемент является вторым в ЛС
        if( pprev == NULL )
        {
            // Будем удалять головной элемент
            del = start;
            // Первым элементом списка теперь будет бывший второй
            start = start->next;
        }
        else
        {
        // Указатель на удаляемый элемент
        del = pprev->next;
        // Связь предпредыдущего и текущего элементов
        pprev->next = del->next;
        }
        delete del;     // Удаление элемента
    }
    else
    {   // Продвижение указателя pprev требуется, если на очередном шаге не было удаления элемента
        if( pprev == NULL )
            pprev = start;
        else
            pprev = pprev->next;
    }
    cur = cur->next/    // Продвижение этого указателя требуется всегда
    }
    return;
}
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
// Удаление элемента после элемента find
void After Del( char find )
{
    ELEM    *del, // Указатель на удаляемый элемент
            *cur; // Указатель на текущий элемент
    if( start == NULL )
    {
    printf( "\n Список пуст. Нельзя найти нужный элемент");
    return;
    }
    if( start->next == NULL )
    {   
    printf ( "\n В списке только один элемент. Нельзя выполнить данную операцию");
    return;
    }
    // Поиск элементов, содержащих символ find, с удалением элементов, следующих за найденными
    cur = start;
    do
    {
    if( cur->ch == find )
    {   // Нужный элемент найден (он является текущем)
        // Указатель на элемент для удаления
        del = cur->next;
        // Связь текущего элемента с элементом, следующим за удаляемым
        cur->next = del->next;
        delete del;     // Удаление элемента
        // Является ли теперь текущей элемент последним? Если "да" - выход из цикла и функции
        if( cur->next == NULL )
        return;
    }
    cur = cur->next;    // Продвижение по списку
    } while( cur->next != NULL ) ;
return;
}

p.s. спасибо большое..

Добавлено через 3 часа 49 минут
up!

Добавлено через 10 часов 44 минуты
up!!

Добавлено через 4 часа 35 минут
up!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 15:42     Удалить из линейного списка элемент между двумя заданными
Посмотрите здесь:

Расстояние между двумя произвольно заданными на плоскости отрезками C++
Найти наименьший элемент односвязного линейного списка C++
Вычислить разницу в днях между двумя заданными датами C++
C++ Вывод всех чисел, находящихся между двумя заданными числами
Определить процедуру вычисления расстояния между двумя точками, заданными своими координатами C++
C++ Найти все пути шахматного коня между двумя заданными полями, не содержащие повторяющихся полей
C++ Функция вычисления расстояния между двумя заданными пунктами
C++ Удалить из односвязного линейного списка определенный узел

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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