Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
gulllak
44 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 66
#1

Добавление элемента в список - C++

29.05.2014, 01:58. Просмотров 1839. Ответов 0
Метки нет (Все метки)

Здравствуйте. Написал код в котором имеются функции добавления элемента в конец списка, вывод первого элемента в списке, удаление определенного элемента из списка и вывод всего списка.

В задании осталось добавить функцию Insert (x, p, L) - "добавление элемента x в позицию p в списке L." Вот собственно с этим не могу разобраться. Помогите пожалуйста!

Вот мой код:
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
#include <iostream>
using namespace std;
 
struct List
{
    double a;
    List *next;
};
 
List* Read(List *L)
{
    List *a = new List;
    a->next = NULL;
    cout << "Введите элемент: ";
    cin >> a->a;
    if (L == NULL)
    {
        L = a;
    }
    else
    {
        List *c = L;
        while (c->next != NULL) c = c->next;
        c->next = a;
    }
    return L;
}
 
void Printlist(List *L)
{
    while (L != NULL)
    {
        cout << L->a << " ";
        L = L->next;
    }
    cout << endl;
}
 
List* End(List *L)
{
    while (L != NULL)
    {
        L = L->next;
    }
    return L;
}
 
List* First(List *L)
{
    return L;
}
 
void Delete(int p, List *&L)
{
    List*& a = L;
    List* b = a->next;
    if (p == 1) {
        a = a->next;
        cout << "Элемент удален" << endl;
    }
    else{
 
        while (p>2)
        {
            p--;
            a = a->next;
            b = b->next;
            if (b == NULL) break;
        }
        if (b != NULL) {
            a->next = b->next;
            cout << "Элемент удален" << endl;
        }
        else cout << "Такой позиции нет" << endl;
    }
}
 
void menu(List *&L)
{
    int c;
    do
    {
        system("cls");
        cout << "Меню: " << endl;
        cout << "1-Ввести элемент" << endl << "2-Delete(p,L)" << endl << "3-First(L)" << endl;
        cout << "4-Printlist(L)" << endl;
        cout << "Введите команду: ";
        cin >> c;
        switch (c)
        {
        case 1:
            L = Read(L);
            break;
        case 2:
            int p;
            cout << "Введите p: ";
            cin >> p;
            Delete(p, L);
            break;
        case 3:
            if (First(L) != NULL) cout << First(L)->a << endl; else cout << "Список пуст" << endl;
            break;
        case 4:
            Printlist(L);
            break;
        }
        system("PAUSE");
    } while (c != 0);
}
int main()
{
    setlocale(LC_ALL, "Rus");
    List* list = NULL;
    menu(list);
    system("PAUSE");
    return 0;
}
Добавлено через 22 минуты
Все! Разобрался сам, вот код и в нем функция, если кому пригодится!

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
#include <iostream>
using namespace std;
 
struct List
{
    double a;
    List *next;
};
 
List* Read(List *L)
{
    List *a = new List;
    a->next = NULL;
    cout << "Введите элемент: ";
    cin >> a->a;
    if (L == NULL)
    {
        L = a;
    }
    else
    {
        List *c = L;
        while (c->next != NULL) c = c->next;
        c->next = a;
    }
    return L;
}
 
void Printlist(List *L)
{
    while (L != NULL)
    {
        cout << L->a << " ";
        L = L->next;
    }
    cout << endl;
}
 
List* End(List *L)
{
    while (L != NULL)
    {
        L = L->next;
    }
    return L;
}
 
List* First(List *L)
{
    return L;
}
 
void add(List *&top, int pos, int x)
{
    int j = 1;
    int i; List *pnew, *p = top;
    pnew = new List; pnew->a = x;
    if (pos <= 1 || top == NULL)
    {
        pnew->next = top; top = pnew;
    }
    else
    {
        for (i = 1; i<pos - 1; i++)
        if (p->next != NULL)
        {
            p = p->next;
            j++;
        }
        if (pos <= j + 1)
        {
            pnew->next = p->next; p->next = pnew;
        }
    }
}
 
void Delete(int p, List *&L)
{
    List*& a = L;
    List* b = a->next;
    if (p == 1) {
        a = a->next;
        cout << "Элемент удален" << endl;
    }
    else{
 
        while (p>2)
        {
            p--;
            a = a->next;
            b = b->next;
            if (b == NULL) break;
        }
        if (b != NULL) {
            a->next = b->next;
            cout << "Элемент удален" << endl;
        }
        else cout << "Такой позиции нет" << endl;
    }
}
 
void menu(List *&L)
{
    int c;
    do
    {
        system("cls");
        cout << "Меню: " << endl;
        cout << "1-Ввести элемент" << endl << "2-Delete(p,L)" << endl << "3-First(L)" << endl;
        cout << "4-Printlist(L)" << endl;
        cout << "5-Insert(x,p,L)" << endl;
        cout << "Введите команду: ";
        cin >> c;
        switch (c)
        {
        case 1:
            L = Read(L);
            break;
        case 2:
            int p;
            cout << "Введите p: ";
            cin >> p;
            Delete(p, L);
            break;
        case 3:
            if (First(L) != NULL) cout << First(L)->a << endl; else cout << "Список пуст" << endl;
            break;
        case 4:
            Printlist(L);
            break;
        case 5:
            int pos, x;
            cout << "Введите номер позиции для вставки: ";
            cin >> pos;
            cout << "Введиде значение элемента для вставки: ";
            cin >> x;
            add(L, pos, x);
        }
        system("PAUSE");
    } while (c != 0);
}
int main()
{
    setlocale(LC_ALL, "Rus");
    List* list = NULL;
    menu(list);
    system("PAUSE");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2014, 01:58     Добавление элемента в список
Посмотрите здесь:

Добавление элемента в список - C++
У меня есть список, пока в нем функции вывода данных print, добавление add и вывод первого Begin() и последнего End() элементов. struct...

Добавление элемента в список - C++
Spis2* put(Spis2 *current, int info) { Spis2 *temp = new Spis2; temp-&gt;info = info; temp-&gt;next = current; temp-&gt;prev = NULL; ...

Не работает добавление элемента в список - C++
#include &lt;iostream&gt; using namespace std; class mas { public: int data; mas* next; mas* prev; }; class List

Добавление нового элемента в список - C++
Добавить новый элемент в список после максимального ключа. У меня возникла проблема. Я не могу сдвинуть элемент. Например задаю 23 29...

Добавление элемента в двусвязный список - C++
Здравствуйте, нужно вставить элемент в двусвязный список Написала код, но он не работает. tek=first; while(tek) {i++; ...

Добавление элемента в список по номеру - C++
Помогите, пожалуйста, разобраться, как определить номера элементов односвязного кольцевого списка. Это мне надо, чтобы сделать функцию...

Добавление в список нового элемента - C++
Всем доброе время суток. Мне нужна помощь, есть задание: нужно добавить в список новый элемент, после элемента, совпадающего с ключем x,...

Добавление элемента в список с проверкой уникальности - C++
Всем привет! И сразу же к сути - не могу разобраться с добавлением элемента в список, но так что бы он не повторялся и был на своему мести,...

Некорректное добавление элемента в двусвязный список - C++
Добрый день! Потихоньку начал разбираться с двусвязным списком. Пока что реализовал только пару функций: добавление элемента списка и вывод...

Оптимизировать добавление элемента в линейный список - C++
Функция void add_pered() добавляет перед элементов номер 5 нужный нам элемент. Как можно оптимизировать работу программы? Она работает, но...

Добавление элемента в линейный список после 1-го, 3-го, 5-го и т.д - C++
Помогите пожалуйста, нужно написать функцию добавления в линейный список заданного элемента после 1-го, 3-го, 5-го и т.д.

Односвязный список, добавление элемента вслед указанному - C++
Создаю список, вывожу его, затем нужно по введенному элементу x найти такой же в списке и после него вставить новый элемент, введенный с...


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

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

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