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

Функция удаления элементов (список, стек) - C++

Восстановить пароль Регистрация
 
naa17
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 47
17.05.2014, 18:33     Функция удаления элементов (список, стек) #1
Подскажите, имеется функция добавления элементов (список, стек)

Нужно на её основе сделать функцию удаления элемента. Что-то запутался, подскажите как сделать верно.

Добавление:

C++
1
2
3
4
5
6
7
void linklist::additem(int d) // добавление элемента
{
    link* newlink = new link;      // выделяем память
    newlink->data = d;             // запоминаем данные
    newlink->next = first;         // запоминаем значение first
    first = newlink;               // first теперь указывает на новый элемент
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2014, 18:33     Функция удаления элементов (список, стек)
Посмотрите здесь:

C++ двусвязный список - функция удаления
Стек: функция удаления и переприсвоение массива(Builder 6) C++
C++ 3 класса: список, стек(как список), очередь(как список)
C++ Сформировать динамический список (стек или очередь), считая, что длина списка (количество элементов) задана
C++ функция удаления и добавления элементов. что не так с програмой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
17.05.2014, 19:10     Функция удаления элементов (список, стек) #2
C++
1
2
3
4
5
6
7
8
int linklist::pop()
{
    link* remlink = first;
    int data = first->data;
    first = first->next;
    delete remlink;
    return data;
}
naa17
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 47
17.05.2014, 19:29  [ТС]     Функция удаления элементов (список, стек) #3
удаляет, но получается, что удаляет первый элемент. А если надо не первый элемент а конкретный элемент как это сделать? то есть не по индексу элемента, а по самому значению

Добавлено через 1 минуту
получается

C++
1
2
3
4
5
6
void linklist::delitem(int f) // удаление элемента
{
    link* remlink = first;
    first = first->next;
    delete remlink;
}
а дальше

C++
1
2
3
4
5
6
7
8
9
void Graph::deledge(int x, int y)
{
    if (adj[x].e == true && adj[y].e == true && adj[x].exist(y) == true && adj[y].exist(x) == true && (x != y))
    {
        adj[x].delitem(y);
        adj[y].delitem(x);
    }
    else cout << "Ошибка удаления вершины" << endl;
}
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
17.05.2014, 19:35     Функция удаления элементов (список, стек) #4
удаляет, но получается, что удаляет первый элемент. А если надо не первый элемент а конкретный элемент как это сделать? то есть не по индексу элемента, а по самому значению
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void linklist::delitem(int f) // удаление элемента
{
    link* remlink = first;
    while(remlink->next->data != f || remlink != nullptr) remlink = remlink->next;
    if(remlink == nullptr) std::cout << "Елемент не найден";
    else 
    {
         link* newlink = remlink;
         remlink = remlink->next;
         newlink->next = remlink->next;
         delete remlink;
    }
}
naa17
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 47
17.05.2014, 19:38  [ТС]     Функция удаления элементов (список, стек) #5
виснет программа, указывает на четвертую строчку
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
17.05.2014, 19:49     Функция удаления элементов (список, стек) #6
Поле next последнего елемента списка должно быть равно nullptr.
И здесь исправьте
C++
1
while(remlink->next->data != f && remlink != nullptr) remlink = remlink->next;
naa17
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 47
17.05.2014, 19:51  [ТС]     Функция удаления элементов (список, стек) #7
ту же ошибку выдает((
AnDrew_LP
160 / 162 / 9
Регистрация: 29.05.2010
Сообщений: 435
17.05.2014, 19:53     Функция удаления элементов (список, стек) #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
|| заменили на && ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2014, 19:56     Функция удаления элементов (список, стек)
Еще ссылки по теме:

Односвязный список.Функция удаления C++
Написать кольцевой список с возможностями добавления, удаления и поиска элементов, и сохранения в файл. C++
Реализовать стек с двумя очередями используя массивы (операции удаления, добавления) C++

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

Или воспользуйтесь поиском по форуму:
naa17
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 47
17.05.2014, 19:56  [ТС]     Функция удаления элементов (список, стек) #9
большое спасибо, теперь отлично работает.

Может быть Вы сможете помочь еще и с этим?

LoadGraph() – загружает граф в память программы из файла;
SaveGraph() – сохраняет созданный в памяти программы граф в файл;

никогда не сталкивался
Yandex
Объявления
17.05.2014, 19:56     Функция удаления элементов (список, стек)
Ответ Создать тему
Опции темы

Текущее время: 00:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru