Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка динамического списка(с++)

9.2K
07 января 2006 года
mikron
27 / / 07.01.2006
Задача заключается в следующем:
есть динамический список
__________________________________________________
struct student
{
char name[40];
int date;
int month;
int year;
int group;
student *next;
}*begin=NULL,*adr;
__________________________________________________

где *begin - указатель на начало списка,а *adr вспомогательный указатель(*next - указатель на следующий элемент).
Надо отсортировать его по возрасту студентов(хотя бы по году рождения(year)).
Я попробовал так:
__________________________________________________
void sort()
{
student *b;
adr=begin;
if((adr->year)<=(adr->next->year))
{
begin=adr->next;
b=adr->next;
begin->next=adr;
adr->next=b;
}
}
__________________________________________________

но это не правильно.Помогите кто может.Заранее спасибо.
247
07 января 2006 года
wanja
1.2K / / 03.02.2003
Цитата:
Originally posted by mikron
Задача заключается в следующем:
есть динамический список
__________________________________________________
struct student
{
char name[40];
int date;
int month;
int year;
int group;
student *next;
}*begin=NULL,*adr;
__________________________________________________

где *begin - указатель на начало списка,а *adr вспомогательный указатель(*next - указатель на следующий элемент).
Надо отсортировать его по возрасту студентов(хотя бы по году рождения(year)).
Я попробовал так:
__________________________________________________
void sort()
{
student *b;
adr=begin;
if((adr->year)<=(adr->next->year))
{
begin=adr->next;
b=adr->next;
begin->next=adr;
adr->next=b;
}
}
__________________________________________________

но это не правильно.Помогите кто может.Заранее спасибо.


Ты пытаешься отсортировать только первые два элемента. Цикл, что ли сделай(while например).

9.2K
07 января 2006 года
mikron
27 / / 07.01.2006
Цитата:
Originally posted by wanja
Ты пытаешься отсортировать только первые два элемента. Цикл, что ли сделай(while например).



Да,но в том то и дело что только пытаюсь,а на самом деле сортируется,но при выводе программа в бесконечном цикле выводит только первые два элемента,то есть они(первые два)указывают друг на друга.Я не могу после обмена местами привести указатели в надлежащий вид.
И еще,какое условие должно быть для цикла?Я пробовал while(adr->next->next!=NULL),но тогда не отсортируются последние два элемента не отсортируются.

247
08 января 2006 года
wanja
1.2K / / 03.02.2003
ИМХО, сортировать дин. список лучше всего прямыми вставками.
243
08 января 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by mikron
Задача заключается в следующем:
есть динамический список
__________________________________________________
struct student
{
char name[40];
int date;
int month;
int year;
int group;
student *next;
}*begin=NULL,*adr;
__________________________________________________

где *begin - указатель на начало списка,а *adr вспомогательный указатель(*next - указатель на следующий элемент).
Надо отсортировать его по возрасту студентов(хотя бы по году рождения(year)).
Я попробовал так:
__________________________________________________
void sort()
{
student *b;
adr=begin;
if((adr->year)<=(adr->next->year))
{
begin=adr->next;
b=adr->next;
begin->next=adr;
adr->next=b;
}
}
__________________________________________________

но это не правильно.Помогите кто может.Заранее спасибо.


См. сюда: http://forum.codenet.ru/showthread.php?s=&threadid=27596

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог