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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Visual C++ 2012. Консоль. scanf(). Обработка ошибок ввода http://www.cyberforum.ru/cpp-beginners/thread914283.html
Я использую процедуру scanf() для ввода даты через точку (типа 01.01.2000). Мне надо сделать так, чтобы обрабатывались ошибки при вводе (типа 01а2.01.2000), чтобы тогда прога просила ввести дату снова. Как это сделать? я пробовал примерно так: #include <iostream> using namespace std; int main(void)
C++ Дана вещественная квадратная матрица Дана вещественная квадратная матрица. Определить: 1. произведение элементов в тех строках, которые не содержат отрицательных элементов 3. максимум среди элементов диагонали 3. разделить все элементы строки( с макс.элементом) на 10 Определить наличия отрицательных элементов оформить через функцию. http://www.cyberforum.ru/cpp-beginners/thread914280.html
Символьные строки (замена строчных на прописные и на оборот) C++
Как решить задачу. Например в водим cYbErFoRuM,а выведит CyBeRfOrUm то есть меняет строчные на прописные и на оборот.... подскажите как это сделать.
C++ Привести матрицу к треугольному виду
Коэффициенты системы линейных уравнений заданы в виде прямоугольной матрицы. С помощью допустимых преобразований привести систему к треугольному виду. Найти кол-во строк, среднее арифметическое которых меньше заданной величины Написала вот это #include <iostream> #include <conio.h> using namespace std; const int m=3; void scan( float (*a), int n); void print(float (*a), int n);
C++ Замена printf на cout http://www.cyberforum.ru/cpp-beginners/thread914242.html
Ув. коллеги, Можно ли заменить printf на cout в последнем выражении тернарного оператора (строка 13) без создания новой функции? #include <iostream> using namespace std; int f1(int n); int f2();
C++ Сумма книг Предположим, что вы продаете книгу по программированию на языке C++ для начинающих. Напишите программу, которая позволит ввести ежемесячные объемы продаж в течение года (в количестве книг, а не в деньгах). Программа должна использовать цикл, в котором выводится приглашение с названием месяца, применяя массив указателей на char (или массив объектов string, если вы предпочитаете его),... подробнее

Показать сообщение отдельно
Skaarj
2 / 2 / 1
Регистрация: 28.06.2013
Сообщений: 52
28.06.2013, 21:53     Удаление повторяющихся элементов из списка
Всем привет! Прошу помощи, надо написать функцию удаления всех повторяющихся элементов из списка. Например надо получить из a b g c d a b c e f -> g d e f.
Я попытался сначала сделать эту функцию из функции которая удаляет только повторяющиеся, то есть из a b g c d a b c e f -> a b g c d e f, но не получилось и решил сделать через ещё один цикл..показалось что так проще. Cажусь на p-ый элемент и сравниваю с t-ым, пока не находится пара тождественно равных, затем беру значение этого p и присваиваю к некоторой переменной d. И затем делаю ещё один цикл который пробегает от головы до конца сравнивая все элементы с d и удаляя те, что равны d.


Проблема только в том что при удаление больше 4 элементов программа где то подвисает в цикле, не могу понять в чём ошибка и почему только 4 удаления. И ещё списки вида a b ... b обрабатывает в тот же список только первый элемент заменяет 0, но тут я наверное разберусь. Не знаю правильный ли я путь выбрал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
list *Del_Same(list *head, int &d)
{
     list *p=head, *t, *q, *u;
     
     while(p!=NULL)
     {            t=p;
                  while(t->next!=NULL)
                  {
                              if(p->value==t->next->value)
                              {
                              d=p->value;
                              u=head;
                                      if(head==NULL) { puts("list empty"); return NULL;}
                                      if(head->value==d){head=head->next; delete u; return head;}
                                      
                                      while(u->next!=NULL)
                                      {
                                                          if(u->next->value==d)
                                                          {
                                                          q=u->next;
                                                          u->next=u->next->next;
                                                          delete q;
                                                          }
                                      else u=u->next;                  
                                      }
                               } 
                               else t=t->next;
                  } 
     p=p->next; 
     }
     return head;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru