| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 851 人关注过本帖
标题:一个链表排序问题
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
一个链表排序问题
本链表中的jz是周号,number是星期号(0-6),想按时间顺序重新排列链表。排列思路为先从当列表中选出含最大的数变量,把它“切除”出来“粘”到开头,切除处重新连接好。然后把开头除外最大的数的变量选出来再按刚才的操作“粘”到开头,这样当只剩一个变量时,就是按小到大的顺序排列了。
void Array(Pointer *Head)
{  Pointer p,p1,p2,pt; //Pointer是结构体指针变量
   pt=p=p2=*Head;
   int flag=0;
  while(p2!=NULL)
  {
   for(p=p1=p2;p1!=NULL;)
  {
   if((p->jz==p1->jz&&p->number<p1->number)||(p->jz==p1->jz&&p1->number==0)||p->jz<p1->jz)//选择最大变量放到p中
   p=p1;
   p1=p1->next;
  }
   if(p==p2)   //如最大变量为第一项使p2后移一位,否则表示只剩一项退出循环
  {if(p->next!=NULL)
   p2=p2->next;
   else
   flag=1;
  }
   else if(p->next==NULL)//当p为表尾时的操作
 {for(p1=p2;p1->next!=p;)
  {p1=p1->next;
  }
  p->next=pt;
  pt=p;  //pt表示新链表的头指针
  p1->next=NULL;
 }
   else
 {for(p1=p2;p1->next!=p;)//p在链表中间,实现切除粘贴工作
  {p1=p1->next;
  }
  p->next=pt;
  pt=p;
  p1->next=p->next;
 }
  if(flag)
  break;
 }
  *Head=pt; //使头指向pt
}
加载这个函数就卡在那里不动了,用vc6调试提示缺少this指针,不知道是什么意思!求解!
2015-12-29 20:18
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
大神帮帮忙!
2015-12-30 10:38
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:10 
思路没问题,你看看链表插入和删除操作有没有问题

一片落叶掉进了回忆的流年。
2015-12-30 13:01
wengbin
Rank: 10Rank: 10Rank: 10
来 自:陕西西安
等 级:贵宾
威 望:19
帖 子:370
专家分:1846
注 册:2015-5-8
收藏
得分:10 
先参看这个贴子中我回复的,看对你有用没:https://bbs.bccn.net/viewthread.php?tid=460455&page=1#pid2543775
2015-12-30 15:13
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 4楼 wengbin
回复我看过了,如果按你的方法,我不是要重新改变算法?算法我已经想出来了就是上面的,就是没找到程序的错误所在。

[此贴子已经被作者于2015-12-30 17:10编辑过]

2015-12-30 17:05
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
改好了,公布如下
void Array(Pointer *Head)
{  Pointer p,p1,p2,pt;
   pt=p2=*Head;
   int flag=0;
  while(p2!=NULL)
  {
   for(p=p1=p2;p1!=NULL;)
  {
   if((p->jz==p1->jz&&p->number<p1->number&&p->number!=0)||(p->jz==p1->jz&&p1->number==0)||p->jz<p1->jz||p->jz==p1->jz&&p->number==p1->number)
   p=p1;
   p1=p1->next;
  }
   if(p!=p2&&p2!=pt)
 {
  for(p1=pt;p1->next!=p;)
  p1=p1->next;
  if(p->next!=NULL)
  {p->next=pt;
  pt=p;
  p1->next=p->next;}
  else
  {p->next=pt;
  pt=p;
  p1->next=NULL;}
 }
   else if(p==p2&&p2!=pt)
 {for(p1=pt;p1->next!=p;)
  p1=p1->next;
  if(p->next==NULL)
  {flag=1;
  p1->next=NULL;
  p->next=pt;
  pt=p;}
  else
  {p2=p2->next;
  p1->next=p->next;
  p->next=pt;
  pt=p;}
 }
    else if(p!=p2&&p2==pt)
  {
  for(p1=pt;p1->next!=p;)
  p1=p1->next;
  if(p->next!=NULL)
  {p->next=pt;
  pt=p;
  p1->next=p->next;}
  else
  {p1->next=NULL;
  p->next=pt;
  pt=p;}
  }
  else if(p2==p&&p2==pt)
 { if(p->next==NULL)
  flag=1;
  else
  p2=p2->next;
 }
  if(flag)
  {p2=NULL;
  break;}
 }
  *Head=pt;
}
2015-12-31 12:30
快速回复:一个链表排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029407 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved