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

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

Войти
Регистрация
Восстановить пароль
 
Spb1337
-13 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 13
#1

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

21.02.2013, 15:42. Просмотров 400. Ответов 0
Метки нет (Все метки)

В общем написаны две функции, которые удаляют элемент "до найденного, и "после... их как-то красиво соединить надо, помогите пожалуйста..

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

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!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2013, 15:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из линейного списка элемент между двумя заданными (C++):

Расстояние между двумя заданными множествами точек на плоскости - C++
Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих множеств. Найти расстояние...

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

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

Расстояние между двумя произвольно заданными на плоскости отрезками - C++
Ребят, подскажите как найти расстояние между двумя произвольно заданными на плоскости отрезками (данную задачу мне нужно написать в С,...

Вычислить расстояние между двумя точками с заданными координатами - C++
Вычислить расстояние между двумя точками с заданными координатами:A(a,d),B(u,m).

Функция удаления символов заключенных между двумя заданными символами - C++
Составить программу обработки массива символов с помощью указателей, которая вводит текст из произвольного количества строк, а затем...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2013, 15:42
Привет! Вот еще темы с ответами:

Вычисление расстояния между двумя точками, заданными на плоскости их координатами - C++
Составить программу вычисления расстояния между двумя точками, заданными на плоскости их координатами.

Вывод всех чисел, находящихся между двумя заданными числами - C++
Задание: напишите программу, которая запрашивает у пользователя два числа и выводит на стандартное устройство ввода все числа, которые...

Найти кратчайшие пути между двумя заданными точками графа - C++
Добрый вечер. Кто сможет написать программу для задачи, буду очень признателен 4) Найти кратчайшие пути из точки D1 в точку D8 Вот...

Определить процедуру вычисления расстояния между двумя точками, заданными своими координатами - C++
помогите пожалуйста написать программы в с++ Даны действительные числа х1, у1, х2, у2, …,х10, у10. Найти периметр десятиугольника,...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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