使用排序功能运行一遍后会断链,数据受损,用显示功能显示所有链表,发现4个链表变2个????(但能正确排序),再用一次排序功能就2个变1个????
如图所示
排序部分代码如下:
void sort(struct student *head)//按时间顺序由小到大排序(p->date)并输出
{
struct student *p1,*p2,*p,*p3,p4;
int n=1,flag;
struct studentpt=NULL;
//排序
while(pt!=head->next)
{
flag=0;p1=p2=head;
while(p1->next!=pt)
{
p1=p1->next;
if (p1->datedate)
{
if(flag==0)
{p2->next=p1->next;p1->next=p2;
p=p1;p1=p2;p2=p;
head=p2;}
else
{p3=head;
while(p3->next!=p2){p3=p3->next;} p2->next=p1->next;p1->next=p2;p3->next=p1;
p=p1;p1=p2;p2=p;}
}
flag=1;p2=p1;
}
pt=p1;n++;
}
//显示
p4=head;
while(p4!=NULL)
{
printf("单号编号 交易日期 入账日期 交易额 交易后余额交易次数 交易类型||交易地点\n");
printf("%d,%d,%d,%d,%d,%d,%d,%s,%s\n",p4->hao,p4->num,p4->date,p4->incountdate,p4->money,p4->sum,p4->time,p4->type,p4->address);
p4=p4->next;
}
}