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

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

17.12.2018, 13:10. Показов 934. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
Задать последовательность из неповторяющихся целых чисел а1, а2,...аn, где n>4. Получить последовательность,
содержащую элементы исходной последовательности с удаленными двумя наименьшими и двумя наибольшими элементами.
И нужно это представить в виде двусвязного списка. Дополнительно программа должна осуществлять операции добавления/удаления элемента (с клавиатуры), вывод исходного и результирующего списков на экран.

А проблема вот в чем: я не понимаю как реализовать этот список, не понимаю как должны совершаться операции через указатели.
Сначала я решила написать обычный код не в виде линейного списка. Собственно вот он:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "pch.h"
#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
using namespace std;
 
 
int main()
{
    int n;
    cout <<"Введите размерность массива: ";
    cin >> n;
    int* a = new int [n];//создаем динамический массив
    if (n > 4) 
    {
        for (int i = 0; i < n; i++) 
        {
            a[i] = rand() % 99;
            cout << a[i] << "|";
        }
        cout << endl;
        
    }
    else
    {
        return 0;
    }
    //сортируем по возрастанию
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (a[i] <= a[j])
            {
                swap(a[i], a[j]);
            }
        }
    }
    
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << "|";
    }
    cout << endl;
 
    int* a_without_max = new int[n - 2];
    //убираем два последних максимальных элемента
    for (int i=0; i < n - 2; i++) 
    {
        a_without_max[i] = a[i];
    }
    //выводим результат
    for (int i=0; i < n - 2; i++) 
    {
        cout << a_without_max[i] << "|";
    }
    cout << endl;
 
    //сортируем по убыванию
    for (int i = 0; i < n - 2; i++)
    {
        for (int j = i + 1; j < n - 2; j++)
        {
            if (a_without_max[i] <= a_without_max[j])
            {
                swap(a_without_max[i], a_without_max[j]);
            }
        }
    }
 
    for (int i = 0; i < n - 2; i++)
    {
        cout << a_without_max[i] << "|";
    }
    cout << endl;
    
    int* a_without_min = new int[n - 4];
    //убираем два последних минимальных элемента
    for (int i = 0; i < n - 4; i++)
    {
        a_without_min[i] = a_without_max[i];
    }
    //выводим результат
    for (int i = 0; i < n - 4; i++)
    {
        cout << a_without_min[i] << "|";
    }
    cout << endl;
    //снова сортируем по возрастанию
    for (int i = 0; i < n - 4; i++)
    {
        for (int j = 0; j < n - 4; j++)
        {
            if (a_without_min[i] <= a_without_min[j])
            {
                swap(a_without_min[i], a_without_min[j]);
            }
        }
    }
    //Выводим окончательный результат
    for (int i = 0; i < n - 4; i++)
    {
        cout << a_without_min[i] << "|";
    }
    cout << endl;
    
    //очищаем память
    delete[] a;
    delete[] a_without_max;
    delete[] a_without_min;
    _getch();
    return 0;
    
}
Единственное, что можно из всего этого выделить это алгоритм.

Типо, ввод значений ---> их сортировка ---> удаление двух последних элементов ---> удаление двух первых элементов

Начало возможно такое (поправьте, если это не так)

C++
1
2
3
4
5
6
struct DlinkedList
{
  int a;
  DlinkedList *next;//указатель на следующий элемент
  DlinkedList *prev;//указатель на предыдущий
};
Далее должны идти функции (поправьте, если это не так)
Допустим, примерно
C++
1
2
3
4
5
6
7
8
void addElem (???)
     ....
void sortElem (???)
    ....
void delFirstElem (???)
   ....
void delLastElem (???)
  ....
В общем-то, я не понимаю как работать с указателями. Допустим, как там будет проверяться условие n>4?и т.д.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2018, 13:10
Ответы с готовыми решениями:

Удаление элементов, кратных 5, из двусвязного списка
У меня есть функция рандомных елементов списка, и мне нужно удалить елементы кратные пяти, ну и вывести оставшиеся елементы. void...

Добавление и удаление элементов из двусвязного списка
Разбираю списки. Посмотрите код правильно ли я все понимаю?))) путаюсь с указателями. может можно проще чтото сделать? struct st { ...

Удаление элемента из двусвязного списка
Помогите пожалуйста найти где я ошибся. Элементы в список добавляются, вывод на экран тоже работает, но после удаления любого элемента:...

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

Удаление элемента из двусвязного списка
Доброго всем времени суток. Нужна помощь. Есть двусвязный список. Функции передаем какое то число(номер элемента) предыдущий...

Удаление структуры из двусвязного списка
Доброго времени суток! Пытаюсь создать функцию удаления из списка структуры, не выполняется цикл while в функции del() в чем я не прав? ...

Удаление из двусвязного циклического списка
Начал реализовывать структуру данных - Фибоначчиевы кучи. Столкнулся с проблемой при написании функции удаления минимального элемента....

Удаление элемента из двусвязного списка
Надо удалить элемент из двусвязного списка, если выполняется условие (2013-(current-&gt;god)&lt;3). Я пытаюсь как могу, но что то все равно...

Удаление элемента из двусвязного списка
Собственно, в коде все рабочее, кроме удаления. После ввода элемента выдает ошибку 0xC0000005. Где-то напутал с выделением памяти? ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru