下面是105楼到135楼问题参考答案,希望 大家思考,灵活理解不能死了。
答案由物联网1131班林伟存组收集整理,在此对他们的劳动表示感谢!
105楼:当一个函数运行结束之后,它会释放他运行时所建立起来的一些变量的内存,反正就是删除了这个变量(请问这个知识点我有没有记错?);然后如果用构造函数动态的建立对象,当构造函数运行结束时,按理说应该也会释放吧?但是按照书里例子的理解,是没有被释放的。不然就没有后续操作了;跪求解.......构造函数运行结束,有没有释放内存,如果没有,为什么?
答:new操作符会在栈内存中申请一块内存,也会堆内存中声明一块内存。函数结束时只是释放了栈内存。
106楼:单链表的头结点的是否为空?又或者仅有指针域?头结点是如何作用于单链表使之减少bug的出现?至今没弄明白。
答:头结点和其它结点类型相同,有数据域,只是不存放数据。增加了头结点后,链表为空和非空时,访问结点均是一个同类型的数据结点。如果没头结点,空链表操作的不是一个结点数据,只是一个指针。
107楼:循环单链表的主要优点是什么?线性表的逻辑顺序和存储顺序总是一致的吗?
答:循环单链表从任一结点出发可以扫描到其他结点,比较灵活;
线性表的逻辑顺序和存储顺序不一定一致
108楼:ADT数据数据类型究竟是什么的?
答:抽象数据类型的缩写 abstract data type 。表示数据结构的抽象模型。数据结构是一个数据概念的定义,通过各种工具对数据结构的概念类型的描述称之为抽象数据类型,简单地说是指一个数学模型以及定义在该模型上的一组操作。
ADT包括数据数据元素,数据关系以及相关的操作。
即ADT
{
数据对象:(数据元素集合)
数据关系:(数据关系二元组结合)
基本操作:(操作函数的罗列)
}
109楼:线性表采用链接储存时,它的地址有什么特点?
答:就是“链”的特点。
110楼:为什么说双链表是可由一个尾指针唯一确定的链表?
答:双链一般还是定义头指针。链表均是由一个指针确定的一个链。只要通过链表“指针”就可以依次拉出各个结点,所以链表指针就重要了。在链式存储结构的类定义里,定义的指针就是指向链表的。
111楼:间接寻址如何实现?
答:间接寻址是在直接寻址的基础上面建立起来的,也就是直接寻址得到的数据是一个地址,通过这个地址找到最终的数据,也就是两次寻址,第一次得到的是地址,第二次才是目标数据。
112楼:单链表的应用中一元多项式求和当出现p->exp等于q-.exp且系数相加不为0,为什么是将指针p后移并删除节点q?这样做的根据是什么?能不能是将指针q后移,并删除结点p?
答:因为课本中多项式求和结果存储在单链表A中;若多项式求和结果存储在单链表B中的话,则是将指针q后移,并删除结点p。
113楼:为何在单链表这么多操作中 只有删除算法在最后要返回被删元素值 有什么意义嘛?
答:删除结点,也可以返回其值,在主调程序中显示,实现人机交互,可以说“XX被删除了,删除的值是XX”。这本身不是问题,在实际中如果不返回其值也可以。还有删除的其可能是要加入其它运算等。总之删除要理解删除过程。
114楼:对静态链表的插入与删除操作示意图表示疑惑!图(c)或(d)中的等于号(赋值号)那个位置不知道是什么意思?
答:静态链表的next域存放该元素的后继元素所在数组下标,等于号表示该下标在插入操作时变成后者。如:2=5,表示在插入时,next域存放的数组下标由2变成5。
115楼:对于间接寻址,为什么当元素占用空间较大时,会比属虚标的插入快得多?
答:顺序表插入元素需要移动大量数据本身,这里只移动元素在地址数组中的地址信息。数据还在原来地方。如果数据是大块头。也就是说比地址信息量大,当然就省事了。
116楼:链表从末尾指针如何访问到链表中的任意结点?
答:如果使用尾指针,尾指针指向的是尾结点,而尾结点指针域是指向了头结点,而头结点呢后指向第一个数据结点。。。。而形成一个环。
117楼:线性表里面的数据是相同类型的,不同类型的数据不可以用线性结构么???
答:对于一个结点模块整体而言,一般是属同一个类型。但对于结点内部而言,可以由不同类型的数据集合而成。
118楼:什么情况下单链表是不能带头结点的?
答:任何情况下都得带头结点
119楼:老师,在书上42页下面插入那里,感觉“p->next”在第二步表示p结点的下一个结点ai,而在第四步中它又表示P结点本身的后继结点。是我理解错误吗?
答:在图中,这只是一个指针,指向的是前边的结点,也就是ai结点。四步均没发生移动。
120楼:老师,就是那个双链表的插入操作代码,记得原来是等号后面的赋值给前面的那个呀。怎么那里的箭头指向不一样呢?例如:s->prior=p,到底是谁指向谁呢,求解答
答:“等号赋值”是千年等一回,对你的心:含义功能永远不变。变的是你的心。s->prior=p是将后边的p赋给s指向结点的prior域。结果是prior和p同时指向一个对象了,(p这时有竞争对手了。三角恋形成了)
121楼:请问用线性表找表中某元素,用哪种存储方法最快捷?为什么
答:要看查询条件。根据不同查找条件进行分析。
122楼:请问用线性表找表中某元素,用哪种存储方法最快捷?为什么
答:要看查询条件。根据不同查找条件进行分析。
123楼:无参构造函数和有参构造函数有什么区别和作用?析构函数的作用是什么?
答:以单链表为例,二者结果分别就是P32图a和b。析构则是回收不用的元素空间。建议看看上学期的C++教程类的部分。
124楼:双链表的插入和删除操作比较难懂,该怎么去学习和理解?
答:理解方法思想;讨论具体操作过程,并要画图帮助理解;多实践操作验证。没有它法。
125楼:老师,怎么我从我的链接那里进入我的是进不了,说没开通博客
答:这个不是问题。
126楼:空双链表与空循环双链表的存储示意图是一样的吗?
答:相同的是均生成一个头结点,且均可由first来指向。但结点自己的指针域是不一样的。循环双链的空链头结点的nex和prior均指向自己,而非循环双链的可以为空。请真正正解并能图示。
127楼:这是我的博客
答:这个不是问题。
128楼:书中P44在进行删除操作时最后一个avail=q,既然说avail是空闲链头指针(也就是 所有空闲数组单元组成的单链表)怎么还能够指向有数据的结点p
答:P指向结点并没删除,删除的是Q指向的结点。删除的是原来a2.
129楼:在循环链表中怎样用循环条件终止循环?如果用用作循环变量的工作指针是否等于某一指定指针的话,由于指定指针的位置会不会只查询了一半
答:你考虑一下,从一个圆的一点出发,顺一个方向再回到这点,是走了一圈还是走了半圈?
130楼:老师 对于静态链表的的插入和删除操作我仍不能很好理解
答:静态链表的next域存放该元素的后继元素所在的数组下标,理解这个后会比较好理解插入和删除操作。
131楼:在约瑟夫环问题中讲到“为了统一对表中任意结点的操作,循环链表不带头结点”,怎么理解?
答:这个游戏是要杀头的,可不能多一个“非人”结点。
132楼:删除函数中部分代码q=p->next;x=q->data;p->next=q->next;delete q;
x=q->data代码删除后程序依然能正常编译,为什么还要用x暂存q指向的数据域?q=p->next是不是只把p指向的1个数据域赋给q?那为什么删除函数该部分代码中不是
else
{ while(p!=NULL){
q=p->next; p->next=q->next;
delete q; }
}?
答:x=q->data代码删除后程序肯定能正常编译,x暂存q指向的数据域是想在后面返回删除的值,如果不返回就可以不要这个语句。
133楼:两个多项求和实际上是对节点p的指数域和节点q的指数域进行比较,他们会出现三种情况,我不是很懂这三种情况,他们之间哪个更方便使用?
答:这个你可以列出具体的两个多项式相加会比较好理解,没有说哪个比较方便使用的说法吧。
134楼:为什么工作指针p后移不能写作p++?
答:如果指针p是指针类型的量,p++就是向后行移动一个它指向元素的空间,有时,我们所说的指针p并不是指针类型的量,并且后移指针并不一定是加1,比如说,是将后面元素的下标符给它,这时其值就难说就是加1了。
135楼:请问头结点的数据域是空的还是可以放信息的呢?
答:自己的地盘自已作主。你家的空房子想放啥都行。