Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
-13 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 13

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

21.02.2013, 15:42. Показов 1305. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2013, 15:42
Ответы с готовыми решениями:

Удалить символы расположенные между двумя заданными символами
Подскажите пожалуйста , какой нужно использовать код , что бы удалить в строке символы после определенного символа, и остановить удаление ,...

Clojure В каждом слове удалить литеру, стоящую между двумя заданными
В каждом слове удалить литеру, стоящую между двумя заданными.

Сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2
Как сравнить первый элемент линейного списка L1 со всеми элементами линейного списка L2

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2013, 15:42
Помогаю со студенческими работами здесь

Сумма элементов между двумя заданными ячейками
Найти сумму элементов между двумя заданными ячейками. Решить тоже нужно в паскале, с помощью массивов. Причем элементов в массиве должно...

Поиск квадрата числа между двумя заданными
Необходимо узнать существует ли натуральное число, являющееся квадратом другого числа, между двумя заданными целыми числами?

Генерация случайной даты между двумя заданными
Здравствуйте. Изначально есть две даты: int a = DateTimeToUnix(DateTimePicker1->Date); ...

Вычисление расстояния между двумя точками с заданными координатами
задача вычеслить расстояние между двумя точка с данными координатами ввожу все числа в клавы. допустим 2 4 5 6.он выводит ответ 3.а ответ...

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru