Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2012, 22:20   #1
Ксения1
 
Регистрация: 21.11.2011
Сообщений: 3
По умолчанию Односвязные списки..что исправить?

Подскажите что необходимо добавить, чтобы удалялись группы повторяющихся чисел, а то остаются первые вхождения
Необходимо решить именно с использованием списков.
Код:
#include <fstream> 
#include <iostream> 
#include <locale.h> 
#include <stdlib.h> 
#include <conio.h>
#include <stdio.h>
 
using namespace std; 
 
struct LIST { 
    int number; 
    LIST *next; 
}; 
 
//Функция чтения данных и занесения их в создаваемый список: 
LIST *read_list(LIST *lst) { 
    lst=0;
    LIST *p=0; 
    int t; 
    ifstream f("1.txt");
    // первый элемент
    if (f>>t) {
        lst=new LIST; 
        p=lst; 
        p->number=t;
    }
 
    // последующие элементы
    while (f>>t) { //Пока не конец файла 
        p->next=new LIST; 
        p=p->next; 
        p->number=t; 
    }
 
    // закончили создавать список
    if (p) p->next=0;
 
    return lst; 
}
 
 
        LIST *del_group_element(LIST *lst)
    {
      LIST *p=lst;
     
      if (p==0) return lst;
     
      do
      {
        int num=p->number;
        LIST *prev=p;
        LIST *pos=p->next;
        int flag=0;
        while (pos!=0)
        {
          if (pos->number==num)
          {
 
            LIST* tmp=pos;
            pos=pos->next;
            prev->next=pos;
            delete tmp;
            flag=1;
          }
          else
          {
            prev=pos;
            pos=pos->next;
          }
        }
     
        if (flag)
        {
            if (pos==lst)
            {
                lst=pos->next;
                //pos=pos->next;
                prev=pos;
          LIST* tmp=p;        
          p=p->next;
          delete tmp;
            }
        }
        else
          p=p->next;
     
      } while (p!=0);
     return lst;
    }
 
 
        int main() 
{ 
    LIST *lst=0, *p=lst; 
    int n; 
 
    setlocale(LC_CTYPE,"");      
    lst = read_list(lst); 
 
    cout << "элементы списка:\n";
    p=lst;
    while (p) {
        //Выводим данные
        cout<<' '<<p->number;
        // Переходим на следующий элемент
        p=p->next;
    }
    cout<<endl;
 
    lst=del_group_element(lst); 
 
    cout<<"\nрезультат:\n";
    p=lst;
    while (p) {
        //Выводим данные
        cout<<' '<<p->number;
        // Переходим на следующий элемент
        p=p->next;
    }
    cout<<endl;
 
    _getch();
    return 0;
}
Ксения1 вне форума Ответить с цитированием
Старый 17.06.2012, 11:14   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как вариант:
Код:
int k=0
while (f>>t) { //Пока не конец файла 
        if(t==k) continue;
        k=t;
        p->next=new LIST; 
        p=p->next; 
        p->number=t; 
    }
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C] Односвязные списки acmilanfan Помощь студентам 0 17.05.2012 23:22
Односвязные списки. Killspamers Помощь студентам 7 19.03.2012 18:59
Односвязные списки Nike0 Общие вопросы C/C++ 0 26.12.2010 12:07
Односвязные списки Anna T Паскаль, Turbo Pascal, PascalABC.NET 2 19.12.2010 18:58
Односвязные списки art_stalker Общие вопросы C/C++ 5 21.04.2010 22:49