数据结构第二版_主编殷人昆课后答案

合集下载

数据结构习题解析-面向对象方法和C++语言描述-殷人昆

数据结构习题解析-面向对象方法和C++语言描述-殷人昆

1-1什么是数据? 它与信息是什么关系?【解答】什么是信息?广义地讲,信息就是消息。

宇宙三要素(物质、能量、信息)之一。

它是现实世界各种事物在人们头脑中的反映。

此外,人们通过科学仪器能够认识到的也是信息。

信息的特征为:可识别、可存储、可变换、可处理、可传递、可再生、可压缩、可利用、可共享。

什么是数据?因为信息的表现形式十分广泛,许多信息在计算机中不方便存储和处理,例如,一个大楼中4部电梯在软件控制下调度和运行的状态、一个商店中商品的在库明细表等,必须将它们转换成数据才能很方便地在计算机中存储、处理、变换。

因此,数据(data)是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。

在计算机中,信息必须以数据的形式出现。

1-2什么是数据结构? 有关数据结构的讨论涉及哪三个方面?【解答】数据结构是指数据以及相互之间的关系。

记为:数据结构= { D, R }。

其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。

有关数据结构的讨论一般涉及以下三方面的内容:①数据成员以及它们相互之间的逻辑关系,也称为数据的逻辑结构,简称为数据结构;②数据成员极其关系在计算机存储器内的存储表示,也称为数据的物理结构,简称为存储结构;③施加于该数据结构上的操作。

数据的逻辑结构是从逻辑关系上描述数据,它与数据的存储不是一码事,是与计算机存储无关的。

因此,数据的逻辑结构可以看作是从具体问题中抽象出来的数据模型,是数据的应用视图。

数据的存储结构是逻辑数据结构在计算机存储器中的实现(亦称为映像),它是依赖于计算机的,是数据的物理视图。

数据的操作是定义于数据逻辑结构上的一组运算,每种数据结构都有一个运算的集合。

例如搜索、插入、删除、更新、排序等。

1-3数据的逻辑结构分为线性结构和非线性结构两大类。

线性结构包括数组、链表、栈、队列、优先级队列等; 非线性结构包括树、图等、这两类结构各自的特点是什么?【解答】线性结构的特点是:在结构中所有数据成员都处于一个序列中,有且仅有一个开始成员和一个终端成员,并且所有数据成员都最多有一个直接前驱和一个直接后继。

数据结构(第二版)习题答案第8章

数据结构(第二版)习题答案第8章
(2)500个。
(3)9个顶点。
8.5图8.35所示的是某个无向图的邻接表,试:
(1)画出此图;
(2)写出从顶点A开始的DFS遍历结果;
(3)写出从顶点A开始的BFS遍历结果。
【答】:
(1)图8.35邻接表对应的无向图如图8.35.1所示。
图8.35.1
图8.35题8.5的邻接表
(2)从顶点A开始的DFS遍历结果是:A,B,C,F,E,G,D
活动e
l
l-e关键活动
v0
v1
v2
v3
v4
v5
0
6
4
13
22
25
0
6
5
13
22
25
a0
a1
a2
a3
a4
a5
a6
a7
0
0
6
4
4
13
13
22
0
1
6
5
5
13
15
22
0
1
0
1
1
0
2
0




可见,该AOE网的关键路径是a0,a2,a5,a7。(注:图中箭头指示求解的顺序)
8.12无向图采用邻接表作为存储结构,试写出以下算法
量,这样T’的边数将大于n-1)。这与T’是一棵树的假设
相矛盾。证毕。
8.8对如图8.36所示的连通图,分别用Prim和Kruskal
算法构造其最小生成树。
【答】:
(1)采用Prim算法求解最小生成树的过程如图8.36.1
所示。
图8.36无向连通网
79
C
2
A

数据结构(第二版)习题答案第4章

数据结构(第二版)习题答案第4章
printf("input char to s2:\n");
gets(s2.str);
s2.length=strlen(s2.str);
m=strcompare(s1,s2);
if(m==1) printf("s1>s2\n");
else if(m==-1) printf("s2>s1\n");
free(S);
free(T1);
free(T2);
}
【参考程序
2】:
#include<stdio.h>
#define MAXSIZE 100
typedef struct{
char str[MAXSIZE];
int length;
}seqstring;
for(k=0;k<t2.length;k++)
s->str[c+k]=t2.str[k];
else if(t1.length<t2.length)
{ for(m=s->length-1;m>i-1;m--)
s->str[t2.length-t1.length+m]=s->str[m]; //后移留空
while (i<t->length && j<p->length)
{
if(j==-1||t->str[i]==p->str[j])
{i++; j++;}
else j=next[j];
}
if (j==p->length) return (i-p->length);

数据结构(第二版)习题答案第3章

数据结构(第二版)习题答案第3章

3.1 选择题第3章线性表的链式存储(1)两个有序线性表分别具有n个元素与m个元素且n≤m,现将其归并成一个有序表,其最少的比较次数是( A )。

A.n B.m C.n− 1D.m + n(2)非空的循环单链表head 的尾结点(由p 所指向)满足( C )。

A.p->next==NULL B.p==NULL C.p->next==head D.p==head (3)在带头结点的单链表中查找x应选择的程序体是( C )。

A.node *p=head->next; while (p && p->info!=x) p=p->next;if (p->info==x) return p else return NULL;B.node *p=head; while (p&& p->info!=x) p=p->next; return p;C.node *p=head->next; while (p&&p->info!=x) p=p->next; return p;D.node *p=head; while (p->info!=x) p=p->next ; return p;(4)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。

A.必须是连续的C.一定是不连续的B.部分地址必须是连续的D.连续不连续都可以(5)在一个具有n个结点的有序单链表中插入一个新结点并保持单链表仍然有序的时间复杂度是( B )。

A.O(1) B.O(n) C.O(n2) D.O(n log2n)(6)用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( D )。

A.仅修改队头指针C.队头、队尾指针都要修改B.仅修改队尾指针D.队头,队尾指针都可能要修改(7)若从键盘输入n个元素,则建立一个有序单向链表的时间复杂度为( B )。

殷人昆数据结构习题解答第2章习题

殷人昆数据结构习题解答第2章习题

作为抽象数据类型数组的类声明。

#include <iostream.h> //在头文件“array.h”中#include <stdlib.h>const int DefaultSize = 30;template <class Type> class Array {//数组是数据类型相同的n(size)个元素的一个集合, 下标范围从0到n-1。

对数组中元素//可按下标所指示位置直接访问。

private:Type *elements; //数组int ArraySize; //元素个数public:Array ( int Size = DefaultSize ); //构造函数Array ( const Array<Type> & x ); //复制构造函数~Array ( ) { delete [ ] elements; } //析构函数Array<Type>&operator = ( const Array<Type>& A ); //数组整体赋值(复制)Type& operator [ ] ( int i ); //按下标访问数组元素int Length ( ) const { return ArraySize; } //取数组长度void ReSize ( int sz ); //修改数组长度}顺序表的类定义#include < iostream.h> //定义在头文件“seqlist.h”中#include <stdlib.h>template <class Type> class SeqList {private:Type *data; //顺序表的存放数组int MaxSize; //顺序表的最大可容纳项数int last; //顺序表当前已存表项的最后位置int current; //顺序表的当前指针(最近处理的表项)public:SeqList ( int MaxSize ); //构造函数~SeqList ( ) { delete [ ] data; } //析构函数int Length ( ) const{ return last+1;} //计算表长度int Find ( Type& x ) const; //定位函数:找x在表中位置,置为当前表项int IsIn ( Type& x ); //判断x是否在表中,不置为当前表项Type *GetData ( ) { return current == -1?NULL : data[current]; } //取当前表项的值int Insert ( Type& x ); //插入x在表中当前表项之后,置为当前表项int Append ( Type& x ); //追加x到表尾,置为当前表项Type * Remove ( Type& x ); //删除x,置下一表项为当前表项Type *First ( ); //取表中第一个表项的值,置为当前表项Type *Next ( ) {return current < last ? &data[++current] : NULL; }//取当前表项的后继表项的值,置为当前表项//取当前表项的前驱表项的值,置为当前表项int IsEmpty ( ) { return last == -1;} //判断顺序表空否, 空则返回1; 否则返回0int IsFull ( ) { return last == MaxSize-1;} //判断顺序表满否, 满则返回1; 否则返回0 }2-1 设n个人围坐在一个圆桌周围,现在从第s个人开始报数,数到第m个人,让他出局;然后从出局的下一个人重新开始报数,数到第m个人,再让他出局,……,如此反复直到所有的人全部出局为止。

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案李冬梅2015.3目录第1章绪论 (1)第2章线性表 (9)第3章栈和队列 (26)第4章串、数组和广义表 (52)第5章树和二叉树 (66)第6章图 (86)第7章查找 (107)第8章排序 (128)第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。

如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。

数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。

在有些情况下,数据元素也称为元素、结点、记录等。

数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。

数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。

例如,学生基本信息表中的学号、姓名、性别等都是数据项。

数据对象:是性质相同的数据元素的集合,是数据的一个子集。

例如:整数数据对象是集合N={0,±1,±2,…},字母字符数据对象是集合C={‘A’,‘B’,…,‘Z’,‘a’,‘b’,…,‘z’},学生基本信息表也可是一个数据对象。

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。

因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。

存储结构:数据对象在计算机中的存储表示,也称为物理结构。

抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。

具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。

数据结构第二版 主编殷人昆课后答案

数据结构第二版 主编殷人昆课后答案
13
2. 指出下列各算法的功能并求出其时间复杂度.
1) int Prime ( int n ) {
int i = 1 ;
int x = ( int ) sqrt ( n ) ; while ( ++ i <= x ) if ( n% i == 0) break ; if ( i > x ) return 1 ; else return 0 ; } 判断n是否是一个素数, 若是则返回1, 否则返回0, 时间 复杂度为
for ( int i = 1 ; i <= n ; i++ ) for ( int j = 1 ; j<= i ; j++ ) S; A n2 C n(n+1) B n2/2 D n(n+1)/2 3
6. 下面算法的时间复杂度为B O(n). int f ( unsigned int n ) { if ( n==0 || n==1 ) return 1 ; else return n*f ( n - 1 ) ; } A O(1) B O(n) C O(n2) D O(n!)
16
4)
int fun ( int n ) { int i = 1, s = 1 ; while ( s < n ) s += ++i ; return i ; }
求满足不等式1+2+3+...+i >= n的最小i值, 时间复杂 度为O(sqrt (n)) 17
5)
void UseFile (ifstream& inp, int c[10]) {
Quadratic InitQuadratic(float aa=0, float bb=0, float cc=0); Quadratic InitQuadratic( float aa, float bb, float cc ) { Quadratic q ; q.a = aa ; q.b = bb ; q.c = cc ; return q ; }

《数据结构》第三章习题参考答案 殷人昆版

《数据结构》第三章习题参考答案 殷人昆版

《数据结构》第三章习题参考答案殷人昆版,《数据结构》第三章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、栈和队列都是线性表,只是在插入和删除时受到了一些限制。

( √ )2、循环队列也存在空间溢出问题。

( √ )3、任何一个递归过程都可以转换成非递归过程。

( √ )4、消除递归不一定需要使用栈。

( √ )5、有n个数顺序(依次)进栈,出栈序列有Cn种,Cn=(1/(n+1))*(2n)!/((n!)*(n!))。

(√ )6、循环队列方式能很好地解决队列的假溢出现象。

(√ )二、单项选择题1、1.设有一个顺序栈S,元素P1,P2,P3,P4,P5,P6依次进栈,得到的出栈顺序P2,P3,P4,P6,P5,P1,则顺序栈的容量至少为( B )。

A.2 B.3 C.4D.无法确定2.一个队列的输出序列是1,2,3,4,则队列的入队序列是( A )。

A.1,2,3,4 B.1,4,3,2 C.4,3,2,1 D.不确定3、对于一个循环队列(最大元素个数为maxSize)进行入队操作时,对队列指针的修改正确的语句是( C )。

A.rear = rear + 1 B.front = front + 1C.rear = (rear + 1)% maxSize D.front = (front + 1)% maxSize4、假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( A )。

A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m5、表达式a*(b+c)-d的后缀表达式是( B )。

A.abcd*+- 表达式[a-(c*d+b)] B. abc+*d- C. abc*+d- 表达式b*c+a-d D. -+*abcd6、若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( B )A. 1和 5B. 2和4C. 4和2D. 5和17、设abcdef以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为( D )。

数据结构c殷人昆第二版答案

数据结构c殷人昆第二版答案

数据结构c殷人昆第二版答案【篇一:《数据结构》第四章习题参考答案】1、kmp算法的特点是在模式匹配时指示主串的指针不会变小。

( √ )2、串是一种数据对象和操作都特殊的线性表。

( √)5、使用三元组表示稀疏矩阵的非零元素能节省存储空间。

( √)6、插入与删除操作是数据结构中最基本的两种操作,因此这两种操作在数组中7、若采用三元组表存储稀疏矩阵,只要把每个元素的行下标和列下标互换(错二、单项选择题1.下面关于串的的叙述中,哪一个是不正确的?( b )a.串是字符的有限序列 b.空串是由空格构成的串(空串是长度为零的串)c.模式匹配是串的一种重要运算d.串既可以采用顺序存储,也可以采用链式存储2.有串s1=’abcdefg’,s2 = ’pqrst’,假设函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,len(s)返回中s的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是( d )。

a.bcdef b.bcdefg c.bcpqrst d.cdefgfg3、串的长度是指( b )a.串中所含不同字母的个数 b.串中所含字符的个数c.串中所含不同字符的个数 d.串中所含非空格字符的个数三、填空题1、串是一种特殊的线性表,其特殊性表现在_数据元素为字符,操作集也不同__;串的两种最基本的存储方式是_顺序存储 _、__ 链式存储 _;两个串相等的充分必要条件是__两串的长度相等且两串中对应位置的字符也相等__。

2、设正文串长度为n,模式串长度为m,则串匹配的kmp算法的时间复杂度为_o(m+n)__。

3、模式串p=‘abaabcac’的next函数值序列为___。

4、已知数组a[0..9,0..9]的每个元素占5个存储单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素a[6,8]的地址为__1340___。

《数据结构》第二章习题参考答案殷人昆版

《数据结构》第二章习题参考答案殷人昆版

《数据结构》第二章习题参考答案一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”)1、顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。

( × )2、链表中的头结点仅起到标识的作用。

( × )3、所谓静态链表就是一直不发生变化的链表。

( × )4、线性表的特点是每个元素都有一个前驱和一个后继。

( × )5、在顺序表中,逻辑上相邻的元素在物理位置上不一定相邻。

(×)6、线性表就是顺序存储的表。

(×)7、课本P84 2.4题(1)√(2)×(3)×(4)×(5)√(6)×(7)×(8)√(9)×(10)×(11)√(12)√二、单项选择题1、下面关于线性表的叙述中,错误的是哪一个?( B )A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

2、链表不具有的特点是( B )A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比3、(1) 静态链表既有顺序存储的优点,又有动态链表的优点。

所以,它存取表中第i个元素的时间与i无关。

(2) 静态链表中能容纳的元素个数的最大数在表定义时就确定了,以后不能增加。

(3) 静态链表与动态链表在元素的插入、删除上类似,不需做元素的移动。

以上错误的是( B )A.(1),(2)B.(1)C.(1),(2),(3) D.(2)4、在单链表指针为p的结点之后插入指针为s的结点,正确的操作是(B)A.p->link =s; s-> link =p-> link; B.s-> link =p-> link; p-> link =s; C.p-> link =s; p-> link =s-> link; D.p-> link =s-> link; p-> link =s;5、若某线性表最常用的操作是取任一指定序号的元素及其前驱,则利用(C)存储方式最节省时间。

《数据结构(Java版)(第2版)》习题解答

《数据结构(Java版)(第2版)》习题解答

数据结构(Java版)(第2版)习题解答叶核亚编著目录第0章Java程序设计基础 (1)【习0.1】实验0.1 哥德巴赫猜想。

(1)【习0.2】实验0.2 杨辉三角形。

(1)【习0.3】实验0.3 金额的中文大写形式。

(1)【习0.4】实验0.4 下标和相等的数字方阵。

(1)【习0.5】实验0.5 找出一个二维数组的鞍点 (2)【习0.6】实验0.6 复数类。

(2)【习0.7】实验0.8 图形接口与实现图形接口的类 (2)第1章绪论 (3)【习1.1】实验1.1 判断数组元素是否已按升序排序。

(3)【习1.2】实验1.3 用递归算法求两个整数的最大公因数。

(3)第2章线性表 (5)【习2.1】习2-5 图2.19的数据结构声明。

(5)【习2.2】习2-6 如果在遍历单链表时,将p=p.next语句写成p.next=p,结果会怎样? (5)【习2.3】实验2.2 由指定数组中的多个对象构造单链表。

(5)【习2.4】实验2.2 单链表的查找、包含、删除操作详见8.2.1。

(5)【习2.5】实验2.2 单链表的替换操作。

(6)【习2.6】实验2.2 首尾相接地连接两条单链表。

(6)【习2.7】实验2.2 复制单链表。

(6)【习2.8】实验2.2 单链表构造、复制、比较等操作的递归方法。

(7)【习2.9】建立按升序排序的单链表(不带头结点)。

(8)【习2.10】实验2.6 带头结点的循环双链表类,实现线性表接口。

(10)【习2.11】实验2.5 建立按升序排序的循环双链表。

(14)第3章栈和队列 (17)【习3.1】习3-5 栈和队列有何异同? (17)【习3.2】能否将栈声明为继承线性表,入栈方法是add(0,e),出栈方法是remove(0)?为什么? (17)【习3.3】能否用一个线性表作为栈的成员变量,入栈方法是add(0,e),出栈方法是remove(0)?为什么? (17)【习3.4】能否将队列声明为继承线性表,入队方法是add(e),出队方法是remove(0)?为什么? (17)第4章串 (18)【习4.1】实验4.6 找出两个字符串中所有共同的字符。

数据结构(第二版)习题答案第3章

数据结构(第二版)习题答案第3章

第3章‎线性表的链‎式存储‎3.1‎选择题(‎1)两个有‎序线性表分‎别具有 n‎个元素与‎m个元素且‎n≤m,‎现将其归并‎成一个有序‎表,其最‎少的比较次‎数是( A‎)。

‎A.n B‎.m C.‎n . 1‎D.m ‎+ n(‎2)非空的‎循环单链表‎head‎的尾结点(‎由 p所指‎向)满足(‎C)。

‎A.p-‎>next‎==NUL‎L B.p‎==NUL‎L C.p‎->nex‎t==he‎a d D.‎p==he‎a d(‎3)在带头‎结点的单链‎表中查找‎x应选择的‎程序体是(‎C )。

‎A.n‎o de *‎p=hea‎d->ne‎x t; w‎h ile ‎(p &&‎p->i‎n fo!=‎x) p=‎p->ne‎x t;‎i f (p‎->inf‎o==x)‎retu‎r n p ‎e lse ‎r etur‎n NUL‎L;B‎.node‎*p=h‎e ad; ‎w hile‎(p&&‎p->i‎n fo!=‎x) p=‎p->ne‎x t; r‎e turn‎p;‎C.nod‎e *p=‎h ead-‎>next‎; whi‎l e (p‎&&p->‎i nfo!‎=x) p‎=p->n‎e xt; ‎r etur‎n p; ‎D.no‎d e *p‎=head‎; whi‎l e (p‎->inf‎o!=x)‎p=p-‎>next‎; re‎t urn ‎p;(4‎)线性表若‎采用链式存‎储结构时,‎要求内存中‎可用存储单‎元的地址(‎D )。

‎A.必‎须是连续的‎B.部分‎地址必须是‎连续的‎C.一定是‎不连续的‎D.连续不‎连续都可以‎(5)在‎一个具有‎n个结点的‎有序单链表‎中插入一个‎新结点并保‎持单链表仍‎然有序的时‎间复杂度‎是( B ‎)。

数据结构课后习题答案清华大学出版社殷人昆

数据结构课后习题答案清华大学出版社殷人昆
return* result;
}
friend ostream& operator<< (ostream&os, complex&ob ){
//友元函数:重载<<,将复数ob输出到输出流对象os中。
returnos << ob.Re << ( ob.Im >= 0.0 )?“+” : “-” <<fabs( ob.Im ) << “i”;
1-2什么是数据结构?有关数据结构的讨论涉及哪三个方面?
【解答】
数据结构是指数据以及相互之间的关系。记为:数据结构={D, R}。其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。
有关数据结构的讨论一般涉及以下三方面的内容:
1数据成员以及它们相互之间的逻辑关系,也称为数据的逻辑结构,简称为数据结构;
}
1-5用归纳法证明:
(1)
(2)
(3)
【证明】略
1-6什么是算法?算法的5个特性是什么?试根据这些特性解释算法与程序的区别。
【解答】
通常,定义算法为“为解决某一特定任务而规定的一个指令序列。”一个算法应当具有以下特性:
①有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。
doublegetReal ( ){ returnRe; }//取复数实部
doublegetImag ( ){ returnIm; }//取复数虚部
voidsetReal (doubler ){Re = r; }//修改复数实部

(完整版) 《数据结构》教材课后习题+答案

(完整版) 《数据结构》教材课后习题+答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C. 有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

else return n*f ( n - 1 ) ;
}
A O(1)
B O(n)
C O(n2)
D O(n!)
二、填空题 1. 数据的逻辑结构被分为集合结构、线性结构、树型结
构和图形结构四种. 2. 数据的存储结构被分为顺序、链接、索引和散列四种;
4
3. 在线性结构、树形结构和图形结构中,前驱和后继结点 之间分别存在着1:1、1:N和M:N的联系.
int s = 0 ;
for ( int i = 1; i <= n ; i++ ) {
int p = 1;
for ( int j = 1; j <= i ; j++)
p *= j ;
计算:
s += p ;
}
return s ;
16
4)
int fun ( int n ) { int i = 1, s = 1 ; while ( s < n ) s += ++i ; return i ; }
Quadratic InitQuadratic( float aa, float bb, float cc ) { Quadratic q ; q.a = aa ; q.b = bb ; q.c = cc ; return q ;
}
10
2) 做两个多项式加法,即使对应的系数相加,返回相加结果. Quadratic Add ( Quadratic q1, Quadratic q2 ) { Quadratic q ; q.a = q1.a + q2.a ; q.b = q1.b + q2.b ; q.c = q1.c + q2.c ; return q ; }
(4) for ( i = 1; i <= 3; i++ ) { int x = GetElem ( La, i ); if (x % 2 == 0 ) Delete ( La, x ) ;
数据结构 ▪ 第一单元课后参考答案
1
一、单选题
1. 一个数组元素a[i]与A *(a+i)的表示等价.
A *(a+i)
B a+ i
C *a + i
D &a+ i
2. 对于两个函数,若函数名相同,但只是____________不同 则不是重载函数.
A 参数类型
B 参数个数 C 函数类型
3. 若需要利用形参直接访问实参,则应把形参变量说明为 ________参数
三、应用题 1. 设计二次多项式ax2+bx+c的一种抽象数据类型,假定起
名为Quadratic,该类型的数据部分为三个系数项a,b和c, 操作部分为:
请写出上面每一个操作的具体实现.
9
1) 初始化数据成员a,b和c(假定用记录类型Quadratic定 义数据成员),每个数据成员的缺省值为0.
Quadratic InitQuadratic(float aa=0, float bb=0, float cc=0);
7
16. 在下面程序段中,s=s+p语句的执行次数为_n_,p*=j语 句的执行次数为n(n+1)/2,该程序段的时间复杂度为 O(n2). int i = 0, s = 0; while (++ i <= n) { int p = 1; for ( int j = 1; j <= i; j++) p *= j ; s = s + p; }
for ( int i = 1 ; i <= n ; i++ )
for ( int j = 1 ; j<= i ; j++ )
S;
A n2
B n2/2
C n(n+1)
D n(n+1)/2
3
6. 下面算法的时间复杂度为B O(n).
int f ( unsigned int n ) {
if ( n==0 || n==1 ) return 1 ;
求满足不等式1+2+3+...+i >= n的最小i值, 时间复杂 度为O(sqrt (n))
17
5) void UseFile (ifstream& inp, int c[10]) {
//假定inp所对应的文件中保存有n个整数.
for ( int i = 0 ; i < 10 ; i++) c[ i ] = 0 ;
for ( i = 0 ; i < M ; i++ ) for ( j = 0 ; j < L ; j++ ) for ( k = 0; k < N ; k++ ) c[ i ][ j ] += a[ i ][ k ] * b[k][ j ];
} 矩阵相乘, 即a[M][N]*b[M][N]→c[M][L] 时间复杂 度为O(M*N*L)
}
打印出一个具有n行的乘法表, 第i行中有n-i+1个乘 法项, 每个乘法项为i*j;
时间复杂度为O(n2)
19
7) void cmatrix ( int a[M][N], int d) {
//M和N为全局整型常量
for ( int i = 0; i < M; i++) for ( int j = 0; j < N; j++) a[ i ][ j ] *= d ;
13
2. 指出下列各算法的功能并求出其时间复杂度. 1) int Prime ( int n ) {
int i = 1 ; int x = ( int ) sqrt ( n ) ; while ( ++ i <= x )
if ( n% i == 0) break ; if ( i > x ) return 1 ; else return 0 ; } 判断n是否是一个素数, 若是则返回1, 否则返回0, 时间
11. 一个数组a所占有的存储空间的大小即数组长度为 sizeof (a) ,下标为i的元素a[ i ]的存储地址为 a+ i, 或者 为a + i*sizeof (a[ i ]).
6
12. 函数重载要求类型上,数量上或排列次序上有所不同. 13. 对于双目操作符,其重载函数带下面的每个程序段中,假定线性表La的类型为List, 元素类型ElemType为int,并假定每个程序段是连续执行 的,试写出每个程序段执行后所得到的线性表La.
(1) InitList (La);
int a[ ] = { 48, 26, 57, 34, 62 ,79 } ;
for ( i = 0 ; i < 6 ; i++ )
复杂度为 O( n )
14
2) int sum1 ( int n ) { int p = 1, s = 0 ; for ( int i = 1; i <= n ; i++ ) { p *= i ; s += p ; } return s ; 计算:
} 时间复杂度为O(n)
15
3) int sum2 ( int n ) {
InsertFront ( La , a[ i ]) ;
TraverseList ( La ) ; //
(79,62,34,57,26,48)
(2) InitList ( La ) ;
for ( i = 0; i < 6 ; i++) Insert ( La , a[ i ] ) ;
TraverseList ( La ) ; //
(26,34,48,57,62,79)
22
(3) Insert ( La , 56 ) ; DeleteFront ( La ) ; InsertRear ( La , DeleteFront ( La ) ) ; TraverseList ( La ) ; (48,56,57,62,79,34)
}
数组a中每个元素均乘以d的值, 时间复杂度为O(n2)
20
8) void matrimult (int a[M][N], int b[N][L], int c[M][L]) { //M,N和L均为全局整型常量
int i , j , k; for ( i = 0; i < M ; i++)
for( j = 0 ; j < L ; j++) c[ i ][ j ] = 0 ;
12
5) 按照ax**2+bx+c的格式(x2用x**2表示)输出二次多 项式,在输出时要注意去掉系数为0的项,并且当b和c的 值为负时,其前不能出现加号. void Print ( Quadratic q ) { if ( q.a ) cout << q.a <<"x**2" ; if ( q.b ) if ( q.b > 0 ) cout << "+" << q.b <<"x" ; else cout << q.b << "x" ; if ( q.c ) if ( q.c > 0 ) cout << "+" << q.c ; else cout << q.c ; cout << endl ; }
3) 根据给定x的值计算多项式的值. float Eval ( Quadratic q , float x ) { return ( q.a * x * x + q.b*x + q.c ) ; }
相关文档
最新文档