Реферат: Двунаправленный динамический список
if((strcmp((*temp).fam,(*(*temp).prev).fam)<0) ||
(strcmp((*temp).fam,(*(*temp).prev).fam)==0) &&
(strcmp((*temp).name,(*(*temp).prev).name)<0) ||
(strcmp((*temp).fam,(*(*temp).prev).fam)==0) &&
(strcmp((*temp).name,(*(*temp).prev).name)==0) &&
(strcmp((*temp).fanem,(*(*temp).prev).fanem)<0))
{
m=1;
if (temp==cut) cut=(*temp).prev;
else (*(*temp).next).prev=(*temp).prev;
if ((*temp).prev==first)
{
first=temp;
tmp=NULL;
}
else
{
(*(*(*temp).prev).prev).next=temp;
tmp=(*(*temp).prev).prev;
}
(*(*temp).prev).prev=temp;
(*(*temp).prev).next=(*temp).next;
(*temp).next=(*temp).prev;
(*temp).prev=tmp;
}
else temp=(*temp).prev;
}
}
}