с использованием односвязных линейных списков
LIST *del_group_element(LIST *lst)
{
LIST *p1=lst,*p2=p1->next, *p3=p2->next, *prev=lst;
int l=0;
while (p1)
{
if((p1->number)==(p2->number))
{
delete p2;
delete p1;
if(p1==lst)
{
lst=p2->next;
prev=lst;
p1=lst;
}
else
{
prev->next=p2->next;
p1=prev;
}
}
else prev=p1;
if (p1!=p2->next) p1=p1->next;
if (p2->next) p2=p2->next;
}
return lst;
}
Другие языки программирования и технологии
С++ функция удаления группы одинаковых чисел из списка
УЖАС. С удаленными элементами нельзя работать - никто не гарантирует, что они еще там есть. Кроме того, удалить, просят группу, а не пару. И вообще топорно. И непонятно, как обозначается конец списка.. .
Добавь функцию "культурного" удаления элемента списка (т. е. сначала меняем указатель предыдущего, а потом удаляем) , и удаляй только через нее.
Ну и ищи сначала группу, а потом ее всю удаляй, а не парами.
Добавь функцию "культурного" удаления элемента списка (т. е. сначала меняем указатель предыдущего, а потом удаляем) , и удаляй только через нее.
Ну и ищи сначала группу, а потом ее всю удаляй, а не парами.
так есть стандартная функция исппользуйте ее
list::unique
примерчик
// list::unique
#include <iostream>
#include <cmath>
#include <list>
using namespace std;
// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }
// a binary predicate implemented as a class:
class is_near
{
public:
bool operator() (double first, double second)
{ return (fabs(first-second)< 5.0); }
};
int main ()
{
double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,
12.77, 73.35, 72.25, 15.3, 72.25 };
list< double > mylist (mydoubles,mydoubles+10);
mylist.sort(); // 2.72, 3.14, 12.15, 12.77, 12.77,
// 15.3, 72.25, 72.25, 73.0, 73.35
mylist.unique(); // 2.72, 3.14, 12.15, 12.77
// 15.3, 72.25, 73.0, 73.35
mylist.unique (same_integral_part); // 2.72, 3.14, 12.15
// 15.3, 72.25, 73.0
mylist.unique (is_near()); // 2.72, 12.15, 72.25
cout << "mylist contains:";
for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
list::unique
примерчик
// list::unique
#include <iostream>
#include <cmath>
#include <list>
using namespace std;
// a binary predicate implemented as a function:
bool same_integral_part (double first, double second)
{ return ( int(first)==int(second) ); }
// a binary predicate implemented as a class:
class is_near
{
public:
bool operator() (double first, double second)
{ return (fabs(first-second)< 5.0); }
};
int main ()
{
double mydoubles[]={ 12.15, 2.72, 73.0, 12.77, 3.14,
12.77, 73.35, 72.25, 15.3, 72.25 };
list< double > mylist (mydoubles,mydoubles+10);
mylist.sort(); // 2.72, 3.14, 12.15, 12.77, 12.77,
// 15.3, 72.25, 72.25, 73.0, 73.35
mylist.unique(); // 2.72, 3.14, 12.15, 12.77
// 15.3, 72.25, 73.0, 73.35
mylist.unique (same_integral_part); // 2.72, 3.14, 12.15
// 15.3, 72.25, 73.0
mylist.unique (is_near()); // 2.72, 12.15, 72.25
cout << "mylist contains:";
for (list<double>::iterator it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
cout << endl;
return 0;
}
как-то так : http://pastebin.com/gcQHeeys
@Николай, ну это же С обучающий курс структурам данных - это раз, надо удалить всю группу, а не оставить уникальные - это два, ну и три - на STL это делается одной строкой через remove_if предикат.
@Николай, ну это же С обучающий курс структурам данных - это раз, надо удалить всю группу, а не оставить уникальные - это два, ну и три - на STL это делается одной строкой через remove_if предикат.
Похожие вопросы
- Запишите функцию для получения случайного числа x из промежутка: [0; 15) [0; 15] [-15; 15) [10; 15)
- ввести 2 числа меньше 65000 и определить имебтся ли них одинаковые числа
- Создать функцию которая находит одинаковЫе єлементы в 2 массивах та использовать их для обработки рядов матрици
- Создать функцию которая находит одинаковЫе єлементы в 2 массивах та использовать их для обработки рядов матрици.
- Используя функцию find_if найти первое простое число
- Программирование ассемблер. Дан массив из 8 байт. Посчитать количество байт, в которых число нулей и единиц одинаковое
- Админы групп и пабликов в Вконтакте! ! У меня в группе нет функции Предложить новость. Как ее включить?)
- Паскаль. Цикл While. Определить остаток от деления большего числа а на меньшее число b, не используя стандартные функции
- Дан массив Z(10). Вставить число Р между теми числами, которые образуют пару с одинаковыми знаками. Помогите) пжста
- Описать функцию в c++, которая находит среднее арифметическое значение всех элементов сформированного непустого списка