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;
}
恳请各位大虾给小弟解答一下上面的这两个程序,谢谢啦!
>> 本文固定链接: http://www.vcgood.com/archives/2462