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

Удаление элемента из списка по его номеру - C++

Восстановить пароль Регистрация
 
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
11.02.2014, 22:54     Удаление элемента из списка по его номеру #1
Народ, подскажите как связать функцию удаления элемента списка по номеру со структурами которые даны
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef struct {
    char name[50];
    int order;
    float average_point;
} student;
 
typedef struct l_node{
    void *data;        // Указатель на данные
    l_node *next;      // Указатель на следующий элемент
} list_node;
 
typedef struct {
    list_node *head;    // Указатель на голову списка
    list_node *current;        // Указатель на текущий элемент списка
    int list_size;      // Кол-во элементов списка
    compare_func_t func_cmp; // Указатель на функцию сравнения элементов
} list_head;
и собственно сама функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int list_del(list_head *list, int num){
      list_head *pr = 0, *curr = list;
      for(int i = 0; i<=num && curr; ++i)
        {
          pr = curr;
          curr = curr->next;
        }
      if(!curr)
        return 0;
      if(pr)
        pr->next = curr->next;
      else
        list = curr->next;
      delete curr;
      return 1;
    }
Добавлено через 12 минут
я не знаю как сделать, потому что указатель на начало списка находится в одной структуре, а указатель на следующий элемент в другой
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 22:54     Удаление элемента из списка по его номеру
Посмотрите здесь:

По номеру элемента массива определить его значение C++
C++ Удаление элемента из списка
C++ Удаление элемента со списка
Удаление элемента из списка C++
Удаление элемента из односвязного списка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.02.2014, 23:03     Удаление элемента из списка по его номеру #2
вам нужно работать с лист_нодами, а не с лист_хедами:
C++
1
2
3
int list_del(list_head *list, int num)
{
  list_node *pr = 0, *curr = list->head;
итерируетесь до нужного элемента так, чтобы у вас были на руках предыдущий и последующий узел относительно того, который нужно удалить. они нужны, чтобы связать их. иначе список разорвется.
после связки текущий можно удалять.
код скорее всего неверный. по крайней мере смущает строка 8. если не ноль, то ничего не делаем.
наверно наоборот надо. впрочем, сильно не вникал.

советую провернуть эту операцию на бумажке. нарисовать квадратики (которые узлы) и стрелачками нарисовать кто на кого указывает.
и прорисовать, что нужно проделать, чтобы корректно удалить такой узел из середины списка, прорисовать что куда должно указывать
после удаления.
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
11.02.2014, 23:08  [ТС]     Удаление элемента из списка по его номеру #3
насколько я понимаю, то при вводе отрицательного числа nomer если бы не было контроля curr, то мы бы получили бесконечный цикл.
а так ни какой элемент из списка не удалится, так как после цикла мы написали:
C++
1
2
if(!curr)
        return 0;  //вернем ноль, что бы обозначить, что ни один элемент не удалился
после этого функция вернет ноль и закончит свою работу.
То же произойдет, если мы введем nomer большое, чем есть элементов в списке.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.02.2014, 23:11     Удаление элемента из списка по его номеру #4
возможно. как я сказал я детально не вникал как там реализовано. у вас была проблема другого рода.
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
11.02.2014, 23:12  [ТС]     Удаление элемента из списка по его номеру #5
DU, если я правильно понимаю суть программы то должно работать так:
Удаление элемента из списка по его номеру
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
11.02.2014, 23:16  [ТС]     Удаление элемента из списка по его номеру #6
Цитата Сообщение от DU Посмотреть сообщение
возможно. как я сказал я детально не вникал как там реализовано. у вас была проблема другого рода.
еще забыл сказать, что по заданию имя функции и передаваемые параметры должны быть именно такими
C++
1
int list_del(list_head *list, int num)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 23:21     Удаление элемента из списка по его номеру
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.02.2014, 23:21     Удаление элемента из списка по его номеру #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
я не знаю как сделать, потому что указатель на начало списка находится в одной структуре, а указатель на следующий элемент в другой
вам нужно работать с лист_нодами, а не с лист_хедами:
Код C++
1
2
3
int list_del(list_head *list, int num)
{
list_node *pr = 0, *curr = list->head;
было:
list_head *pr = 0, *curr = list;
стало:
list_node *pr = 0, *curr = list->head;

жирным виделил то, что изменилось. дальше код возможно под это дело поменять нужно.
функция и параметры не изменились. какие проблемы то?
Yandex
Объявления
11.02.2014, 23:21     Удаление элемента из списка по его номеру
Ответ Создать тему
Опции темы

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