Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.11.2018
Сообщений: 9
1

Разработать программу для работы с однонаправленными связными списками, которая выполняет операции добавления элемента

02.01.2019, 21:10. Показов 675. Ответов 1

Здравствуйте!Помогите с решением задачи:

Разработать программу для работы с однонаправленными связными списками, которая выполняет операции добавления элемента в список, просмотр списка, удаление заданного элемента из списка.
Каждый элемент списка является структурой, указанной в индивидуальном задании и содержит ссылки на следующий элемент в списке. Поле указателя последнего узла содержит нулевое значение (указывает на NULL).

Структура с именем AEROFLOT, которая содержит следующие поля:
• NAZV - название пункта назначения;
• NUMR - номер самолета;
• TYPE - тип самолета;
• TIME - время отправления.
Очень прошу помочь , не могу разобраться в этом (
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.01.2019, 21:10
Ответы с готовыми решениями:

Разработать программу для работы с двунаправленным связными списками.
1 Разработать программы которые выполняют операции, указанные в индивидуальном задании. 2...

Составить описание класса для работы со связными списками
Составить описание класса для работы со связными списками с операциями включения в список, удаления...

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

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

1
1 / 1 / 0
Регистрация: 28.12.2018
Сообщений: 4
03.01.2019, 15:27 2
Mortifero1337, Связанный список это список в котором элемент списка имеет указатель на следующий за ним (если двунаправленный то и на предшествующий ему).
Набросал на скорую руку для представления что это такое и как работает. Копируйте, изучайте, дополняйте. Коментарии основных функций для связанных списков должны вам помочь.

[Не используйте этот код как основной. Он подлежит дополнению и обработке].
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
struct Node // класс узла списка
{
    Node* Next; // указатель на сл узел списка
 
    string NAZV;
    int NUMR;
    // и др свойства
 
};
 
class List // сам список
{
public:
    Node* Data; // всегда первый елемент списка
    Node* Current; // Элемент списка с которым работали последний раз. Полезное свойство.
    int Length;
 
    inline Node* GetLast()
    {
        while(Current->Next)
            Current = Current->Next;
        return Current;
    }
 
    // Получает элемент списка по указанному индексу
    inline Node* Get(int index)
    {
        if(!IsValidIndex(index))
            return nullptr;
 
        Current = Data;
        for(int i = 0; i < index; ++i)
            Next();
 
        return Current;
    }
 
    // Получает индекс указанного узла. таких функций следует избегать.
    inline int IndexOf(Node* node)
    {
        for(int i = 0; i < Length; ++i)
            if(Get(i) == node) return i;
    }
 
    // Проверяет является ли указанный индекс диапазоном списка
    inline bool IsValidIndex(int index)
    {
        return index < Length && index >= 0;
    }
 
    // Вталкивает елемент в список в указанную позицию
    Node* Insert(Node* node, int index)
    {
        if(node == Data) return Data; // Является ли узел началом текущего списка?
 
        Current = nullptr; // использование ячейки текущего узла в качестве временного хранения.
 
        if(index >= Length) index = Length; // удалить возможный пробел если index > length.
                                            // текущий узел по индексу отсутсвует.
        else
            Current = Get(index);  // запомнить текущий узел по индеку, при index < length.
 
        Node* Item = Get(index - 1); // получить предыдущий узел для установки связи.
 
        Item->Next = node; // указать узлу предшедствующего индекса что за ним следует новый.
        node->Next = Current; // указать узел следующий за новым. nullptr при index >= length.
 
        Length++;
        return Current = node;
    }
 
    // добавляет елемент в конец списка
    inline Node* Add(Node* node)
    {
        Insert(node, Length);
        return Current;
    }
 
    // удаляет элемент по указанной позиции
    bool RemoveAt(int index)
    {
        Node* Item = Get(index);
        if(!Item) return false;
 
        if(Item->Next)
            Get(index - 1)->Next = Item->Next;
 
        delete Item;
        Length--;
        return true;
    }
 
    // Объявление следующего узла как текущего. Равзнозна операции ++i;
    inline Node* Next()
    {
        return Current = Current->Next;
    }
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2019, 15:27

Реализация работы с двунаправленным связными списками
1. Разработать программы, обеспечивающие работу с двунаправленным связными списками. Каждый элемент...

List (Написать программу для работы со списком и реализовать следующие операции над списками)
Написать программу для работы со списком и реализовать следующие операции над списками: 1)...

Разработать на ассемблере и отладить программу, которая выполняет
Разработать на ассемблере и отладить программу, которая выполняет: 1) ввод с клавиатуры двух...

Разработать программу, которая для введенного символа арифметической операции ('+','-','/','*','%') печатает ее название
Разработать программу, которая для введенного символа арифметической операции...


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

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

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