С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616
1

Функции для односвязного списка

27.03.2021, 10:06. Показов 1500. Ответов 8

Author24 — интернет-сервис помощи студентам
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
#include <iostream>
#include <string>
using namespace std;
const int maxSize = 100;
struct Travelers
{
    int ticket_code;
    char lastname[maxSize];
    int numberofthings;
    int luggage_weight;
    Travelers* Next;
};
Travelers* Head;
 
void TravelersInput(int& ticket_code,char lastname[maxSize], int& numbeofthings,int& luggage_weight)
{
    cout << "Enter tour ticket code" << endl;;
    cin >> ticket_code;
    cout << "Enter your Lastname:" << endl;
    cin.get();
    cin.get(lastname, sizeof(lastname));
    cout << "Enter number of things:" << endl;
    cin >> numbeofthings;
    cout << "Enter your luggage weight:"<<endl;
    cin >> luggage_weight;
    cout << endl;
}
 
void PrintTravelers(Travelers* Head)
{
    Travelers* j = Head;
    while (j != NULL);
    {
        cout << "Travelers: " << j->ticket_code<< ";" << j->lastname<< ";" << j->numberofthings<< ";" << j->luggage_weight<< ";";
        j = j->Next;
    }
    cout << endl;
}
 
Travelers* TravelersSearch(Travelers* Head, int numberofthings)
{
    Travelers* p = Head; 
    while (p != NULL) 
    {
        if (p->numberofthings == numberofthings) 
            break; 
        p = p->Next;
    }
    return p;
}
 
 
void DeleteTravelers(Travelers*& pbeg, Travelers* pos)
{
    if (pbeg == NULL || pos == NULL)
        return; 
    if (pos == pbeg)
    {
        pbeg = pbeg->Next;
        delete pos;
    }
    else
    {
        Travelers* prev = pbeg;
        while (prev != NULL && prev->Next != pos)
            prev = prev->Next;
        if (prev != NULL)
        {
            prev->Next = pos->Next;
            delete pos;
        }
    }
}
 
void Travelers(Travelers*& pbeg)
{
    Travelers* p;
    while (pbeg != NULL)
    {
        p = pbeg;
        pbeg = pbeg->Next;
        delete p;
    }
}
 
int main()
{
    int ticket_code;
    char lastname[maxSize]= { '\0' };
    int numberofthings;
    int luggage_weight;
 
    Travelers* Head = nullptr;
    int n;
 
    cout << "Number of Travelers = ";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        TravelersInput(ticket_code, lastname, numberofthings, luggage_weight);
    }
 
    cout << " deleted Travelers = ";
    cin >> luggage_weight;
    DeleteTravelers(Head, TravelersSearch(Head, luggage_weight)); // ЗДЕСЬ ОШИБКА
    PrintTravelers(Head);
 
    FreeTravelers(Head);
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.03.2021, 10:06
Ответы с готовыми решениями:

Шаблон для односвязного списка
Помогите разобраться с шаблонами, выводятся ошибки, ничего не получается.. //List.h #include...

Деструктор для односвязного списка
Суть проблемы: Не удаляется основание односвязного списка (head). Вызываю деструктор, происходит ...

Оператор + для односвязного списка
Здравствуйте. Не могу понять, как написать оператор + для односвязного списка. Он должен соединять...

Шаблон для односвязного списка
Доброго времени суток! Проблема - пишу шаблон для односвязного списка На приведенном фрагменте...

8
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,884
Записей в блоге: 1
27.03.2021, 10:28 2
Цитата Сообщение от Andriyipz Посмотреть сообщение
// ЗДЕСЬ ОШИБКА
лог ошибки нужно скопировать
0
Любитель чаепитий
3744 / 1800 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
27.03.2021, 10:32 3
Цитата Сообщение от Andriyipz Посмотреть сообщение
struct Travelers
Цитата Сообщение от Andriyipz Посмотреть сообщение
void Travelers(Travelers*& pbeg)
у вас функция и структура одинаково называются.
0
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616
27.03.2021, 13:53  [ТС] 4
можете сказать чего не выводит эту структуру?
0
Модератор
Эксперт С++
13723 / 10920 / 6478
Регистрация: 18.12.2011
Сообщений: 29,151
27.03.2021, 14:15 5
75 строка
Цитата Сообщение от Andriyipz Посмотреть сообщение
void Travelers(Travelers*& pbeg)
C++
1
void FreeTravelers(Travelers*& pbeg)
32 строка
Цитата Сообщение от Andriyipz Посмотреть сообщение
while (j != NULL);
уберите точку с запятой.


строка 100
Цитата Сообщение от Andriyipz Посмотреть сообщение
TravelersInput(ticket_code, lastname, numberofthings, luggage_weight);
здесь данные вводятся в переменные - параметры функции ticket_code, lastname, numberofthings, luggage_weight

Где они потом записываются в список? А нигде!
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
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
//#include <string>
using namespace std;
const int maxSize = 100;
struct Travelers
{
    int ticket_code;
    char lastname[maxSize];
    int numberofthings;
    int luggage_weight;
    Travelers* Next;
    Travelers():ticket_code(0),numberofthings(0),luggage_weight(0)
    { 
        lastname[0]='\0'; 
        Next = NULL;
    }
};
Travelers* Head=NULL;
 
void TravelersInput(Travelers* p)
{
    cout << "Enter tour ticket code" << endl;;
    cin >> p->ticket_code;
    cin.get();
    cout << "Enter your Lastname:" << endl;
    cin.getline(p->lastname, maxSize);
    cout << "Enter number of things:" << endl;
    cin >> p->numberofthings;
    cout << "Enter your luggage weight:"<<endl;
    cin >> p->luggage_weight;
    cin.get();
    cout << endl;
}
void InsertTravelers(Travelers* p)
{
    p->Next=Head;
    Head=p;
}
void PrintTravelers()
{
    Travelers* j = Head;
    while (j != NULL)
    {
        cout << "Travelers: " << j->ticket_code<< ";" << j->lastname<< ";" << j->numberofthings<< ";" << j->luggage_weight<< ";";
        cout << endl;
        j = j->Next;
    }
    cout << endl;
}
 
Travelers* TravelersSearch(int numberofthings)
{
    Travelers* p = Head; 
    while (p != NULL) 
    {
        if (p->numberofthings == numberofthings) 
            break; 
        p = p->Next;
    }
    return p;
}
 
 
void DeleteTravelers( Travelers* pos)
{
    Travelers* pbeg=Head;
    if (pbeg == NULL || pos == NULL)
        return; 
    if (pos == pbeg)
    {
        pbeg = pbeg->Next;
        delete pos;
    }
    else
    {
        Travelers* prev = pbeg;
        while (prev != NULL && prev->Next != pos)
            prev = prev->Next;
        if (prev != NULL)
        {
            prev->Next = pos->Next;
            delete pos;
        }
    }
}
 
void FreeTravelers()
{
    Travelers* pbeg=Head;
    Travelers* p;
    while (pbeg != NULL)
    {
        p = pbeg;
        pbeg = pbeg->Next;
        delete p;
    }
    Head=NULL;
}
 
int main()
{
    //int ticket_code;
    //char lastname[maxSize]= { '\0' };
    //int numberofthings;
 
    //Travelers* Head = NULL;
    int n;
 
    cout << "Number of Travelers = ";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        Travelers* t=new Travelers;
        TravelersInput(t);
        InsertTravelers(t);
    }
 
    cout << " deleted Travelers = ";
    int luggage_weight;
    cin >> luggage_weight;
    DeleteTravelers(TravelersSearch(luggage_weight)); 
    PrintTravelers();
 
    FreeTravelers();
 
    system("pause");
    return 0;
}
p.s. Специально не стал исправлять строку
DeleteTravelers(TravelersSearch(luggage_weight));
в надежде, что Вы понимаете, что так можно удалить только одну запись.
0
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616
27.03.2021, 14:29  [ТС] 6
Операция вставки - вставляет элемент в конкретную позицию в списке,
перемещая элементы от этой позиции и дальше в следующую, более высокую позицию.
Операция локализации - возвращает позицию объекта в списке. Если в списке
объект встречается несколько раз, то возвращается позиция первого от начала
список объекта. Если объекта нет в списке, то возвращается значение, равное
длине списка, увеличенное на единицу.
Операция выборки элемента списка - возвращает элемент, который находится в
конкретной позиции списка. Результат не определен, если в списке нет такой
позиции.
Операция удаления - изымает элемент в конкретной позиции из списка.
Результат не определен, если в списке нет указанной позиции.
Операции выборки предыдущего и последующего элемента - возвращают
соответственно следующей и предыдущей элемент списка отношении конкретного займу в
списка.
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
#include <iostream>
#include <string>
using namespace std;
const int maxSize = 100;
struct Travelers
{
    int ticket_code;
    char lastname[maxSize];
    int numberofthings;
    int luggage_weight;
    Travelers* Next;
};
Travelers* Head;
 
void TravelersInput(int& ticket_code,char lastname[maxSize], int& numbeofthings,int& luggage_weight)
{
    cout << "Enter tour ticket code" << endl;;
    cin >> ticket_code;
    cout << "Enter your Lastname:" << endl;
    cin.get();
    cin.get(lastname, sizeof(lastname[maxSize]));
    cout << "Enter number of things:" << endl;
    cin >> numbeofthings;
    cout << "Enter your luggage weight:"<<endl;
    cin >> luggage_weight;
    cout << endl;
}
 
void PrintTravelers(Travelers* Head)
{
    Travelers* j = Head;
    while (j != NULL)
    {
        cout << "Travelers: " << j->ticket_code<< ";" << j->lastname<< ";" << j->numberofthings<< ";" << j->luggage_weight<< ";";
        j = j->Next;
    }
    cout << endl;
}
 
Travelers* TravelersSearch(Travelers* Head, int numberofthings)
{
    Travelers* p = Head; 
    while (p != NULL) 
    {
        if (p->numberofthings == numberofthings) 
            break; 
        p = p->Next;
    }
    return p;
}
 
 
void DeleteTravelers(Travelers*& pbeg, Travelers* pos)
{
    if (pbeg == NULL || pos == NULL)
        return; 
    if (pos == pbeg)
    {
        pbeg = pbeg->Next;
        delete pos;
    }
    else
    {
        Travelers* prev = pbeg;
        while (prev != NULL && prev->Next != pos)
            prev = prev->Next;
        if (prev != NULL)
        {
            prev->Next = pos->Next;
            delete pos;
        }
    }
}
 
void FreeTravelers(Travelers*& pbeg)
{
    Travelers* p;
    while (pbeg != NULL)
    {
        p = pbeg;
        pbeg = pbeg->Next;
        delete p;
    }
}
 
int main()
{
    int ticket_code;
    char lastname[maxSize]= { '\0' };
    int numberofthings;
    int luggage_weight;
 
    Travelers* Head = nullptr;
    int n;
 
    cout << "Number of Travelers = ";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        TravelersInput(ticket_code, lastname, numberofthings, luggage_weight);
    }
 
    cout << " deleted Travelers = ";
    cin >> luggage_weight;
    DeleteTravelers(Head, TravelersSearch(Head, luggage_weight));
    PrintTravelers(Head);
 
    FreeTravelers(Head);
 
    system("pause");
    return 0;
}
Добавлено через 3 часа 41 минуту
Сделал 1,3,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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <string>
using namespace std;
struct Travelers
{
    int ticket_code;
    string lastname;
    int numberofthings;
    int luggage_weight;
    Travelers* Next;
};
Travelers* Head;
 
void TravelersInput(int& ticket_code,string lastname, int& numbeofthings,int& luggage_weight)
{
    cout << "Enter tour ticket code" << endl;;
    cin >> ticket_code;
    cout << "Enter your Lastname:" << endl;
    cin.get();
    getline(cin, lastname);
    cout << "Enter number of things:" << endl;
    cin >> numbeofthings;
    cout << "Enter your luggage weight:"<<endl;
    cin >> luggage_weight;
    cout << endl;
}
 
void PrintTravelers(Travelers* Head)
{
    Travelers* j = Head;
    while (j != NULL)
    {
        cout << "Travelers: " << j->ticket_code<< ";" << j->lastname<< ";" << j->numberofthings<< ";" << j->luggage_weight<< ";";
        j = j->Next;
    }
    cout << endl;
}
void Insert_Element(Travelers** Next, int Number, int Item)
{
    Number--;
    Travelers* NewItem = new Travelers;
    NewItem->Data = Item;
    NewItem->Next = NULL;
    if ((*Next) == NULL)
    {
        (*Next) = NewItem;
    }
    else {
        Travelers* Current = (*Head);
        for (int i = 1; i < Number && Current->Next != NULL; i++)
            Current = Current->Next;
        if (Number == 0) {
                Add_Element_0(&(*Next), Item);
        }
        else {
            if (Current->Next != NULL)
                NewItem->Next = Current->Next;
            Current->Next = NewItem;
        }
    }
}
Travelers* TravelersSearch(Travelers* Head, int numberofthings)
{
    Travelers* p = Head; 
    while (p != NULL) 
    {
        if (p->numberofthings == numberofthings) 
            break; 
        p = p->Next;
    }
    return p;
}
 
 
void DeleteTravelers(Travelers*& pbeg, Travelers* pos)
{
    if (pbeg == NULL || pos == NULL)
        return; 
    if (pos == pbeg)
    {
        pbeg = pbeg->Next;
        delete pos;
    }
    else
    {
        Travelers* prev = pbeg;
        while (prev != NULL && prev->Next != pos)
            prev = prev->Next;
        if (prev != NULL)
        {
            prev->Next = pos->Next;
            delete pos;
        }
    }
}
 
void FreeTravelers(Travelers*& pbeg)
{
    Travelers* p;
    while (pbeg != NULL)
    {
        p = pbeg;
        pbeg = pbeg->Next;
        delete p;
    }
}
 
int main()
{
    int ticket_code;
    string lastname;
    int numberofthings;
    int luggage_weight;
 
    Travelers* Head = nullptr;
    int n;
 
    cout << "Number of Travelers = ";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        TravelersInput(ticket_code, lastname, numberofthings, luggage_weight);
    }
 
    cout << " deleted Travelers = ";
    cin >> luggage_weight;
    PrintTravelers(Head);
    DeleteTravelers(Head, TravelersSearch(Head, luggage_weight));
    FreeTravelers(Head);
 
    system("pause");
    return 0;
}
0
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616
27.03.2021, 14:54  [ТС] 7
а как тогда удалить больше?
0
Модератор
Эксперт С++
13723 / 10920 / 6478
Регистрация: 18.12.2011
Сообщений: 29,151
27.03.2021, 14:57 8
Цитата Сообщение от Andriyipz Посмотреть сообщение
а как тогда удалить больше?
Удаляйте внутри поиска, сразу после того, как найдете.
0
0 / 1 / 0
Регистрация: 01.11.2020
Сообщений: 616
27.03.2021, 15:00  [ТС] 9
вы не знаете как сделать эти функции?
-Операция вставки - вставляет элемент в конкретную позицию в списке, перемещая элементы от этой позиции и дальше в следующую, более высокую позицию.

-Операция локализации - возвращает позицию объекта в списке. Если в списке объект встречается несколько раз, то возвращается позиция первого от начала список объекта. Если объекта нет в списке, то возвращается значение, равное длине списка, увеличенное на единицу.

-Операция выборки элемента списка - возвращает элемент, который находится в конкретной позиции списка. Результат не определен, если в списке нет такой позиции.

-Операция удаления - изымает элемент в конкретной позиции из списка. Результат не определен, если в списке нет указанной позиции.

-Операции выборки предыдущего и последующего элемента - возвращают соответственно следующей и предыдущей элемент списка отношении конкретного займу в списка
0
27.03.2021, 15:00
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2021, 15:00
Помогаю со студенческими работами здесь

Копирующий конструктор для односвязного списка
Здарова ребята.Написал свой класс односвязного списка, осталась только дописать копирующий...

Конструктор копирования для односвязного списка
Запутался уже, подскажите пожалуйста что я делаю не так в конструкторе копирования. файл list.h...

Шаблон для узла односвязного списка
Есть узел typedef struct Var { String varname; int value; struct Var *next; }...

Не работает сортировка для односвязного списка
Код следующий: #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;stdlib.h&gt; #include &lt;algorithm&gt;...

Деструктор для элемента односвязного списка
Правильно ли написан деструктор для элемента односвязного списка? #include &lt;iostream&gt;...

Сортировку односвязного списка переделать для двусвязного
Здравствуйте! Есть проблема в реализации сортировки под двусвязный список. Есть рабочая...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru