ImageVerifierCode 换一换
格式:DOCX , 页数:57 ,大小:46.25KB ,
资源ID:17215669      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17215669.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++第七章习题解答newWord文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++第七章习题解答newWord文档下载推荐.docx

1、(2)链表整个丢失(3)会发生泄漏(4)顺序查找7.1.8 对链栈,链的生成必须是向 (1) 生成,最新压栈的元素(结点),放在 (2) 位置,弹出时从 (3) 删除结点。对链队,采用向 (4) 生成,新入队的结点放在链的 (5) ,出队操作在 (6) 位置。(1)向前(2)链表头的位置(3)链表头(4)向后(5)尾部(6)链表头7.1.9 在计算机中进行表达式的计算,为解决优先级和运算的结合性,必须使用 (1) 和 (2) 。在中缀表达式中,每个双目运算符放在 (3) 。(1)数栈(2)运算符栈(3)它的两个运算符之间7.1.10 为了能重复利用一个队空间,要求把队说明成一个逻辑上的 (1)

2、 。(1)循环队列7.1.11 二叉树的特点是:(1)每个结点最多有两个孩子(2)子树有左右之分7.1.12 二叉树的遍历是按 (1) 分类,所谓中序遍历是 (2) 。(1)访问子树根节点次序(2)先遍历该子树根结点的左子树回来后,接着再访问根结点,最后遍历右子树7.1.13 二叉排序树又称 (1) 或 (2) 。其左子树上的所有结点均小于根结点的数据值,而右子树上的所有结点均大于根结点的数据值时,采用 (3) 就可以得到一个 (4) 。(1)二叉搜索树(2)树表(3)中序遍历(4)升序序列7.2 简答题7.2.1 new运算符为一个变量或对象分配存储空间和为一个数组分配存储空间,使用方法上有

3、什么不同?对应的delete运算符使用有什么不同?答:为一个变量或对象分配存储空间其使用的格式如下:指针变量名=new 类型名(初始化式);对于数组进行动态分配和撤销的格式为:指针变量名=new 类型名下标表达式;后者多一个下标表达式,同时不能进行初始化。对应的delete运算符使用分别为:delete 指针名;delete 指向该数组的指针变量名;后者多一个方括号,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。delete 的方括号中不需要填数组元素数,系

4、统自知。即使写了,编译器也忽略。7.2.2 用delete删除p所指向的无名对象时,p指针也同时被删除了,对不对?为什么?不对。注意这时释放了p所指向的无名对象占用的内存空间,也就是撤销了该无名对象,称动态内存释放(dynamic memory deallocation),但指针p本身并没有撤销,它仍然存在,该指针所占内存空间并未释放。7.2.3 为什么动态建立类对象数组时,类的定义一定要有缺省的构造函数?new后面类(class)类型也可以有参数。这些参数即构造函数的参数。但对创建数组,没有参数,只能调用缺省的构造函数。7.2.4 要实现深拷贝,自定义的拷贝构造函数应该怎样设计?如果类中有一

5、个数据成员为指针,该类的一个对象中的这个指针p,指向了动态分配的一个堆对象。深拷贝时要给新建立的对象独立分配一个堆对象。这时拷贝的构造函数应该设计为:先拷贝对象主体,再为新建对象的指针分配一个堆对象,最后用原对象的堆对象拷贝新对象的堆对象。即分三步完成。7.2.5 在单链表模板中为什么要把List类说明成Node的友元类?为了直接访问结点的私有成员数据,以简化程序。7.2.6 双向链表与单向链表相比,操作上有什么优点?双向链表可以很方便地找到表结点的前驱和后继。单链表只能找后继。如要找前驱,必须从表头开始搜索,并一般要用两个工作指针。7.2.7 对比顺序栈与链栈各自的长处和短处。顺序栈可以随机

6、访问其中的元素,而链栈只能顺序访问。顺序栈必须先开一定大小内存空间,执行起来简单,速度快,但可能溢出。链栈内存空间随用随开,不会溢出,但执行复杂(不断地动态分配),速度慢。7.2.8 写出二叉树的定义。二叉树是结点的一个有限集合,该集合或为空,或是由一个根结点及两棵分别称为左子树和右子树的(注意有左右之分)互不相交的二叉树组成,其中左右子树分别可以为空子树或均为空树。7.2.9 什么是二叉树的遍历?所谓二叉树的遍历(binary tree traversal),就是遵从某种次序,查巡二叉树的所有结点,每个结点都被访问一次,而且仅访问一次。所谓“访问”指对结点施行某些操作,但不破坏它原来的数据结

7、构。二、编程与综合练习题7.3 给单链表类模板增加两个成员函数:删除链表中所有数据域为指定值的结点和取出链表中第K个元素(从1开始计数)。解:这两个成员函数添在单链表类模板中(ep7_3.h),删除函数中要比较数据域,该比较运算符应该在数据域类中重载(ep7_3data.h)。借用习题6.9字符串类Mystring,仅重载运算符=(拷贝),=(strcmp)。本例数据域用了类mystring,可以用其他类代替,这样的组织更通用,是标准的编程方式。习题中仅此题作了标准编程。使用整数型见解2。/ep7_3data.h#includeconst int n=256;class mystring ch

8、ar stringn; int maxsize; int last;public: mystring() last=-1; maxsize=n; string0=0; mystring(char *s)/本例为了简化,健壮性并不好 do last+; stringlast=slast; while(slast!=); mystring(mystring & ms) stringlast=ms.stringlast; while(lastms.last); mystring() void show()coutstringendl;/新增加的显示mystring的函数 mystring opera

9、tor=(const mystring & bool operator=(mystring &;mystring mystring:operator=(const mystring & ms)/返回值不可为引用 last=-1; do last+; stringlast=ms.stringlast; while(last return *this;bool mystring:operator=(mystring & int i=0,k; if(last!=ms.last) return false; k=stringi-ms.stringi; i+; while(k=0&ilast); if(

10、k!=0) return false; else return true;/ep7_3.h#includeep7_3data.h/首先看结点组织,采用结点类,凡与结点数据和指针操作有关函数作为成员函数templateclass List;class Node T info; /数据域 Node *link; /指针域 Node(); /生成头结点的构造函数 Node(const T & data);/生成一般结点的构造函数 void InsertAfter(Node* P); /在当前结点后插入一个结点* RemoveAfter(); /删除当前结点的后继结点,返回该结点备用 T & Geti

11、nfo();/增加取数据域函数 friend class List /以List为友元类,List可直接访问Node的私有函数,与结构一样方便,但更安全template Node()link=NULL;Node(const T & data) info=data; link=NULL;void NodeInsertAfter(Nodelink=link; link=p;Node* Nodelink; return tempP;Getinfo()return info;/增加取数据域函数/再定义链表类,选择常用操作:包括建立有序链表、搜索遍历、插入、删除、取数据等class List *head

12、,*tail;/链表头指针和尾指针 List(); /构造函数,生成头结点(空链表) List(); /析构函数 void MakeEmpty(); /清空一个链表,只余表头结点* Find(T data); /搜索数据域与data相同的结点,返回该结点的地址 int Length(); /计算单链表长度 void PrintList(); /打印链表的数据域 void InsertFront(Node* p); /可用来向前生成链表,在表头插入一个结点 void InsertRear(Node /可用来向后生成链表,在表尾添加一个结点 void InsertOrder(Node *p); /

13、按升序生成链表*CreatNode(T data); /创建一个结点(孤立结点)*DeleteNode(Node /删除指定结点*RemoveAll(T &/*删除链表中所有数据域为指定值的结点*/*GetNode(int);/*取出链表中第K个元素(从1开始计数)*/ListList() head=tail=new Node();List() MakeEmpty(); delete head;void Listlink!=NULL) tempP=head- head-link=tempP- /把头结点后的第一个节点从链中脱离 delete tempP; /删除(释放)脱离下来的结点 tail

14、=head; /表头指针与表尾指针均指向表头结点,表示空链* List while(tempP!=NULL&tempP-info!=data) tempP=tempP- /搜索成功返回该结点地址,不成功返回NULLint List int count=0; tempP=tempP- count+; return count;PrintList() tempP-info.show();/不能用cout,只能改用show()。 coutInsertFront(Node head-link=p; if(tail=head) tail=p;InsertRear(Node tail- tail=p;In

15、sertOrder(NodeinfoInsertAfter(p); /插在tempP指向结点之前,tempQ之后 if(tail=tempQ) tail=tempQ-CreatNode(T data)/建立新节点*tempP=new Node(data);DeleteNode(Node=p) tempP=tempP- if(tempP-link=tail) tail=tempP; return tempP-RemoveAfter();/本函数所用方法可省一个工作指针,与InsertOrder比较RemoveAll(T &p)/*利用已有的DeleteNode()*/ bool b=false;

16、*TempP=head-link,*TempR; while(TempP!=NULL)/*也可以利用尾指针*/ if(TempP-info=p) TempR=DeleteNode(TempP); TempP=TempP- return TempR;GetNode(int i) int j=1; if(i0) return NULL; if(i=0) return head;ji) j+; return TempP;/ep7_3.cppep7_3.hvoid main() const int h=9; int i; List list1; *n1,*P1; mystring m(东南大学),sph=南京大学,交通大学清华大学天津大学, 复旦大学浙江大学同济大学 for(i=0;h;i+) spi.show();i+) P1=list1.CreatNode(spi); list1.InsertFront(P1);/向前生成list1 list1.PrintList(); list1.RemoveAll(m);要求寻找第几个节点? cini; n1=list1.GetNode(i); n1-Getinfo().show();解2:这两个成员函数添在单链表类模板中(ep7_3_0.h),本例数据域使用整数型/ep7_3_0.h

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1