CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

就山请教在链表中如果值相同,如何删除其余的,只是保留一个。

楼主echoxue(咱当过兵的人)2004-11-03 00:44:29 在 VC/MFC / 基础类 提问

数据结构如下:  
  //define   the   struct   about   student  
  #ifndef   LINKHEAD  
  #define   LINKHEAD  
  typedef   struct   STUDENT  
  {  
  int     num;  
  char   name[10];  
  struct   STUDENT   *   next;  
   
  }Stud;  
  //typedef   Stud   *pStud;  
   
  #endif  
   
  就是如果num和name相同的话,删除其余的,只是保留一个。  
  在线等待????? 问题点数:20、回复次数:12Top

1 楼property1(lubiao)回复于 2004-11-03 08:45:22 得分 10

没什么好办法   把。  
   
  搜索循环搜索链表,  
   
  p   =   head   ;  
  while   (p)  
  {  
          扫描   p   之后的所有结点  
          如果   与   p   相同   就删了。  
          p   ++   ;  
  }  
   
  MFC     有Clist   模板    
  很好用可以考虑。Top

2 楼sungengyu(快乐机器)回复于 2004-11-03 08:48:03 得分 1

插入的时候判断。Top

3 楼fastxyf(迅影)回复于 2004-11-03 09:02:56 得分 1

考虑性能的话,最好先做排序,再找到重复的就方便了  
  Top

4 楼echoxue(咱当过兵的人)回复于 2004-11-03 12:24:42 得分 0

upTop

5 楼echoxue(咱当过兵的人)回复于 2004-11-03 12:26:30 得分 0

//   TODO:   Add   your   control   notification   handler   code   here    
       
  //p_pri_temp   for   pri_node    
  Stud   *   p_pri_temp=NULL;  
  //p_next_temp   for   next_node    
  Stud   *   p_next_temp=NULL;  
  //need   to   memoery   the   node  
  Stud   *   p_next_mem=NULL;  
  p_pri_temp=p_head;  
  if(p_head!=NULL)  
  {  
  //set   the   head   point   to   first   node  
  while(p_pri_temp!=NULL)  
  {  
  //the   next   node   point    
  p_next_temp=p_pri_temp->next;    
  p_next_mem=p_pri_temp;  
  while   (p_next_temp!=   NULL)  
  {  
  if(p_pri_temp->num   ==   p_next_temp->num)  
  {  
  //point   to   next   node  
  //p_next_temp   =   p_next_temp->next;  
  //p_next_temp   =   p_next_mem->next;    
  p_next_mem->next=p_next_temp->next;  
  p_next_temp=p_next_mem->next;  
  g_stuNum--;  
  }  
  else  
  {  
  //move   the   point   to   next    
  p_next_temp   =   p_next_temp->next;  
  p_next_mem   =   p_next_mem->next;  
  }  
  }  
  //move   the   pri_point   to    
  p_pri_temp   =   p_pri_temp->next;  
  }  
  delete   p_pri_temp;  
  delete   p_next_temp;  
  delete   p_next_mem;  
  OnDoShow();    
  }  
  请各位看看,有问题吗,我的算法.可以过滤,过滤后但建立的时候又有问题,??????Top

6 楼oncsdn(青蛙)回复于 2004-11-03 12:31:17 得分 0

为啥不有   CList   呢?Top

7 楼echoxue(咱当过兵的人)回复于 2004-11-03 12:34:38 得分 0

如何使用CList?谢谢!Top

8 楼oncsdn(青蛙)回复于 2004-11-03 12:43:03 得分 8

写STUDENT的如相函数  
  1.   COPY   构造写上  
  2.   =   号重载  
  注意:上面两个函数的参数为   const   类型的,切记!  
   
  然后如下定义:  
   
  #include   "afxtempl.h"  
   
  typedef   CList<STUDENT,STUDENT&>   CStudentList  
   
  就可以了。  
   
  如果想用指针,就简单了,上面的函数不用写了,直接定义  
   
  #include   "afxtempl.h"  
   
  typedef   CList<STUDENT*,STUDENT*>   CStudentPtrList  
  Top

9 楼oncsdn(青蛙)回复于 2004-11-03 12:44:03 得分 0

 
  如果用   CList     的话,它还有个   Find   功能   :)Top

10 楼echoxue(咱当过兵的人)回复于 2004-11-03 18:01:27 得分 0

to:青蛙  
  不懂,能再详细点吗.  
  我还要请教有关在treeView中打开多文档窗口的问题,就是鼠标点tree的结点,打开右面的文档窗口.Top

11 楼echoxue(咱当过兵的人)回复于 2004-11-03 18:33:01 得分 0

upTop

12 楼oncsdn(青蛙)回复于 2004-11-06 14:29:01 得分 0

TO   :   echoxue(虎子)    
  ==================  
  QQ   号,我可能就今天和明天在了,以后说不定     :(  
   
  Top

相关问题

  • 如何删除一个表里面存在的相同的记录啊?即相同的记录只保留一条?
  • 如何用最好的办法将我的一个数据表中相同的记录删除,保留不同的记录,SQL语句怎么写?
  • 部分字段相同视为重复记录,删除并只保留一条
  • 求助:如何删除表中相同的两个内容
  • 两个表中的相同数据删除!!
  • 请问:如何删除线性表中的相同节点?
  • 删除二表中相同的数据。急!
  • 表A,表B 把表B里主键和表A相同的记录删除
  • 请问在SQL SERVER中,将相同的记录删除,只保留一条的SQL语句怎么写?
  • 需要您的帮助!删除不知名的表,保留需要的表。

关键词

  • null
  • pri
  • next
  • temp
  • clist
  • mem
  • 相同
  • stud
  • student
  • point

得分解答快速导航

  • 帖主:echoxue
  • property1
  • sungengyu
  • fastxyf
  • oncsdn

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo