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

Функция добавления элемента в односвязный список в указанную позицию

12.12.2016, 09:22. Показов 1885. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста написать функцию добавления элемента в односвязный список в указанную позицию.Не могу сообразить как дальше писать.Заранее благодарен!
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
struct A
{
    int key;
};
 
struct List
{
    int Data;
    A elem;
    List* next;
 
};
 
 
 
void Print(List*begin)
{
    if (begin != NULL)
    {
        cout << begin->Data << "\t";
        Print(begin->next);
    }
    else cout<<"\n";
}
 
void Init(List** begin)
{
    *begin = new List;
 
    A elem[5] = { 1,20,35,44,55 };
 
    (*begin)->elem.key = 11;
    (*begin)->next = NULL;
 
    List* end = *begin;
 
    for (int i(0); i < 5; i++)
    {
        end->next = new List;
        end = end->next;
        end->elem = elem[i];
        end->next = NULL;
    }
}
 
/*void Insert(List**begin, A &a)//это функция добавления элемента заданного заранее в сортированном списке,может
{                                             //пригодится для идеи вам
    List*ins = new List;
    ins->elem = a;
 
    if (*begin == NULL)
    {
        ins->next = NULL;
        *begin = ins;
        return;
    }
 
    List*first = *begin;
 
    if (first->elem.key > ins->elem.key)
    {
        ins->next = first;
        *begin = ins;
        return;
    }
 
    List*end = first->next;
 
    while (end)
    {
        if (first->elem.key < ins->elem.key && ins->elem.key <= end->elem.key)
        {
            first->next = ins;
            ins->next = end;
            return;
        }
 
        first = end;
        end = end->next;
    }
 
    first->next = ins;
    ins->next = NULL;
}*/
 
 
 
 
void Delete(List**begin, const A&a)
{
    if (*begin == NULL)
    {
        return;
    }
 
    List*first = *begin;
    if (first->elem.key == a.key)
    {
        *begin = first->next;
        delete first;
        return;
    }
 
    List*end = first->next;
 
    while (end)
    {
        if (end->elem.key == a.key)
        {
            first->next = end->next;
            delete end;
            return;
        }
        first = end;
        end = end->next;
    }
}
 
void Free(List**begin)
{
    if (*begin == 0)return;
    List*p = *begin;
    List*first;
 
    while (p)
    {
        first = p;
        p = p->next;
        delete first;
    }
    *begin = NULL;
}
 
void Check(List** begin)
{
    if (*begin == NULL)
    {
        cout << "Список пустой!";
    }
    else cout << "Список не пустой!";
}
 
void Init1(int n, List**begin)
{
    if (n > 0)
    {
        (*begin) = new List();
        cout << "Введите значение: ";
        cin >> (*begin)->Data;
        (*begin)->next = NULL;
        Init1(n - 1, &((*begin)->next));
    }
}
 
int main()
{
    int n;
    setlocale(LC_ALL, "Russian"); 
 
    List* begin=NULL;
    A  b = { 20 };
    
    cout << "Введите размер n: ";
    cin >> n;
    
    Init1(n,&begin);
    Print(begin);
    cout << "Введите вставляемое число: ";
 
    //Insert(&begin, a);
    Print(begin);
    //Delete(&begin, b);
    Print(begin);
    Free(&begin);
    Print(begin);
    Check(&begin);
    _getch();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.12.2016, 09:22
Ответы с готовыми решениями:

Односвязный список: функция добавления записи не работает
Вообщем написал функцию для добавления записи в конец, все работает без ошибок, но когда просматриваю список функцией для просмотра, пишет,...

Объясните как работает функция добавления в односвязный список
Программа полностью рабочая. Я просто не могу понять 1 момент в функции показанной ниже. часть файла .h struct film { wchar_t...

Добавления нового элемента в односвязный список каждый раз слева от последнего
Добрый день. Помогите разобраться. Как переделать метод Insert_Element() чтобы добавлять новый элемент не справа а слева? ...

14
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 10:01
Skier97, тут правильно написал
Цитата Сообщение от Skier97 Посмотреть сообщение
List*ins = new List;
* * ins->elem = a;
if (*begin == NULL)
* * {
* * * * ins->next = NULL;
* * * * *begin = ins;
* * * * return;
* * }
теперь сделай else, если у нас есть begin, то иди до нужного тебе элемента в цикле temp = temp->next, или пока не встретишь temp = NULL, там сам реши, надо записывать или просто сказать пользователю, что в списке все го 3 элемента, поэтому не могу поставить ваш элемент пятым. И если нашел нужный, то вставляй. Только остановись раньше за один элемент, чтобы в его next присвоить свой
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 13:10  [ТС]
А ведь можно сделать вставку после значения введённого пользователем?
Например,
Введите вставляемый элемент-...
Введите элемент, после которого сделать вставку-...
Как это сделать?

Добавлено через 1 минуту
А ведь можно сделать вставку после значения введённого пользователем?
Например,
Введите вставляемый элемент-...
Введите элемент, после которого сделать вставку-...
Как это сделать?
0
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 13:16
Skier97, как написано выше, просто цикл идет не по счетчику, а пока не встретишь нужный элемент
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 13:19  [ТС]
А как саму вставку сделать? Также как у меня в функции которая закоментирована или как?
0
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 13:57
Skier97, делаешь поиск, потом
temp = элемент_после_которого_вставляешь->next;
элемент_после_которого_вставляешь->next = вставляемый_элемент;
вставляемый_элемент->next = temp;
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 13:59  [ТС]
Спасибо!
Ещё вопрос
Мне нужно сделать функцию поиска элемента
Как это сделать?
0
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 14:11
Skier97, делаешь функцию, в нее посылаешь head, и потом ищешь в цикле
C++
1
2
3
if (temp->key == чему-то)
    return temp;
temp = temp->next;
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 14:13  [ТС]
Так я так понимаю нужно вернуть индекс элемента
Или это невозможно?
0
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 14:30
Цитата Сообщение от Songpool Посмотреть сообщение
return temp;
это указатель на элемент, тебе же нужен элемент что бы записать в его next и из его next записать в свой
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 14:41  [ТС]
Так а выводить temp тогда чтоли?
0
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 14:52
Skier97, почему temp, вводить key или data, что там у тебя по логике, например data это количество памяти, тогда вводишь 256 и после этого бежишь по списку пока if (temp->data == 256), и все в том же духе
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 15:02  [ТС]
Так, насчёт ввода я понял, но значение он возвращать должен все таки
Или я что то не понимаю
0
53 / 42 / 31
Регистрация: 24.11.2016
Сообщений: 140
12.12.2016, 15:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List *search(List *head, int  data)
{
    List *temp = head;
    while(temp) {
         if (temp->data == data)
             return temp;
         temp = temp->next;
    }
    return temp;
}
 
int main()
{
...
   List *elem = search(head, data);
...
}
0
1 / 1 / 0
Регистрация: 11.11.2016
Сообщений: 104
12.12.2016, 15:09  [ТС]
Понял, спасибо!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.12.2016, 15:09
Помогаю со студенческими работами здесь

Функция добавления элемента в кольцевой список
Здравствуйте. Возник такой вопрос. Как собственно реализовать добавление лемента в кольцевой список? В теории оно то понятно но на практике...

Функция добавления элемента в список внутри класса
Доброго времени суток. Зашел в &quot;творческий&quot; кризис. Задание поставлено следующим образом: Создать интерфейс IPerson и два...

Написать предикат insertBeforeLast для добавления элемента в позицию предпоследнего элемента
Написать предикат insertBeforeLast для добавления элемента в позицию предпоследнего элемента. Буду очень признателен за помощь. ...

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru