数据结构与stl课后答案.pdf
《数据结构与stl课后答案.pdf》由会员分享,可在线阅读,更多相关《数据结构与stl课后答案.pdf(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构与st I 课后答案习题11 .填空题(1)()是指数据之间的相互关系,即数据的组织形式。通常人们认为它包含三个方面的内容,分别为数据的()、()及其运算。答案:数据结构 逻辑结构 存储结构(2)()是数据的基本单位,在计算机程序中通常作为一个整体进行处理。答案:数据元素(3)数据元素之间的不同逻辑关系代表不同的逻辑结构,常见的逻辑结构有()、()、()和()。答案:集合线形结构树结构图结构(4)数据的存储结构考虑的是如何在计算机中存储各个数据元素,并且同时兼顾数据元素间的逻辑关系。基本的存储结构通常有两大类:()和()。答案:顺序存储结构链式存储结构(5)通常个问题可以有多种不同的算
2、法,但每个算法必须满足5个准则:输入、输出、()、()和()。答案:有穷性确定性可行性(6)通常通过衡量算法的()复杂度和()复杂度来判定一个算法的好坏。答案:时间空间(7)常见时间复杂性的量级有:常数阶0()、对数阶0()、线性阶0()、线性对数阶0()、平方阶0()、和指数阶 0()。通常认为,当问题规模较大时,具 有()量级的算法是不可计算的。答案:1 logn n nlogn n2 2n 指数(8)STL提供的标准容器有顺序容器、()和()o答案:排序容器哈希容器(9)算法可认为是STL的精髓,所有算法都是采用()的形式提供的。答案:函数模版(10)通常认为STL由空间管理器、迭代器、
3、泛函、适配器、()和()等六部分构成,其中前面四部分服务于后面两部分。答案:容器算法2.选择题(1)以下结构中,()属于线性结构。A.树 B.图 C.串 D.集合(2)算法描述的方法有很多种,常 常 将()称为算法语言。A.自然语言B.流 程 图 C.伪 代 码 D.程序设计语言(3)现实生活中的家族谱,可认为是一种()结构。A.树 B.图 C.集 合 D.线性表(4)手机中存储的电话号码簿,可认为是 种()结构。A.树 B.图 C.集 合 D.线性表(5)N P 问 题 是()。A.非多项式时间问题,即非P 问 题 B.非确定性多项式时间问题C.P 问题的子集D.与 P 问题不相交的(6)以
4、 下()不属于STL的顺序容器。A.向 量(vector)B.列 表(list)C.队 列(queue)D.双端队列(deque)(7)下面带有 标记的语句的频度(n10)是(for(int i=0;in-1;i+)for(int j=i+1 ;jn;j+)cout ij endl;A.n*(n-1)/2 B.n*n/2 C.n*(n+1)/2 D.不确定CCADBCA分析:3.分析以下程序段的时间复杂度。(1)for(i=l;i=n;i+)k+;for(j=1;j=n;j+)m+=k;)(2)for(i=l;i=n;i+)k+;for(j=1;j=n;j+)m+=k;(3)i=l;while
5、(i=n)i*=2;(4)i=l;while(i=n)i+=2;(5)k=100,i=10;do if(in)break;i+;while(i k);(6)for(i=0;i100;i+)for(j=0;ji;j+)sum+=j;(7)y=0;while(y*y*y=n)y+;(8)ini i=0;while(in&ai!=k)i+;return i=n?-1:i;答案:(1)0(n2)(2)0(n)(3)O(logn)(4)O(n)(5)0(1)(6)0(1)(7)0(n 1/3)(8)0(n)4.将整数设计为一个类,将整数相关的常见数学运算设计为类的接口并进行实现,如求与给定值的最大公约数
6、、最小公倍数、枚举所有因子等。解:#include math.h#include vectorusing std:vector;定义自然数类class NaturalNumberpublic:NaturalNumber(unsigned long int n=0):num(n)unsigned long int GreatestCommonDivisor(NaturalNumber&nn);求解最大公约数unsigned long int LeaseCommonMultiple(NaturalNumber&nn);求解最小公约数int Getfectors(vector&factors);求所
7、有因子,存储在 factors 中,函数返回因子个数unsigned long int GetNumber()return num;/其它外部接口private:unsigned long int EUCLI D(NaturalNumber&n);欧几里德算法求解最大公约数unsigned long int num;存储真正的自然数;返回欧几里德算法求解最大公约数unsigned long int NaturalNumber:EUCLI D(Natural Number&nn)(unsigned long int m=(num nn.num)?num:nn.num;较大的自然数赋值给 muns
8、igned long int n=(num nn.num)?num:nn.num;较小的自然数赋值给 nunsigned long int r=m%n;while(r!=0)m=n;n=r;r=m%n;)return n;)返回最大公约数unsigned long int NaturalNumber:GreatestCommonDivisor(NaturalNumber&nn)(return EUCLID(nn);)返回最小公倍数unsigned long int NaturalNumber:LeaseCommonMultiple(NaturalNumber&nn)(unsigned long
9、 int temp=EUCLI D(nn);return num*nn.GetNumber()/temp;)int NaturalNumber:GetFactors(vector&factors)int t=0;int m=sqrt(double)num);vector bigfactors;for(unsigned long int i=1;im;i+)(if(0=num%i)t+=2;factors.push_back(i);bigfactors.push_back(num/i);)if(m*m=num)t+;factors.push_back(m);vector :iterator it
10、=bigfactors.end();if(bigfactors.size()do(it-;factors.push_back(*it);while(it!=bigfactors.begin();return t;)void main()NaturalNumber p(1);int xx=p.GreatestCommonDivisor(NaturalNumber(120);int yy=p.LeaseCommonMultiple(NaturalNumber(120);vector f;int t=p.GetEactors(f);)习题21.填空题(1)在一个单链表中,已知每个结点包含data和
11、next两个域,q 所指结点是p 所指结点的直接前驱,若在q 和 p 之间插入s 所指结点,则执行()和()操作。答案:q-next=s;s-next=p;或 s-next=q-next;q-next=s;(2)表长为n 的顺序表,当在任何位置上插入或删除一个元素的概率相等时、插入一个元素所需移动元素的平均个数为(),删除一个元素需要移动元素的平均个数为()。答案:n/2(n-1)/2(3)表长为0的线性表称为()。答案:空表(4)动 态 内 存 管 理 是 操 作 系 统 的 基 本 功 能 之 其 作 用 是 响 应 用 户 程 序 对 内 存 的()和()请求。答案:申请释放(5)顺序表
12、多采用()实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为()。而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为()。因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采 用()表比较合适。答案:数 组。0(n)顺序(6)在链表某个位置上进行插入和删除操作,只需要修改()即可,而无须移动大量元素,操作的时间复杂度为()。而在顺序表中进行插入和删除操作,往往要移动大量元素,平 均 移 动 元 素 的 数 目 为(),平均时间复杂度为()。因此,若对线性表进行频繁的插入和删除操作时,采 用()表相对合适。若插入和删除主要发生在表头和表尾,则 采 用
13、()表更为合适。答案:指 针 0(1)表长的一半0(n)链循环链(7)静态链表一般采用()存储的链表结构。答案:数组(8)对 于 32位 计 算 机 环 境,若 单 链 表 中 的 数 据 类 型 为 整 性,则其存储密度为(),而若为双链表,则存储密度为()。若采用顺序表存储数据,则其存储密度为()。答案:50%33%1(9)向量是最常用的容器,S T L中 向 量 使 用()实现,因此向量具有()表的所有特点,可以快速随机存取任意元素。答案:数组顺序(10)操作系统在运行之初,有一块很大的连续内存块供用户程序申请,通常称之为内存池 或()o答案:堆(11)循环链表与单链表的区别仅仅在于其尾
14、结点的链域值不是(),而是一个 指 向()的指针。答案:NULL(或空指针)头结点2.选择题(1)线性表的顺序存储结构是 种()的存储结构,线性表的链式存储结构是一种()的存储结构。A.随机存取 索引存取 B.顺序存取 随机存取C.随机存取 顺序存取 D.索引存取 散列存取(2)在双向链表p 所指结点之前插入s 所指结点的操作是()。A.p-left=s;s-right=p;p-left-right=s;s-left=p-left;B.p-right=s;p-right-left=s;s-left=p;s-right=p-right;C.s-right=p;s-left=p-left;p-le
15、ft=s;p-left-right=s;D.s-right=p;s-left=p-left;p-left-right=s;p-left=s;(3)若链表是利用6+指针来存储结点的地址,结点空间的分配和收回都是由操作符new和 delete动态执行的,则称该链表为()链表A.单 向 B.双向 C.静 态 D.动态(4)将线性表存储到计算机中可以采用多种不同的方法,按顺序存储方法存储的线性表称为(),按链式存储方法存储的线性表称为()。A.数 组 单 链 表 B.顺序表链表C.向 量 静 态 链 表 D.静态链表动态链表(5)()是 STL中线性表的链式存储形式,STL标准库中一般采用()实现。A
16、.vector数 组 B.lis t单链表C.lis t双向循环链表D.vector单链表(6)顺序表的类型定义可经编译转换为机器级。假定每个结点变量占用k(k=1 个字节,b 是顺序表的第一个存储结点的第一个单元的内存地址,那么,第 i 个结点a i的存储地址为()。A.b+ki B.b+k(i-1)C.b+k(i+1)D.b-1+ki(7)在循环链表中,若不使用头指针而改设为尾指针(rear),则头结点和尾结点的存储位置分别是()。A.real 和 rear-next-next B.rear-next 和 rearC.rear-next-next 和 rear D.rear 和 rear-
17、next(8)有时为了叙述方便,可以对一些概念进行简称,以下说法错误的是()。A.将“指针型变量”简称为“指针”B.将“头指针变量”简称为“头指针”C.将“修改某指针型变量的值”简称为“修改某指针”D.将“p 中指针所指结点”简称为“P值”(9)以下说法错误的是(A.对循环链表来说,从表中任一结点HI发都能通过向前或向后操作而扫描整个循环链表。B.对单链表来说,只有从头结点开始才能扫描表中全部结点。C.双链表的特点是找结点的前趋和后继都很容易。D.对双链表来说,结点*P的存储位置既存放在其前趋结点的后继指针域中,也存放在它的后继结点的前趋指针域中。(10)以下说法正确的是()。A.顺序存储方式
18、的优点是存储密度大、且插入、删除运算效率高。B.链表的每个结点中都至少包含一个指针。C.线性表的顺序存储结构优于链式存储结构。D.顺序存储结构属于静态结构,链式结构属于动态结构。说明:静态链表是链式结构,但属于静态存储结构.链友的每个结点中都至少包含个指针。原题中,“恰好”改为了“至少”。(11)单链表中,增加头结点的目的是为了()A.使单链表至少有一个结点 B.标示表结点中首结点的位置C.方便运算的实现 D.说明单链表是线性表的链式存储实现CDDBC BBDABC3.程序选择题(1)已知L指向带表头结点的非空单链表的头结点,目.P结点既不是首结点,也不是尾结点,试从下列提供的答案中选择合适的
19、语句序列:a.删除P结点的直接后继结点的语句序列是()b.删除P结点的直接前驱结点的语句序列是()c.删除P结点的语句序列是()d.删除首结点的语句序列是()e.删除尾结点的语句序列是()(1)delete Q;(8)P-next=P-next-next(2)Q=P(9)P=P-next(3)L=L-next(10)while(P-next!=Q)P=P-next;(4)P=L(11)while(P!=NULL)P=P-next;(5)Q=P-next(12)while(Q-next!=NULL)P=Q;Q=Q-next;(6)P-next=P(13)while(P-next-next!=NU
20、LL)P=P-next;(7)P=(14)while(P-next-next!=Q)P=P-next;P-next-next答案:a.5 8 1b.2 4 1458 1c.2 4 10 8 1d.4 5 8 1e.4 13 58 1(2)已知p 结点是某双向链表的中间结点,试从下面语句(1)(18)中选择合适的语句序列,完成ae 要求的操作。a.在 p 结点后插入s 结点的语句序列是 ob.在 p 结点前插入s 结点的语句序列是 oc.删除p 结点的直接后继结点的语句序列是 od.删除p 结点的直接前驱结点的语句序列是 oe.删除p 结点的语句序列是 o(1)p-next=p-next-nex
21、t;(10)p-prior,next=p;(2)p-prior=p-prior-prior;(11)p-next-prior=p;(3)p-next=s;(12)p-next-prior=s;(4)p-prior=s;(13)p-prior-next=s;(5)s-next=p;(14)p-next-priorp-prior;(6)s-prior=p;(15)q=p-next;(7)s-next=p-next;(16)q=p-prior;(8)s-prior=p-prior;(17)delete p;(9)p-prior-next=p-next;(18)delete q;答案:a.7 6 12
22、 3b.5 8 13 4c.15 1 11 18d.162 10 18e.149 174.分析以下各程序段的执行结果。(1)程序段一vector ivec(2,100);ivec.push_back(3);ivec.insert(ivec.begin(),10);vector:iterator it=ivec.begin();ivec.erase(+it);ivec.pop_back();ivec.insert(ivec.end(),20);for(it=ivec.begin();it!=ivec.end();it+)cout *it cout endl;答案:10 100 20分析:开始时容
23、器中有 100 1 0 0,然后为 100 100 3,10 100 100 3,10 100 3,10 100,10100 20(2)程序段二int 却=123,4,5;vector ivec(a,a+5);cout l.size:*ivec.size()endl;ivec.resize(WO);cout H2.size:*ivec.size()endl;for(int j=0;j95;j+)ivec.insert(ivec.end()J);cout n3.size:*ivec.size()endl;ivec.resize(WO);ivec.reserve(20);cout H4.size:
24、H ivec.size()endl;答案:1.size:52.size:1003.size:1954.size:100(3)程序段三int a=1,2,3,4,5);list ilist(3,2);ilist.assign(a,a+5);ilist.pop_back();/1 2 3 4ilist.insert(ilist.end(),7);/1 2 3 4 7ilist.popjront();/2 3 4 7ilist.front()=20;/20 3 4 7ilist.sort();/3 4 7 20for(list:iterator it=ilist.begin();it!=ilist.
25、end();it+)cout *it*M;cout endl;答案:3 4 7205.算法设计(1)分别编程实现顺序表类和链表类,并设计完整的测试程序对每个接口进行测试。(2)设 A=(a1,a2,a3,an)和 B=(b1,b2,.,bm)是两个线性表(假定所含数据元素均为整数)。若 n=m 且 ai=bi(i=1,.,n),则称 A=B;若 ai=bi(i=1,.,j)且 aj+1bj+1(jn=m),则称A Bo试编写一个比较A 和 B 的算法,当 A B 是分别输出-1,。或者1。(3)假设有两个按数据元素值递增有序排列的线性表A 和 B,均以单链表作存储结构。编写算法将A 表 和 B
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 stl 课后 答案
限制150内