有关数据结构的问题?

龙仔仔001 2010-12-27 11:31:37
在学习线性表的单链表中,如算法:(取出第i个元素)(其中L为带头结点的单线性表)
status GetElem_L(linklist L,int i,ElemType &e)
{ p=L->next;j=i;
while(p&&j<i){
p=p->next;++j);
}
if(!p||j>i) return 0;
e=p->data;
return 1;
}
有如算法:(在带头结点的单线性表L中第i个位置之前 插入元素e)
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 0;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=e;
return 1;
}
说说两个算法中的linklist L和Linklist &L的区别,主要是为啥第二个带&?带&与不带&有啥区别?

...全文
86 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
&是引用,剩余的google一下:C++引用
就想叫yoko 2010-12-27
  • 打赏
  • 举报
回复
你这里的区别在于
传引用的时候函数里面就能修改实参的值
噢噢噢噢 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dizuo 的回复:]

&是引用,剩余的google一下:C++引用
[/Quote]
c中没有引用啊
無_1024 2010-12-27
  • 打赏
  • 举报
回复
一个是引用副本 一个是直接值传递
按值传递 与 按引用传递
按值传递不能来个保存修改
但是按引用传递可以保存修改
噢噢噢噢 2010-12-27
  • 打赏
  • 举报
回复
带&的在参数传递时,传的是地址。不带&的要建立临时对象

我感觉是这样。。昨天刚写完这个
  • 打赏
  • 举报
回复
引用...
ryfdizuo 2010-12-27
  • 打赏
  • 举报
回复
&是引用,剩余的google一下:C++引用
pstrunner 2010-12-27
  • 打赏
  • 举报
回复
1楼已经说明白啦。
欣客 2010-12-27
  • 打赏
  • 举报
回复
&是引用。 引用和指针从汇编的角度来说都是地址参与运算。
楼主不能理解可以先记住一点,加&会改变以前的值,当函数结束之后,这个值会被改变。
int n = 5
add(int& n)
{
n++;
}
n 等于6.

不加&参与运算的拷贝一份参与运算。不改变以前的值。
int n = 5
add(int& n)
{
n++;
}
n 等于5.

我们再来分析
status GetElem_L(linklist L,int i,ElemType &e)
这个函数只需要用到L节点中的值,不需要改变L本身的值,所以可以不加&。


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 0;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=e; //有错误,可定是写错了,p->next = s.
return 1;
}

从代码来说,这里不加&也是可以的,但是有种情况是一定要加的,就是链表是空的,需要改变传递的L。

64,680

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧