数据结构(c++描述):关于列表归并,请大家帮我看看这个merge函数的形参

已经有了这两个东西--1.struct:ListNode<T>里面存有pred、succ指针,以及Tdata;还有addAsPred(Te);和addAsSucc(Te)... 已经有了这两个东西--
1.struct:ListNode<T>
里面存有 pred、succ指针,以及T data;
还有addAsPred(T e); 和 addAsSucc(T e);这些function

2.列表模板类:List<T> 里面有
ListNode<T>* head; ListNode<T>* tail; int size;
以及很多函数...(我只写下文提到的)
T remove( ListNode<T>* p);
ListNode<T>* insertBefore(ListNode<T>* p, T const& e);

List<T>中有一个成员函数merge,(前提是有序列表)作用是 将当前列表中自p起的n个元素,与列表L中自q起得m个元素归并到一起:
template<class T>
void List<T>::merge(ListNode<T>*& p,int n,List<T>& L,ListNode<T>*q,int m){
ListNode<T>* pp = p->pred;
while(m>0){
if( n>0 && ( p->data <= q->data ) ){
if( q == ( p = p->succ ) )break;
n--;
}else{
insertBefore(p, L.remove( (q = q->succ ) -> pred ) );
m--;
}
p = pp->succ;
}
}

我实在不明白这个形参:ListNode<T>*& p
为什么要写“ListNode<T>*&”呢? 叫做"指针的引用"?
单纯写指针(ListNode<T>* )不行么?如果不行,ListNode<T>*q 为什么就可以了呢?为什么导入p和q用不同的方式呢?
这个merge是叫做“有序列表的二路归并“,是递归函数mergesort()的一个环节,我并不是很理解..
但是我现在主要的问题是那个形参,希望各位从语法的角度,或者从“模板类的指针的引用”这方面 帮我一下就好了......

我很基础请您通俗哈.....
展开
 我来答
linlin_pp
2012-11-12 · TA获得超过388个赞
知道小有建树答主
回答量:213
采纳率:0%
帮助的人:59.1万
展开全部
这里的归并是将列表L中自q起的m个元素有序的插入到现有列表,也就是p所在列表L1;在这个过程中,原p的值是需要改变的,所以要用引用;而q只需要传值即可(也就是值的copy就可以),如果只是写ListNode<T>* ,则只是copy了一份原列表L1,而原列表L1并不会改变。和下面这个例子一样:
void change(int &a, int &b)
{
int t;
t = a;
a = b;
b = t;
}
如果不用引用,将实际a和b并不会进行交换。
ListNode<T>* 想相当于 int;&p相当于&a
光点科技
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件... 点击进入详情页
本回答由光点科技提供
笃侠6A
2012-11-12 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3262万
展开全部
ListNode<T>*& p 和 ListNode<T>* p 的不同之处在于:
使用前者,如果在函数体中改变了p的值(即改变了p的指向),则这种改变能带给与p对应的实参(即调用后实参的指向会改变)
如果使用后者,则在函数体中对p的值的改变,不会影响与p对应的实参(即调用后实参的指向不变)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式