数据结构习题解析面向对象方法和c语言描述殷人昆优质Word格式.docx
- 文档编号:14584538
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:30
- 大小:58.68KB
数据结构习题解析面向对象方法和c语言描述殷人昆优质Word格式.docx
《数据结构习题解析面向对象方法和c语言描述殷人昆优质Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题解析面向对象方法和c语言描述殷人昆优质Word格式.docx(30页珍藏版)》请在冰豆网上搜索。
②数据成员极其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;
3施加于该数据结构上的操作。
数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储不是一码事,是与计算机存储无关的。
因此,数据的逻辑结构可以看作是从具体问题中抽象出来的数据模型,是数据的应用视图。
数据的存储结构是逻辑数据结构在计算机存储器中的实现(亦称为映像),它是依赖于计算机的,是数据的物理视图。
数据的操作是定义于数据逻辑结构上的一组运算,每种数据结构都有一个运算的集合。
例如搜索、插入、删除、更新、排序等。
1-3数据的逻辑结构分为线性结构和非线性结构两大类。
线性结构包括数组、链表、栈、队列、优先级队列等;
非线性结构包括树、图等、这两类结构各自的特点是什么?
线性结构的特点是:
在结构中所有数据成员都处于一个序列中,有且仅有一个开始成员和一个终端成员,并且所有数据成员都最多有一个直接前驱和一个直接后继。
例如,一维数组、线性表等就是典型的线性结构
非线性结构的特点是:
一个数据成员可能有零个、一个或多个直接前驱和直接后继。
例如,树、图或网络等都是典型的非线性结构。
1-4.什么是抽象数据类型?
试用C++的类声明定义“复数”的抽象数据类型。
要求
(1)在复数内部用浮点数定义它的实部和虚部。
(2)实现3个构造函数:
缺省的构造函数没有参数;
第二个构造函数将双精度浮点数赋给复数的实部,虚部置为0;
第三个构造函数将两个双精度浮点数分别赋给复数的实部和虚部。
(3)定义获取和修改复数的实部和虚部,以及+、-、*、/等运算的成员函数。
(4)定义重载的流函数来输出一个复数。
抽象数据类型通常是指由用户定义,用以表示应用问题的数据模型。
抽象数据类型由基本的数据类型构成,并包括一组相关的服务。
//在头文件中定义的复数类
#ifndef_complex_h_
#define_complex_h_
#include<
iostream.h>
classcomlex{
public:
complex(){Re=Im=0;
}//不带参数的构造函数
complex(doubler){Re=r;
Im=0;
}//只置实部的构造函数
complex(doubler,doublei){Re=r;
Im=i;
}//分别置实部、虚部的构造函数
doublegetReal(){returnRe;
}//取复数实部
doublegetImag(){returnIm;
}//取复数虚部
voidsetReal(doubler){Re=r;
}//修改复数实部
voidsetImag(doublei){Im=i;
}//修改复数虚部
complex&
operator=(complex&
ob){;
;
}//复数赋值
operator+(complex&
ob);
//重载函数:
复数四则运算
operator–(complex&
operator*(complex&
operator/(complex&
friendostream&
operator<
<
(ostream&
os,complex&
c);
//友元函数:
重载<
private:
doubleRe,Im;
//复数的实部与虚部
};
#endif
//复数类complex的相关服务的实现放在C++源文件中
#include<
math.h>
#include“complex.h”
complex&
complex:
:
operator+(complex&
ob){
//重载函数:
复数加法运算。
complex*result=newcomplex(Re+ob.Re,Im+ob.Im);
return*result;
}
复数减法运算
complex*result=newcomplex(Re–ob.Re,Im–ob.Im);
return*result;
}
复数乘法运算
complex*result=
newcomplex(Re*ob.Re–Im*ob.Im,Im*ob.Re+Re*ob.Im);
return*result;
}
){
复数除法运算
double;
complex*result=newcomplex((Re*ob.Re+Im*ob.Im)/d,
(Im*ob.Re–Re*ob.Im)/d);
return*result;
friendostream&
os,complex&
//友元函数:
,将复数ob输出到输出流对象os中。
returnos<
ob.Re<
(ob.Im>
=0.0)?
“+”:
“-”<
fabs(ob.Im)<
“i”;
1-5用归纳法证明:
(1)
(2)
(3)
【证明】略
1-6什么是算法?
算法的5个特性是什么?
试根据这些特性解释算法与程序的区别。
通常,定义算法为“为解决某一特定任务而规定的一个指令序列。
”一个算法应当具有以下特性:
①有输入。
一个算法必须有0个或多个输入。
它们是算法开始运算前给予算法的量。
这些输入取自于特定的对象的集合。
它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。
②有输出。
一个算法应有一个或多个输出,输出的量是算法计算的结果。
③确定性。
算法的每一步都应确切地、无歧义地定义。
对于每一种情况,需要执行的动作都应严格地、清晰地规定。
④有穷性。
一个算法无论在什么情况下都应在执行有穷步后结束。
⑤有效性。
算法中每一条运算都必须是足够基本的。
就是说,它们原则上都能精确地执行,甚至人们仅用笔和纸做有限次运算就能完成。
算法和程序不同,程序可以不满足上述的特性(4)。
例如,一个操作系统在用户未使用前一直处于“等待”的循环中,直到出现新的用户事件为止。
这样的系统可以无休止地运行,直到系统停工。
此外,算法是面向功能的,通常用面向过程的方式描述;
程序可以用面向对象方式搭建它的框架。
1-7设n为正整数,分析下列各程序段中加下划线的语句的程序步数。
(1)for(inti=1;
i<
=n;
i++)
(2)x=0;
y=0;
for(intj=1;
j<
j++){for(inti=1;
i++)
;
for(intj=1;
=i;
j++)
for(intk=1;
k<
k++)for(intk=1;
=j;
k++)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
x=x+y;
}
(3)inti=1,j=1;
(4)inti=1;
while(i<
=n&
&
j<
=n){do{
i=i+1;
j=j+i;
for(intj=1;
j++)
}i=i+j;
}while(i<
100+n);
(3)i=1时,i=2,j=j+i=1+2=2+1,
i=2时,i=3,j=j+i=(2+1)+3=3+1+2,
i=3时,i=4,j=j+i=(3+1+2)+4=4+1+2+3,
i=4时,i=5,j=j+i=(4+1+2+3)+5=5+1+2+3+4,
……
i=k时,i=k+1,j=j+i=(k+1)+(1+2+3+4+…+k),
解出满足上述不等式的k值,即为语句i=i+1的程序步数。
(4)
一般地,
求出满足此不等式的k值,即为语句i=i+j的程序步数。
1-8试编写一个函数计算n!
*2n的值,结果存放于数组A[arraySize]的第n个数组元素中,0≤n≤arraySize。
若设计算机中允许的整数的最大值为maxInt,则当n>
arraySize或者对于某一个k(0≤k≤n),使得k!
*2k>
maxInt时,应按出错处理。
可有如下三种不同的出错处理方式:
(1)用cerr<
及exit
(1)语句来终止执行并报告错误;
(2)用返回整数函数值0,1来实现算法,以区别是正常返回还是错误返回;
(3)在函数的参数表设置一个引用型的整型变量来区别是正常返回还是某种错误返回。
试讨论这三种方法各自的优缺点,并以你认为是最好的方式实现它。
#include"
iostream.h"
#definearraySize100
#defineMaxInt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构习题解析面向对象方法和c 语言描述殷人昆优质 数据结构 习题 解析 面向 对象 方法 语言 描述 殷人昆 优质