| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1067 人关注过本帖
标题:将一个对象插入到对象链表中
只看楼主 加入收藏
karlzhouzhi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-12-25
收藏
 问题点数:0 回复次数:2 
将一个对象插入到对象链表中

Account::Account(unsigned accNo,float balan)
{
acntNumber=accNo;
balance=balan;
pNext=0;

count++;
if(pFirst==0)
pFirst=this;
else
{
for(Account *pS=pFirst;pS->pNext!=0;pS=pS->pNext);
pS->pNext=this;
}
pNext=0;//这条语句可以删除么?上面已经说明了当前的pNext=0,那么当把当前对象的插入到对象链表的末端时,最后一个对象的pNext就等于零。
}

搜索更多相关主题的帖子: 链表 对象 
2006-02-11 23:56
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
你这个不是插入, 而是挂上去.
你的那段代码首先是一个构造函数, 也就是说通过这个构造函数可以建立一个Account Object. 在建立这个Account Object的同时, Account Object的个数也得到了更新, 这就是那个 count++ 干的事情, 这个 count 因该定义为 static int 接下来你询问是否当前链表中存在一个Element, 如果不存在那么这个指向第一个Element的指针应该为零, 所以通过判断(pFirst == NULL) 可以确定是否当前链表为空, 如果为空, 那么当前建立的Account 就是链表上的第一个Element 了. 否则的话, 当前链表不为空, 那么通过这个 else 中 for 找到最后一个节点, 然后告诉最后一个节点, 他的下一个就是当前建立的Account Object.

那个pNext=0; 可以删除, 当然放在那里, 对程序也没有伤害. 从逻辑层面考虑, 那第一个 pNext = 0; 应该去掉, 保留后面的那个 pNext = 0; 这意味着, 当前新建立的Account Object 已经和他的前一个建立了联系, 也就是说, 它被挂到了链表上, 成为了链表上的最后一个 Element, 然后 pNext = 0; 这样他的下一个元素被宣布为空, 也就是说, 它没有下一个元素.

其实从高效的角度来看, 那个链表的 class 中应该包含一个 private 数据类型 为 Accout * trail; 这样这个 for loop 就可以不用了. 另外 private bool empty; public bool isEmpty(); 都是要定义的.

你将建立Account Object 和 挂到链表上同时实现, 我认为是不对的.
你应该写两个class, 一个就是Account, 还有一个就是 List, 将挂到链表上去的这个功能写成一个 List 的member function.



自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-02-12 03:06
karlzhouzhi
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2005-12-25
收藏
得分:0 
感谢kai的精辟讲解,谢谢:)
我有点不明白,你说第一个pNext=0可以去掉,要是去掉了,那for loop中for(Account *pS=pFirst;pS->pNext!=0;pS=pS->pNext,怎么判断循环结束呢。
最后,我再次感谢您的讲解,我有个小小的要求,不知道您能帮忙,我现在刚开始学C++,我很想交像您这样有经验的朋友,我可以么:)
2006-02-12 09:39
快速回复:将一个对象插入到对象链表中
数据加载中...
 
   



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

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