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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
romka_f
1 / 1 / 0
Регистрация: 08.04.2013
Сообщений: 15
#1

Удалить повторяющиеся элементы списка - C++

14.04.2013, 22:11. Просмотров 1963. Ответов 3
Метки нет (Все метки)

Есть список в виде класса.
Нужно удалить повторяющиеся элементы, вернее, чтобы каждого было по одному. (например, вводится 1 2 3 3 4 4, а на выходе должно быть 1 2 3 4)
Пытался накидать функцию, но совсем запутался в указателях, ведь надо сравнить каждый с каждым. Спасайте, пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Elem* List::check_duplicates()
{
    Elem *prev;
    Elem *tmp;
 
    current=first;
    prev=current;
    for(start(); !end(); next())
    {
        tmp=prev;
        prev=current;
        for(current=current->next; !end(); next())
        {
            if(prev->num==current->num)
            {
                tmp->next=prev->next;
                prev->next=NULL;
            }
 
        }
    }
}
Добавлено через 38 минут
Ребята, помогите, пожалуйтса
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 22:11     Удалить повторяющиеся элементы списка
Посмотрите здесь:

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

Исключить повторяющиеся элементы из списка - C++
Не получается и всё тут! Удалять элементы умею из любой части списка, но вот именно, чтобы из списка с элементами типа int (например) 1...

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

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

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

Удалить повторяющиеся элементы в отсортированнном массиве - C++
пример такого массива I={0,1,3,3,3,5,6,8,10,10} Т.е. я так понимаю, нужно сдигать все элементы при повторении влево, и записывать в инт...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
incrome
9 / 9 / 0
Регистрация: 03.07.2012
Сообщений: 60
14.04.2013, 22:18     Удалить повторяющиеся элементы списка #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void del () 
 {
    int mass[10] = {1,1,2,2,3,3,4,4,5,5};
    int cf = 0,cs = 0; //Переменные для сверки массива
 
    for (int i = 0; i < 10; i++) { //перебор массива
    cf = mass[i];     //первый
    cs = mass[i+1]; //след элемент
    if (cf == cs){ //если одинаковые
     for (int j = i; j < 10; j++){ //замещаем его на след и сдвигаем массив.
     mass[j] = mass[j+1];
     }
 
 
    }
 
 
 
}
В билдере не проверял, но в теории так должно работать)
romka_f
1 / 1 / 0
Регистрация: 08.04.2013
Сообщений: 15
14.04.2013, 23:15  [ТС]     Удалить повторяющиеся элементы списка #3
переписал Ваш метод для списков, не работает чего-то...да и в теории, если подумать, то он сравнивает только два рядомстоящих элемента
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Elem* List::check_duplicates()
{
    Elem *tmp;
 
    current=first;
    tmp=first;
    for(start(); !end(); next())
    {
        if(current->num==current->next->num)
        {
             for(tmp=current; !end(); next())
             {
                 tmp->num=tmp->next->num;
             }
        }
    }
}
может у кого-то ещё есть варианты?

Добавлено через 42 минуты
вот конечный вариант, но всё равно иногда криво работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Elem* List::check_duplicates()
{
    Elem *tmp;
 
    current=first;
    tmp=first;
    for(tmp=first; tmp!=NULL; tmp=tmp->next)
    {
        for(current=current->next; !end(); next())
        {
            if(tmp->num==current->num)
            {
                tmp->next=current->next;
                current=NULL;
            }
        }
        current=tmp->next;
    }
}
Добавлено через 19 секунд
вот конечный вариант, но всё равно иногда криво работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Elem* List::check_duplicates()
{
    Elem *tmp;
 
    current=first;
    tmp=first;
    for(tmp=first; tmp!=NULL; tmp=tmp->next)
    {
        for(current=current->next; !end(); next())
        {
            if(tmp->num==current->num)
            {
                tmp->next=current->next;
                current=NULL;
            }
        }
        current=tmp->next;
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 00:17     Удалить повторяющиеся элементы списка
Еще ссылки по теме:

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

Скрыть или удалить повторяющиеся элементы массива - C++
Вот сама задача. Даны два массива. Массив А состоит из N элементов , массив В состоит из М элементов. Оба массива отсортировать по не...

Как удалить из исходного массива не повторяющиеся элементы? - C++
Вводится длина одномерного массива и значения его элементов. Удалить из исходного массива уникальные (не повторяющиеся) элементы. Результат...

Массив. Удалить из исходного массива уникальные (не повторяющиеся) элементы - C++
Вводится длина одномерного массива и значения его элементов. Удалить из исходного массива уникальные (не повторяющиеся) элементы. Результат...

Удалить из массива повторяющиеся элементы, оставив только их первые вхождения - C++
Как мне удалять повторяющийся элемент? #include &lt;iostream&gt; using namespace std; int main () {float a; int n,k=0; cout&lt;&lt;&quot;n=&quot;;...

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


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

Или воспользуйтесь поиском по форуму:
incrome
9 / 9 / 0
Регистрация: 03.07.2012
Сообщений: 60
15.04.2013, 00:17     Удалить повторяющиеся элементы списка #4
ах ну да! Там еще нужен был for для сдвига 2 элемента!!! Проглядел!!
Ну в целом мысль верная!)
Yandex
Объявления
15.04.2013, 00:17     Удалить повторяющиеся элементы списка
Ответ Создать тему
Опции темы

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