Сортировка динамического списка(с++)
есть динамический список
__________________________________________________
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;
}
}
__________________________________________________
но это не правильно.Помогите кто может.Заранее спасибо.
Цитата:
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;
}
}
__________________________________________________
но это не правильно.Помогите кто может.Заранее спасибо.
Задача заключается в следующем:
есть динамический список
__________________________________________________
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 например).
Цитата:
Originally posted by wanja
Ты пытаешься отсортировать только первые два элемента. Цикл, что ли сделай(while например).
Ты пытаешься отсортировать только первые два элемента. Цикл, что ли сделай(while например).
Да,но в том то и дело что только пытаюсь,а на самом деле сортируется,но при выводе программа в бесконечном цикле выводит только первые два элемента,то есть они(первые два)указывают друг на друга.Я не могу после обмена местами привести указатели в надлежащий вид.
И еще,какое условие должно быть для цикла?Я пробовал while(adr->next->next!=NULL),но тогда не отсортируются последние два элемента не отсортируются.
ИМХО, сортировать дин. список лучше всего прямыми вставками.
Цитата:
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;
}
}
__________________________________________________
но это не правильно.Помогите кто может.Заранее спасибо.
Задача заключается в следующем:
есть динамический список
__________________________________________________
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