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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2010, 12:34   #1
KIrich iz Che
Пользователь
 
Аватар для KIrich iz Che
 
Регистрация: 29.03.2010
Сообщений: 19
По умолчанию Сортировка списка, найти ошибку

есть структура и класс, ее нужно попровить (или написать свою работающую) функцию сортировки
все это реализуется с помощью линейного двунаправленного списка на си++, помогите пожалуйста!)
Код:
struct node
{
    int info;
    struct node *pred;
    struct node *next;
};
class pilot
{node  *begin;
node *p1,*p2;
        public:
                pilot(); //конструктор класса
                ~pilot();//деструктор класса
                int init();
                int add(int vv_data);
                void del(int find);
                node* dostup();
                node* poisk(int find);
                void sort();
                friend ostream& operator << (ostream&, pilot&);
 
};
Код:
void pilot ::sort()
{       node *p;
        p=begin;
        if (p!=NULL)
        {
                    int cnt=0;
            while (p->next!=NULL)
        {
            cnt++;
            p=p->next;
        }
 
 
        node *p1, *p2;
        p1=new node;
        p2=new node;
        p1=p->next;
        for(int j=0; j<(cnt-1); j++)
        {
        while (p!=NULL)
        {
            if ( (p1->info) > (p->info) )
            {
                p2->info = p1->info;
                p1->info = p->info;
                p->info= p2->info;
            };
        p=p->next;
        p1=p->next;
        }
        };
        }
        getch();
        system("pause");
}
KIrich iz Che вне форума Ответить с цитированием
Старый 08.07.2010, 12:42   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Цитата:
node *p1, *p2;
p1=new node;
p2=new node;
p1=p->next;
Дойдя до этого дальше проверять не рискнул...
Вам надо отсортировать разетки (node) по возрастанию int info, я правильно понял?
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 08.07.2010, 12:45   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

не проверял но я бы так написал:
Код:

void pilot ::sort(){
        node *p1, *p2;
        int i;
        for(p1=begin;p1;p1=p1->next){
         for(p2=p1;p2;p2=p2->next){
            if ( (p1->info) > (p2->info) ){
                i = p1->info;
                p1->info = p2->info;
                p2->info= i;
            };
        }
        };
}
I'm learning to live...

Последний раз редактировалось Stilet; 08.07.2010 в 12:48.
Stilet вне форума Ответить с цитированием
Старый 08.07.2010, 12:57   #4
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Я бы сделал так:
Код:
void pilot::sort()
{
      node* a(begin);
      int numb(0);
      while(a)
      {
            numb++;
            a = a->next;
      }
      a = begin->next;
      node* temp(begin), * temp1;
      for(int i=1; i<numb; i++)
      {
            for(int j=0; j<i; j++)
            {
                  if(a->info > temp->info)
                  {
                        temp1 = a;
                        a = temp;
                        temp = temp1;
                        break;
                  }
                  temp = temp->next;
            }
            a = a->next;
      }
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."

Последний раз редактировалось Syuf; 08.07.2010 в 14:32.
Syuf вне форума Ответить с цитированием
Старый 08.07.2010, 14:27   #5
KIrich iz Che
Пользователь
 
Аватар для KIrich iz Che
 
Регистрация: 29.03.2010
Сообщений: 19
По умолчанию

спасибо ребят! разобрался)
KIrich iz Che вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка, найти ошибку надо( KIrich iz Che Общие вопросы C/C++ 0 25.05.2010 21:41
Сортировка списка 4ika Общие вопросы C/C++ 3 27.11.2009 20:38
Сортировка списка Рамик Помощь студентам 4 11.03.2009 14:01
Сортировка списка Gonzo Помощь студентам 5 11.03.2009 11:08
Сортировка списка... Arkuz Помощь студентам 2 11.05.2008 00:53