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

Удаление элемента в списке - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Циклические алгоритмы, найти сумму ряда http://www.cyberforum.ru/cpp-beginners/thread1191698.html
добрый день всем форумчанам. задали задание написать программу на с++. пожалуйста, помогите.
C++ Задача "Заправочная станция" На заправочной станции для каждого автомата известно количество топлива каждого вида (А76, А93, А95, ДТ) и количество обслуженных машин в каждый из дней недели. Вычислите общий объем топлива, проданный в указанный период недели. В какой день недели было обслужено больше всего машин? Из какого автомата было продано наибольшее количество топлива? Какой вид топлива пользуется наибольшим спросом?... http://www.cyberforum.ru/cpp-beginners/thread1191694.html
C++ Превращение заданного связного графа в несвязный
Найти минимальное (по количеству ребер) подмножество ребер, удаление которых превращает заданный связный граф в несвязный. Проверка_на_связность(N) { for(каждая вершина ) Mark=белый; Mark=серый; в_очередь(q,0); while(очередь не пуста) {
C++ Fscanf как сделать чтобы он считывал не первый символ, а последующие в каждой строке?
fscanf как сделать чтобы он считывал не первый символ, а последующие в каждой строке?
C++ Структура "Рабочий". Сортировка http://www.cyberforum.ru/cpp-beginners/thread1191682.html
Описать структуру с именем WORKER, содержащую следующие поля: • фамилия и инициалы работника; • название занимаемой должности; • год поступления на работу. сортировка по году поступления на работу #include<iostream>
C++ Проверка на точку в строке Здравствуйте! Подскажите, водятся числа, проверяется на числа, а также надо разрешить чтоб была точка, только не в начале!!! вот моя проверка сейчас for (int i3=0;i3<strlen(val3);i3++) { if (val3<'0' || val3>'9') { valid3=0; break; } valid3=1; подробнее

Показать сообщение отдельно
Aecttann
 Аватар для Aecttann
6 / 6 / 0
Регистрация: 19.10.2013
Сообщений: 265
28.05.2014, 21:36     Удаление элемента в списке
Необходимо реализовать метод удаления элемента из списка не после определённого элемента (как сделано в коде), а по индексу этого элемента


главная:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include "Untitled.h"
 
 
int main()
{
    setlocale(LC_ALL, "RUS");
    List l;
    Node *N1=l.create(1);
 
    Node *N2=l.ins(20,N1);
 
    Node *N4=l.ins(32,N2);
 
    Node *N3=l.ins(5,N2);
    Node *N5=l.ins(10,N4);
    l.print();
 
    cout << endl;
 
    l.remove(N1);
    l.print();
 
    l.clear();
    l.print();
 
 
    cout << " - " << l.empty() << ";" << endl << "Количество элементов - " << l.size() <<";" << endl;
 
 
    return 0;}


вот здесь вызывается функция удаления элемента после N1:
C++
1
l.remove(N1);
хедер:
Кликните здесь для просмотра всего текста
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
#ifndef LIST_H
#define LIST_H
 
#include <iostream>
 
using namespace std;
 
class Node
{
public:
    double data;
    Node *next;
    int index;
 
Node()
{
    data = 0;
    next = 0;
}
Node(double &data, Node *next = 0)
    {
        this->data = data;
        this->next = next;
    }
};
 
class List
    {
        Node* head;
        int nodes;
 
public:
List()
{
    head = 0;
    nodes = 0;
}
 
int size()
{
    return nodes;
}
 
bool empty()
{
    return nodes == 0;
}
Node *create(double value)
{
    head = new Node(value);
    nodes++;
    reindex();
    return head;
}
 
Node *ins(double value, Node *where)
{
    Node *insNode;
    insNode = new Node(value);
    insNode->next = where->next;
    where->next = insNode;
    nodes++;
    reindex();
    return insNode;
}
 
void reindex()
{
    if (nodes == 0)
    return;
    else
{
    Node *pNode = head;
    for (int i = 1; i < nodes; ++i)
{
    pNode->index = i;
    pNode = pNode->next;
}
}
}
 
void removebyindex()
{
        
}
 
void remove(Node *where)
{
    if (nodes>1 && where->next != 0)
{
    Node *temp = new Node;
    temp = where->next;
    where->next = where->next->next;
    delete temp;
    nodes--;
    reindex();
}
}
 
void clear()
{
        if (nodes == 0)
    cout << "deleted";
    Node *pNode = head;
    while (pNode->next != 0 && nodes != 1)
{
    remove(pNode);
}
//delete pNode;
    delete head;
 
    nodes--;
}
 
void print()
{
    if (nodes == 0)
    cout << endl << "Список пуст";
    else
{
    Node *pNode = head;
    for (int i = 1; i < nodes; ++i)
{
    cout << "Индекс = " << pNode->index << " Данные = " << pNode->data << " Следующий = " << pNode->next << endl;
    pNode = pNode->next;
}
}
}
 
};
 
#endif


функция удаления: (87-98 строки в хедере)
C++
1
2
3
4
5
6
7
8
9
10
11
12
void remove(Node *where)
{
    if (nodes>1 && where->next != 0)
{
    Node *temp = new Node;
    temp = where->next;
    where->next = where->next->next;
    delete temp;
    nodes--;
    reindex();
}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru