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

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

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

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

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

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

Удаление элемента из списка - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; struct FileStruct //Структура файла { ...

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

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

Удаление элемента из списка - C++
Нужно удалить всех студентов с оценками 2. Entry *begin = new Entry; int mark=2; Entry *current=begin; while(current){ ...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1482 / 1058 / 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
1482 / 1058 / 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++
Вот у меня есть код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct OS { char Name ; ...

Удаление элемента из односвязного списка - C++
Ребят, что я не так делаю? Элемент не удаляется, а заменяется на число 26. Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include...

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

Удаление последнего элемента из списка - C++
Добрый день! Проблема такая, удаляя последний элемент из списка, выдает ошибку Помогите разобраться! Спасибо Код программы ...

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


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

Или воспользуйтесь поиском по форуму:
DU
1482 / 1058 / 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     Удаление элемента из списка по его номеру
Ответ Создать тему
Опции темы

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