数据结构习题课5

合集下载

严蔚敏版数据结构习题及参考答案

严蔚敏版数据结构习题及参考答案

习题1一、单项选择题A1.数据结构是指()。

A.数据元素的组织形式B.数据类型C.数据存储结构D.数据定义C2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。

A.存储结构B.逻辑结构C.链式存储结构D.顺序存储结构D3.树形结构是数据元素之间存在一种()。

A.一对一关系B.多对多关系C.多对一关系D.一对多关系B4.设语句x++的时间是单位时间,则以下语句的时间复杂度为()。

for(i=1; i<=n; i++)for(j=i; j<=n; j++)x++;A.O(1)B.O(2n)C.O(n)D.O(3n)CA5.算法分析的目的是(1),算法分析的两个主要方面是(2)。

(1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性(2) A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。

(1) A.计算方法 B.排序方法C.解决问题的有限运算序列D.调度方法(2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性C.确定性,有穷性和稳定性D.易读性,稳定性和安全性7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。

A.低B.高C.相同D.不好说8.数据结构作为一门独立的课程出现是在()年。

A.1946B.1953C.1964D.19689.数据结构只是研究数据的逻辑结构和物理结构,这种观点()。

A.正确B.错误C.前半句对,后半句错D.前半句错,后半句对10.计算机内部数据处理的基本单位是()。

A.数据B.数据元素C.数据项D.数据库二、填空题1.数据结构按逻辑结构可分为两大类,分别是______________和_________________。

南邮陈慧南版数据结构课后习题答案

南邮陈慧南版数据结构课后习题答案

template <class T> void LinkedStack<T>::SetNull() { Node<T> *q; while (top) { q=top->link; delete top; top=q; } }
i k(循环次数) 2*i 1 1 21<n 2 2 22<n 2k-1 n 2k<n 2k<n, k<log2n, k=log2n
划线语句的执行次数为 log2n。O(log2n) (3) for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for (int k=1;k<=j;k++) x++;
习题三(第50页)
3.1 设A、B、C、D、E五个元素依次进栈(进栈后可立即出栈),问 能否得到下列序列。若能得到,则给出相应的push和pop序列;若不 能,则说明理由。 1) A,B,C,D,E 2) A,C,E,B,D 3) C,A,B,D,E 4) E,D,C,B,A 答:2)和3)不能。对2)中的E,B,D而言,E最先出栈则表明,此 时B和D均在栈中,由于,B先于D进栈,所以应有D先出栈。同理3) 也不能。 (1)能。 push,pop,push,pop,push,pop,push,pop,push,pop (4)能。 push,push,push,push,push,pop,pop,pop,pop,pop
template <class T> bool LinkedStack<T>::IsEmpty() const { return !top; }
template <class T> bool LinkedStack<T>::IsFull() const { return false; }

数据结构答案第5章

数据结构答案第5章

第 5 章树和二叉树1970-01-01第 5 章树和二叉树课后习题讲解1. 填空题⑴树是n(n≥0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m(m>0)个()的集合,每个集合都是根结点的子树。

【解答】有且仅有一个,互不相交⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。

【解答】度,孩子,双亲⑶一棵二叉树的第i(i≥1)层最多有()个结点;一棵有n(n>0)个结点的满二叉树共有()个叶子结点和()个非终端结点。

【解答】2i-1,(n+1)/2,(n-1)/2【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。

⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。

【解答】2h -1,2h-1【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。

⑸深度为k的二叉树中,所含叶子的个数最多为()。

【解答】2k-1【分析】在满二叉树中叶子结点的个数达到最多。

⑹具有100个结点的完全二叉树的叶子结点数为()。

【解答】50【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。

⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。

则该树中有()个叶子结点。

【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。

⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。

【解答】CDBGFEA【分析】根据前序遍历序列和后序遍历序列将该二叉树构造出来。

数据结构课后习题答案

数据结构课后习题答案

第1章绪论5.选择题:CCBDCA6.试分析下面各程序段的时间复杂度。

(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.选择题babadbcabdcddac2.算法设计题(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。

ElemType Max (LinkList L ){if(L->next==NULL) return NULL;pmax=L->next; //假定第一个结点中数据具有最大值p=L->next->next;while(p != NULL ){//如果下一个结点存在if(p->data > pmax->data) pmax=p;p=p->next;}return pmax->data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。

void inverse(LinkList &L) {// 逆置带头结点的单链表 Lp=L->next; L->next=NULL;while ( p) {q=p->next; // q指向*p的后继p->next=L->next;L->next=p; // *p插入在头结点之后p = q;}}(10)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。

[题目分析] 在顺序存储的线性表上删除元素,通常要涉及到一系列元素的移动(删第i个元素,第i+1至第n个元素要依次前移)。

本题要求删除线性表中所有值为item的数据元素,并未要求元素间的相对位置不变。

因此可以考虑设头尾两个指针(i=1,j=n),从两端向中间移动,凡遇到值item的数据元素时,直接将右端元素左移至值为item的数据元素位置。

数据结构课后习题答案(耿国华版

数据结构课后习题答案(耿国华版

第1章绪论2 、(1)×(2)×(3) √3 、(1)A(2)C(3)C5、f or计(算i=下1n程;序中 1 得语句频度for(j=1;j<=i; j++)for(k=1;k<=j;k ++)x=x+1;【解答】 x=x+1 得语句频度为:T(n)=1+(1+2)+(1+2+3)+. …+(1+2+……+n)=n(n+1)(n+2)/66 、编写算法,求一元多项式p。

(x)=a。

+a,x+a₂X2+……、+a Xn得值p(x) 并确定算法中每一语句得执行次数与整个算法得时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数.注意:本题中得输入为a,(i=01,…n)、x 与n,输出为P。

(x)。

算法得输入与输出采用下列方法(1)通过参数表中得参数显式传递(2)通过全局变量隐式传递。

讨论两种方法得优缺点,并在算法中以您认为较好得一种实现输入输出.【解答】(1)通过参数表中得参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。

缺点:形参须与实参对应,且返回值数量有限。

(2)通过全局变量隐式传递优点:减少实参预形参得个数,从而减少内存空间以及传递数据时得时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue({ int,in;floatx,a[]p;pri n tf(hn=”);s c anf(“%f,”&n);printf(“x=”;)sca nf(“%f&x);f or(i=0;i<n; i++)s c anf(%f ,&a[i]; /*执行次数:n 次 */p=a[0];for (i=1;i<=n;i++){ p=p+a [i]*x; /*执行次数:n次*/x= x*x;}prin t f(%f” p);}算法得时间复杂度:T(n)=0(n)通过参数表中得参数显式传递f loat PolyVa lue(float a[ ], float x, i nt n)f 1 oat p, s;int;is p a X0];for(=1;i<= n;i++)/执行次数:n 次*/{s=s+a [i]* p;p=p*x;}re turn(p);算法得时间复杂度:T(n)=O(n)第2章线性表习题1、填空:(1)在顺序表中插入或者删除一个元素,需要平均挪移一半元素,具体挪移得元素个数与插入或者删除得位置有关。

数据结构 习题课

数据结构 习题课

算 法
练习5 若已知非空线性链表第一个结点的指针为list, 请 写一个算法, 将该链表中数据域值最小的那个 移到链表的最前端。
list
35 67 18

52
10
14
71

82
65
q
p
^
list=q;
list
35 67 18
s->link=q->link;

52 10 14 71

82
65
s
q
^
(删除表中第i元素)
寻找满足条件的元素,即从表中第一个 元素开始到最后那个元素,反复比较相邻的 两个元素是否相同,若相同,删除其中一个, 否则,比较下一对相邻元素。
for(j=i+1; j<n; j++) A[j−1]=A[j]; n--;
(删除表中第i元素)
void DEL( ElemType A[ ], int &n ) { int j, i=0; 比较相邻元素 while(i<n-1) if(A[i]!=A[i+1]) i++; else { for(j=i+1; j<n; j++) A[j−1]=A[j]; n– – ; } } 删除一个元素
list
35 68 59 28
q->link=list;
… q p r r sp qp
r=p; p=p->link;
void REMOVE(LinkList &list ) { 算法 LinkList q=list,s,r; p=list → link; r=list; while (p!=NULL) { if (p→data<q→data) then 寻找值最小结点 { s=r; q=p; } r=p; O (链表长度) p=p→link; // 找到值最小的那个结点 ,地址由q记录 // } if (q!=list) then // 若值最小的结点不是链表最前面那个结点 // { s→link=q→link; q→link=list; list=q ; list s q } } … … 28 39 35 82

数据结构课后习题答案

数据结构课后习题答案

大学课程《数据结构》课后习题答案第 1 章绪论课后习题讲解1. 填空⑴()是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

【解答】数据元素⑵()是数据的最小单位,()是讨论数据结构时涉及的最小数据单位。

【解答】数据项,数据元素【分析】数据结构指的是数据元素以及数据元素之间的关系。

⑶从逻辑关系上讲,数据结构主要分为()、()、()和()。

【解答】集合,线性结构,树结构,图结构⑷数据的存储结构主要有()和()两种基本方法,不论哪种存储结构,都要存储两方面的内容:()和()。

【解答】顺序存储结构,链接存储结构,数据元素,数据元素之间的关系⑸算法具有五个特性,分别是()、()、()、()、()。

【解答】有零个或多个输入,有一个或多个输出,有穷性,确定性,可行性⑹算法的描述方法通常有()、()、()和()四种,其中,()被称为算法语言。

【解答】自然语言,程序设计语言,流程图,伪代码,伪代码⑺在一般情况下,一个算法的时间复杂度是()的函数。

【解答】问题规模⑻设待处理问题的规模为n,若一个算法的时间复杂度为一个常数,则表示成数量级的形式为(),若为n*log25n,则表示成数量级的形式为()。

【解答】Ο(1),Ο(nlog2n)【分析】用大O记号表示算法的时间复杂度,需要将低次幂去掉,将最高次幂的系数去掉。

2. 选择题⑴顺序存储结构中数据元素之间的逻辑关系是由()表示的,链接存储结构中的数据元素之间的逻辑关系是由()表示的。

A 线性结构B 非线性结构C 存储位置D 指针【解答】C,D【分析】顺序存储结构就是用一维数组存储数据结构中的数据元素,其逻辑关系由存储位置(即元素在数组中的下标)表示;链接存储结构中一个数据元素对应链表中的一个结点,元素之间的逻辑关系由结点中的指针表示。

⑵假设有如下遗产继承规则:丈夫和妻子可以相互继承遗产;子女可以继承父亲或母亲的遗产;子女间不能相互继承。

则表示该遗产继承关系的最合适的数据结构应该是()。

数据结构习题和答案

数据结构习题和答案

数据结构习题和答案习题课填空1、对于⼀棵⼆叉树,若⼀个结点的编号为i,则它的左孩⼦结点的编号为,双亲结点的编号为。

2、向⼀个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动个元素。

3、在⼀棵⼆叉树中,若双分⽀结点数为5个,单分⽀结点数为6个,则叶⼦结点数为个。

4、为了实现折半查找,线性表必须采⽤⽅法存储。

顺序5、⼀种抽象数据类型包括数据对象和。

6、在以L为表头指针的带表头附加结点的单链表和循环单链表中,判断链表为空的条件分别为__________和_______。

7、数据结构被形式地定义为(D, R),其中D是的有限集合,R是D上的有限集合。

8、队列的插⼊操作在进⾏,删除操作在进⾏。

9、⼆叉搜索树的中序遍历得到的结点序列为____ ____。

10、在顺序表中插⼊或删除⼀个元素,需要平均移动元素,具体移动的元素个数与有关。

11、栈的特点是。

12、在单链表中,除了⾸元结点外,任⼀结点的存储位置由。

13、在⼀个具有n个顶点的⽆向图中,要连通所有顶点则⾄少需要条边。

14、深度为k(设根的层数为1)的完全⼆叉树⾄少有个结点,⾄多有个结点。

15、⼀棵深度为6的满⼆叉树有个分⽀结点和个叶⼦结点。

16、⼀个算法的效率可分为效率和效率。

17、队列的特点是。

18、⼀棵深度为5的满⼆叉树中的结点数为个。

19、在⼀个具有n个顶点的⽆向完全图中,包含有________条边,在⼀个具有n个顶点的有向完全图中,包含有________条边。

简答题1、已知⼀组元素为(38,26,62,94,35,50,28,55),画出按元素排列顺序输⼊⽣成的⼀棵⼆叉搜索树。

答:2、假设有⼆维数组A[0..5,0..7],每个元素⽤相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000,计算:(1)末尾元素A57的第⼀个字节地址为;(2)若按列存储时,元素A47的第⼀个字节地址为。

(3) 数组A的体积(存储量);(4) 若按⾏存储时,元素A14的第⼀个字节地址为。

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

6 3
S 2 初始化 2 23 234 2345 23451 234516
1
∞ ∞ ∞ 35 35 35 35
2 0 0 0 0 0 0 0
3
4
∞ 10 10 10 10 10 10
∞ 15 15 15 15 15 15
5 ∞ ∞ 40 30 30 30 30
6 ∞ ∞ ∞ ∞ ∞ ∞ ∞
1
50
2



A:B A:C A:D B:A B:C B:D
5 7 3 6 5 9
A->D->B A->D->C A->D B->A B->C B->C->A->D



C:A 1 C:B 6 C:D 4 D:A 5 D:B 2 D:C 4
C->A C->A->D->B C->A->D D->C->A D->B D->C
0 1 2 3
Path(-1) 0 1 2 3 -1 0 -1 0 -1 -1 1 -1 2 -1 -1 -1 -1 3 3 -1
Path(1) 1 2 3 0 1 0 -1 1 -1 0 -1 0 3 3 -1
Path(2) 1 2 3 0 1 0 -1 1 0 0 -1 0 3 3 -1
Path(3) 0 1 2 3 -1 3 3 0 2 -1 1 0 2 3 -1 0 2 3 3 -1
D3[输出v2到v1的最长路径] j ←u. WHILE(f[j]<>j) DO (PRINT(j). j ←f(j)). PRINT(j).▌
上机题:无根树



设计算法判断一个无向图G是否为树。若是,输出 “Yes!”;否则输出“No!”。 输入格式: 第1行是空格分隔的两个整数n和m,分别表示无向图 的顶点数和边数,n<=10000,m<=100000。 第2到n+1行,每行两个整数a和b,表示顶点a和b之 间有一条边,1 < = a,b <=n 。 键盘输入,不必检查输入错误,输入确保正确。 输出格式: 屏幕上显示一行,“yes!”或 “no!”.行末有回车 。
参考答案
0 1 2 3
A(-1) 0 1 2 0 9 0 5 1 0 2 4
3 3 0
0 0 1 0 -1 -1 2 -1
1 9 0 10 2 1 0 -1 0 3
A(0) 2 3 3 5 0 4 4 0 Path(0) 2 3 -1 0 1 -1 -1 0 3 -1
数据结构习题 第 5 章
吉林大学计算机科学与技术学院 谷方明
第5章作业

5-1,5-7,5-12,5-13,5-14,5-15,5-16
5-1

给出下图所示的邻接矩阵和邻接表
A
B
C
D
E
参考答案
1 1 2 0 0 0 0 1 2 0 0 0 0 0 3 1 1 0 0 0 4 1 1 0 0 1 5 0 0 1 0 0

n遍BFS


特殊性质

参考答案
算法Diameter(Head,n) /*求无向连通无环图的直径*/ D1 [找离v0最远的叶子结点v1] FOR i ←1 TO n DO vis[i] ← 0 CREATQ(q). q (1,0). WHILE(NOT QEmpty(q)) DO( (v,d) q. p ←adjacent(Head[v]). WHILE(p<>NULL) DO IF(vis[VerAdj(p)]=0) THEN q (VerAdj(p),d+1). )
算法Cycle(v.flag) /*判断以v为起点的连通分支是否有环,若有,flag为TRUE, 否则FALSE. vis全局,记录每个点的访问状态*/ C1[标记v正在访问中] vis[v]=-1. C2[深度优先遍历] p Head[v]. WHILE(p<>NULL) DO ( if(VerAdj(p)=-1) (flag=TRUE.RETURN) if(VerAdj(p)=0) ( Cycle(VerAdj(p), flag). IF(flag=TRUE) THEN RETURN.) p Link(p).
样例1
样例2
输入: 43 12 23 31 输出: No!
输入: 21 12 输出: Yes!

n-1条边 连通 无环 最简单的做法:n-1条边的连通图



连通怎么判断? 没有孤立点是否一定连通?
3)该矩阵是稀疏矩阵
5-12

设计一个算法,检测采用邻接表方法存储、具 有n个顶点的有向图中是否存在从顶点v到顶 点u的路径,若存在路径,算法给出信息 TRUE,否则,给出信息FALSE .
参考答案
算法Path(v,u. flag) /*判断v到u是否有路.有,flag为TRUE,否则FALSE.vis全局, 记录结点访问状态*/ P1[递归出口] IF(v=u) THEN (flag TRUE.RETURN.) P2[依次判断v的邻接顶点是否有到u的路] vis[v]=1. p Head[v]. WHILE(p<>NULL) DO ( IF(vis[VerAdj(p)]=0) ( Path(VerAdj(p),u, flag). IF(flag=TRUE) THEN RETURN. ) p Link(p). ). P3[不存在路] flag=FALSE. ▌
A
B
C
3 4
D
E
5
参考答案:注意头指针数组
A B C C E Λ A E Λ Λ D D Λ Λ
C
D E
5-7

用邻接矩阵存储一个包含1000个顶点和1000条 边的图,则该图的邻接矩阵中有多少元素?有 多少非零元素?该矩阵是否为稀疏矩阵?
参考答案
1)矩阵中元素个数:1000000 2)若图为有向图:非零元素的个数:1000 若图为无向图:非零元素的个数:2000
D2 [找离v1最远的叶子结点v2] FOR j ←1 TO n DO (vis[i] ←0. f[i] ←0.). CREATQ(q). q (v,0). f[i] ←v. WHILE(NOT QEmpty(q)) DO( (u,d) q. p ←adjacent(Head[v]). WHILE(p<>NULL) DO IF(vis[VerAdj(p)]=0) THEN (q (VerAdj(p),d+1). f[VerAdj(p)] ←u.) )
方法二:拓扑排序
void Graph :: TopoOrder( ) { int top = - 1 ; for ( int i=0 ; i<n ; i + + ) if ( count[i] = = 0 ) { count[i] = top ; top = i ; }
for ( int i=0 ; i<n ; i + + ) if ( top = = - 1 ) //检测图中是否有回路 { cout << " There is a cycle in network ! " << endl ; return ; } else { int j=top ; top=count[top] ; cout<<j<<endl ; //输出栈顶j Edge *p = head[j].Adjacent ; while( p != NULL ) //把j的所有邻接顶点的入度减1 { int k=p->VerAdj ; if ( --count[k]= = 0 ) { count[k]=top ; top=k ; } p=p->link ; } } }
0 1 0 9 0 1 10 2 0 -1 0 2 0
A(1) 2 14 5 0 4
3 3 4 0
0 1 0 9 6 0 1 10 5 2 0 -1 2 2 2
A(2) 2 14 5 0 4
3 3 9 4 0
0 0 6 1 5
1 5 0 6 2
A(3) 2 3 7 3 5 9 0 4 4 0
10 35 30
3
10 15 20 20 4 15
1 2
参考答案
6
5 3
3
最短路径 最短路径长度
4 5 6
dis path s
35 4 1
0 -1 1
10 2 1
15 2 1
30 ∞ 4 -1 1 0
2→3
2→4 2→4→5 2→4→1 2→6
10
15 30 35 ∞
5-15

试求出下图中所有顶点之间的最短路径
(1)可用邻接表作为存储结构; (2)引入一个辅助数组保存各顶点的度; (3)执行删除过程; (4)并修正各个顶点的度。


分析

自由树:没有确定根,即无根树 无向还是有向:无向 Floyd或Dijkstra


O(n3)
O(n*(n+e)) O(n+e):从任意顶点v0开始找到最远点v1,再从v1找到最远 点v2,v1到v2就是所求最长路径
1
16
2
5 6 3 4
11 6
18
6
Kruskal算法
1 6 5 4 2 5 3 5
1
6
2
6 4
5 3
1
11 6
2 6 4
5 3
1
16 2 11 6 6
5 3
1
16 2 11 6 6 4
相关文档
最新文档