Помогите, пожалуйста, разобраться с условием задачи (C++)

Модератор: Модераторы разделов

Аватара пользователя
sidd
Сообщения: 667
ОС: Slackware 13.37

Помогите, пожалуйста, разобраться с условием задачи

Сообщение sidd »

Вот получил такую лабу по свзяным спискам. Но что-то не могу понять, что именно требуется в условии.

Задача:
Использовать (линейные) однонаправленные списки без заглавочной ступени (рис. а) или с заглавочной ступенью (рис. б) при следующем их описании:
Изображение
Параметр L обозначает список, а параметры E, E1 — данные типа TE, к которым можно применять операции присваивания и проверки на равенство. {TE = double}.
Определить рекурсивные функции, которые:
а) удаляет из списка L все вхождения элемента E;
б) строит L1 — копию списка L;
в) удваивает каждое вхождение элемента E в список L;
г) оставляет в списке L только первые вхождения одинаковых элементов.

Я так понял, что нужно создать вот такуй список:

Код: Выделить всё

  struct L {

    double E, E1;
    L *next;
  };


Только не понимаю, что значит удалить из списка все вхождения E (пункт а). Это что, просто в каждом элементе списка параметру E присвоить 0?
И вот еще в задание пунка г не въехал. Там нужно удалить элементы, в которых E и E1 равны между собой, так?
Patrick is God.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Помогите, пожалуйста, разобраться с условием задачи

Сообщение Crazy »

a) Нужно взять элемент, который стоит за элементом со значением E.
Присвоить указателю этого элемент значение указателя элемента E.
Удалить элемент Е через delete.
г)
Если Е = Е1 и Е стоит впереди Е1, то удалить элемент E1.

Desipere in loco
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Помогите, пожалуйста, разобраться с условием задачи

Сообщение watashiwa_daredeska »

Код: Выделить всё

typedef double DataType;
struct ListItem {
  DataType data;
  ListItem* next;
};

1) В списке может быть несколько элементов с одинаковым значением data. Первый встретившийся (при движении от начала списка по item->next) — первое вхождение.
2) Удалить элемент означает удалить ListItem.
3) Удвоить вхождение элемента означает, что для каждого ListItem нужно вставить (обычно рядом) в список еще один ListItem с таким же data.

Читайте учебник про односвязные списки. Там всё это должно быть.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Помогите, пожалуйста, разобраться с условием задачи

Сообщение drBatty »

видимо нужно отсортировать список слиянием, а дальше всё будет просто.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sidd
Сообщения: 667
ОС: Slackware 13.37

Re: Помогите, пожалуйста, разобраться с условием задачи

Сообщение sidd »

Спасибо за ответы.
Patrick is God.
Спасибо сказали: