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

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

Войти
Регистрация
Восстановить пароль
 
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
#1

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

11.02.2014, 22:54. Просмотров 457. Ответов 6
Метки нет (Все метки)

Народ, подскажите как связать функцию удаления элемента списка по номеру со структурами которые даны
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 минут
я не знаю как сделать, потому что указатель на начало списка находится в одной структуре, а указатель на следующий элемент в другой
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2014, 22:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элемента из списка по его номеру (C++):

Реализация списка.Удаление хвостового элемента.Поиск элемента - C++
Всем привет,мое задание выглядит так : В класс List&lt;T&gt; из классной работы добавить следующие методы: void addHead(T...

По номеру элемента массива определить его значение - C++
По номеру элемента массива определить его значение

Удаление элемента списка и всего списка - C++
Компилируется, но не работает. Что и как исправить? #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;cstring&gt; #define M 5 ...

Удаление элемента из списка и поиск элемента - C++
Нужно удалить определенный элемент из списка. Найти элемент в списк и вывести на него всю информацию. Вот код. Не знаю как написать...

"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка - C++
Здравствуйте! Возникла проблема с программой. Тема: &quot;Сортировка двусвязного списка путем исключения элемента с минимальным значением и...

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

6
DU
1483 / 1129 / 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. если не ноль, то ничего не делаем.
наверно наоборот надо. впрочем, сильно не вникал.

советую провернуть эту операцию на бумажке. нарисовать квадратики (которые узлы) и стрелачками нарисовать кто на кого указывает.
и прорисовать, что нужно проделать, чтобы корректно удалить такой узел из середины списка, прорисовать что куда должно указывать
после удаления.
0
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
11.02.2014, 23:08  [ТС] #3
насколько я понимаю, то при вводе отрицательного числа nomer если бы не было контроля curr, то мы бы получили бесконечный цикл.
а так ни какой элемент из списка не удалится, так как после цикла мы написали:
C++
1
2
if(!curr)
        return 0;  //вернем ноль, что бы обозначить, что ни один элемент не удалился
после этого функция вернет ноль и закончит свою работу.
То же произойдет, если мы введем nomer большое, чем есть элементов в списке.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
11.02.2014, 23:11 #4
возможно. как я сказал я детально не вникал как там реализовано. у вас была проблема другого рода.
0
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
11.02.2014, 23:12  [ТС] #5
DU, если я правильно понимаю суть программы то должно работать так:
Удаление элемента из списка по его номеру
0
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)
0
DU
1483 / 1129 / 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;

жирным виделил то, что изменилось. дальше код возможно под это дело поменять нужно.
функция и параметры не изменились. какие проблемы то?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 23:21
Привет! Вот еще темы с ответами:

Удаление элемента из списка - C++
Нужно удалить из списка элемент, стоящий после элемента на который указывает Р. Очень срочно надо! Заранее спасибо.

Удаление элемента из списка - C++
Здравствуйте, нужна помощь, программа, выполняющая следующие задания на основе односвязного списка. Не удается удалить элемент по дате...

Удаление элемента из списка - C++
необходимо удалить первый элемент из списка, помогите пожалуйста переписать функцию и помогите с вызовом этой функции в main() ...

Удаление элемента из списка - C++
Здравствуйте, нужна помощь, программа, выполняющая следующие задания на основе двусвязного списка. Не удается удалить элемент по дате...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
11.02.2014, 23:21
Ответ Создать тему
Опции темы

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