严蔚敏的数据结构与算法(c语言版) 中关于引用

大家好,在严蔚敏的数据结构与算法(c语言版)的书中,在讲到线性链表时,我感到有很多引用调用都是不必要的,当然我不觉得这是书的错,可我想知道这是为什么,我觉得有很多引用调用... 大家好,在严蔚敏的数据结构与算法(c语言版)的书中,在讲到线性链表时,我感到有很多引用调用都是不必要的,当然我不觉得这是书的错,可我想知道这是为什么,我觉得有很多引用调用若采用值调用,同样可以达到效果。下面看个例子:
status listinsert_l(linklist &l,int i,elemtype e)
{
p=l;j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
return error;
s=(linklist)malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
}
不单单是这个我觉得listdelete等等只要不涉及l值变化的函数都不必要用引用调用,(初始化涉及到l值的变化所以应该用引用调用)。
请高手解释一下,谢谢....
我主要想知道,l值不会变,可又为什么要用linklist &l, 而不用linklist l
展开
 我来答
百度网友3b7eeb492
2010-09-18 · TA获得超过2489个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:606万
展开全部
引用常常是有必要的,他十分重要的一点就是可以避免对象的复制!

同样是传递,如果你要传递的是一个非常庞大的对象,这时候不用引用的话,传给函数的就是这个对象的一个副本,构造这样一个副本会调用拷贝构造函数,如果对象庞大,可能会花费大量的系统资源,所以引用的有意义的。而用了引用,就可以避免这样一个拷贝过程。举例,MFC中大量使用的就是常引用,因为他的类往往是一个控件或者是一个对话框。

如果为了避免或者强调传递的对象不发生改变,可以用“常引用”
就是const type &name的形式,这样既可以避免修改也可以避免拷贝。

用linklist l,这个子程序里面的l是外面传值传过来的一个linklist的拷贝,要做一次复制操作,会花费一定系统开销!
用linklist &l,不需要这个复制操作,节省资源!
这里并不关心改不改变l的值,使用引用不只是为了让l的值能改变,还有我说的这个作用
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
linsilence
2010-09-18 · TA获得超过218个赞
知道答主
回答量:50
采纳率:0%
帮助的人:81.4万
展开全部
l这个链表在listinsert_l(linklist &l,int i,elemtype e)函数中,进行了插

入操作,使链表l发生了变化,函数就需要引用调用l啊!

status listinsert_l(linklist &l,int i,elemtype e)
这个函数的返回值是状态码,而不是返回l链表的头结点地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶小怜
2010-09-17 · TA获得超过408个赞
知道小有建树答主
回答量:379
采纳率:0%
帮助的人:262万
展开全部
是的,老实说这本书写的很不怎么样,很多算法实现的乱七八糟,丝毫不能体现出数据结构和算法的美,反而会让初学者感到很难掌握。同样的一个算法,如果看一下sedgewick《算法:c语言实现》上面的,就会发现其实可以用更简洁,更对称,更容易理解的方式来实现。
说到你提到的这个问题,我也认为是这样的,多用引用没什么好处,只会增加函数产生更多的有意或无意的副作用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
楚留香_谢晓峰
2019-08-13
知道答主
回答量:5
采纳率:0%
帮助的人:4193
展开全部
是的,完全没有必要使用引用,只需要传LNode *或者LinkList就可以了,函数都没有改变L的值,也就没必要用引用。我用代码试了,不用引用完全没有问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jwkwy
2010-09-25 · TA获得超过117个赞
知道答主
回答量:156
采纳率:0%
帮助的人:99.9万
展开全部
L的地址没变但是整个链表内容变了,L指向的地址有可能变大了(malloc)。所以要引用。你可以写个程序试试,不引用会出错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式