首页 > 用户发贴区 > 编程问题提问区 > 动态链表排序,请各位大虾不吝赐教
2008
06-12

动态链表排序,请各位大虾不吝赐教

1、


这是一个动态链表排序的函数,没有语法错误,估计存在逻辑错误~~~~~~~


想了很久也没想通,请各位高手帮忙指点一下,不胜感激!


struct student *sort(struct student *head)
{
 struct student *p,*p1,*p2;
 int m,i;
 p=(struct student *)malloc(LEN);
 p->next=head;
 for(m=n;m>1;m–)    //在函数外面定义了一个动态链表,n是动态链表的长度
 {
  p->next=head;
  p1=p->next;
  p2=p1->next;
  for(i=0;i<n-1;i++)
  {
   p1=p->next;
   p2=p1->next;
   if(p1->score<p2->score)
   {
    p1->next=p2->next;
    p2->next=p1;
    p->next=p2;
   }
   p++;
  }
 }
 return head;
}


2、


这也是一个动态链表排序的函数(冒泡法),可以通过编译,但是在运行的时候,如果输入的数据正好满足由大到小,即链表没进行排序,这样则可以输出。但是,例如,如果在第三个数和第四个数发生了链表中指针的交换,那么链表在输出时就会只输出前三个,貌似链表断了。。。


麻烦各路高手指点一下,不胜感激!


struct student *sorttotal(struct student *head)
{
 struct student *endpt,*u,*v,*p;
 u=(struct student *)malloc(LEN);
 u->next=head;
 head=u;
 for(endpt=NULL;endpt!=head;endpt=p)
  for(p=u=head;u->next->next!=endpt;u=u->next)
   if(u->next->total<u->next->next->total)
   {
    v=u->next->next;
    u->next->next=v->next;
    v->next=u->next;
    u->next=v;
    p=u->next->next;
   }
   u=head;
   head=u->next;
   return head;
}


恳请各位大虾给小弟解答一下上面的这两个程序,谢谢啦!


 


 


留下一个回复