数据结构习题课

合集下载

数据结构习题课1

数据结构习题课1
IF i j 1 THEN
(IF A[i] A[j] THEN(fmax A[j]. fmin A[i]).
ELSE (fmax A[i]. fmin A[j]). RETURN). BS2. [取中值] mid (ij)/2 BS3. [递归调用]
BS (A, i, mid. gmax, gmin). BS (A, mid1, j. hmax,
IF (n≤1) THEN (flag←false. RETURN.) S2[初始化]
i←2. flag←true. S3[求余判断]
WHILE (i ≤ n div 2 ) DO (IF (n MOD i)=0 THEN (flag←false. RETURN.) i←i+1.) ▌
参考答案3
算法 S (n. flag) /*判断整数n是否为素数,将结果保存到变量flag*/ S1[n≤1?]
for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ;
int t=1; while(t<n) t*=2;
int t=2; while(t<n) t*=t;
作业1-5
题目描述
试用ADL语言编写一个算法,判断任一整数 n 是否为素数
for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) t=a[i][j],a[i][j]=a[j][i],a[j][i]=t;
for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) a[j][i]=[i][j];

数据结构第十章习题课

数据结构第十章习题课

1.下列排序算法中,其中()是稳定的。

A. 堆排序,冒泡排序B. 快速排序,堆排序C. 直接选择排序,归并排序D. 归并排序,冒泡排序2.若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。

A. 快速排序B. 堆排序C. 归并排序D. 直接插入排序3.排序趟数与序列的原始状态有关的排序方法是( )排序法。

A.插入 B. 选择 C. 冒泡 D. 快速4.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47 (4)15 21 25 47 84 则采用的排序是( )。

A. 选择B. 冒泡C. 快速D. 插入5.对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15};则采用的是()排序。

A. 选择B. 快速C. 希尔D. 冒泡6.若上题的数据经一趟排序后的排列为{9,15,7,8,20,-1,4},则采用的是()排序。

A.选择 B. 堆 C. 直接插入 D. 冒泡7.在文件“局部有序”或文件长度较小的情况下,最佳内部排序的方法是()A.直接插入排序B.冒泡排序C.简单选择排序8.下列排序算法中,()算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。

A. 堆排序B. 冒泡排序C. 快速排序D. 插入排序9. 下列排序算法中,占用辅助空间最多的是:( )A. 归并排序B. 快速排序C. 希尔排序D. 堆排序10.用直接插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是()。

A.94,32,40,90,80,46,21,69 B.32,40,21,46,69,94,90,80C.21,32,46,40,80,69,90,94 D.90,69,80,46,21,32,94,4011. 若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行()次比较。

数据结构第二章习题课

数据结构第二章习题课

数据结构第二章习题课1、试描述头指针、头结点、开始结点的区别、并说明头指针和头结点的作用。

答:开始结点是指链表中的第一个结点,也就是没有直接前趋的那个结点。

链表的头指针是一指向链表开始结点的指针(没有头结点时),单链表由头指针唯一确定,因此单链表可以用头指针的名字来命名。

头结点是我们人为地在链表的开始结点之前附加的一个结点。

有了头结点之后,头指针指向头结点,不论链表否为空,头指针总是非空。

而且头指针的设置使得对链表的第一个位置上的操作与在表其他位置上的操作一致(都是在某一结点之后)。

2、何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1) 基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

2) 基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等操作时,宜采用链表做存储结构。

并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。

3、在顺序表中插入和删除一个结点需平均移动多少个结点?具体的移动次数取决于哪两个因素?答:在等概率情况下,顺序表中插入一个结点需平均移动n/2个结点,删除一个结点需平均移动(n-1)/2个结点。

具体的移动次数取决于顺序表的长度n以及需插入或删除的位置i。

i越接近n 则所需移动的结点数越少。

4、为什么在单循环链表中设置尾指针比设置头指针更好?答:尾指针是指向终端结点的指针,用它来表示单循环链表可以使得查找链表的开始结点和终端结点都很方便,设一带头结点的单循环链表,其尾指针为rear,则开始结点和终端结点的位置分别是rear->next->next 和rear, 查找时间都是O(1)。

数据结构课后习题及答案

数据结构课后习题及答案

填空题(10 *1’ = 10' )一、概念题2。

2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。

2。

3。

当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。

2。

6。

带头结点的单链表L中只有一个元素结点的条件是L—〉Next->Next==Null。

3。

6。

循环队列的引入,目的是为了克服假溢出.4。

2。

长度为0的字符串称为空串。

4。

5.组成串的数据元素只能是字符。

4。

8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。

7.2。

为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。

5.7。

广义表的深度是广义表中括号的重数7。

8.有向图G可拓扑排序的判别条件是有无回路。

7.9。

若要求一个稠密图的最小生成树,最好用Prim算法求解。

8。

8.直接定址法法构造的哈希函数肯定不会发生冲突。

9。

2。

排序算法所花费的时间,通常用在数据的比较和交换两大操作。

1。

1。

通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。

1。

2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。

1。

3。

存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。

1。

4。

抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。

1。

5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。

2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s—〉prior= p—〉prior; s-〉next= p; p-〉prior- next= s;p-〉prior= s;。

2.9。

在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。

数据结构第一章习题课

数据结构第一章习题课

1. 数据结构是一门研究非数值计算的程序设计问题中计算机的 操作对象 以及它们之间的 关系 和运算等的学科。

2. 数据结构被形式地定义为(D, R ),其中D 是 数据元素 的有限集合,R 是D 上的 关系 有限集合。

3. 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。

4. 在线性结构中,第一个结点 没有 前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点 没有 后续结点,其余每个结点有且只有1个后续结点。

5. 在树形结构中,树根结点没有 前驱 结点,其余每个结点有且只有 1 个前驱结点;叶子结点没有 后续 结点,其余每个结点的后续结点数可以任意多个 。

6. 在图形结构中,每个结点的前驱结点数和后续结点数可以 任意多个 。

7. 一个算法的效率可分为 时间 效率和 空间 效率。

8. 数据结构中,与所使用的计算机无关的是数据的 结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储9. 算法分析的目的是:A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性10. 算法分析的两个主要方面是:A) 空间复杂性和时间复杂性 B) 正确性和简明性C) 可读性和文档性 D) 数据复杂性和程序复杂性11. 计算机算法指的是:A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法12. 计算机算法必须具备输入、输出和 等5个特性。

A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性13.【严题集1.2②】数据结构和数据类型两个概念之间有区别吗? 答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。

数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。

14.【严题集1.8④】分析下面各程序段的时间复杂度(每小题5分,共20分) 2. s=0; for (i=0; i<n; i++)for(j=0; j<n; j++) s+=B[i][j]; sum=s; 答:O (n 2) 1. for (i=0; i<n; i++) for (j=0; j<m; j++) A[i][j]=0;答:O (m*n )15.设有数据逻辑结构S=(D,R ),试按各小题所给条件画出这些逻辑结构的图示,并确定相对于关系R ,哪些结点是开始结点,哪些结点是终端结点?(每小题5分,共15分)a. 【严蔚敏习题集P7 1.3②】D={d1,d2,d3,d4} R={(d1,d2),(d2,d3),(d3,d4) }答: d1→d2→d3→d4 d1—无直接前驱,是首结点 d4—无直接后继是尾结点b. D={d1,d2,…,d9}R={(d1,d2),(d1,d3),(d3,d4),(d3,d6),(d6,d8),(d4,d5), (d6,d7),(d8,d9) }答: 此图为树形结构 d1—无直接前驱,是根结点 d2,d5,d7,d9—无直接后继是叶子结点c. D={d1,d2,…,d9}R={(d1,d3),(d1,d8),(d2,d3),(d2,d4),(d2,d5),(d3,d9), (d5,d6),(d8,d9),(d9,d7), (d4,d7), (d4,d6)}答: 此图为图形结构 d1,d2—无直接前驱,是开始结点 d6,d7—无直接后继是终端结点3. x=0; for(i=1; i<n; i++) for (j=1; j<=n-i; j++) x++; 解:因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O (n 2)4. i=1; while(i<=n) i=i*3; 答:O (log 3n )。

数据结构课后习题

数据结构课后习题

第一章3.(1)A(2)C(3)D5.计算下列程序中x=x+1的语句频度for(i=1;i<=n;i++)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 n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数。

注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0)。

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

讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出。

【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。

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

(2)通过全局变量隐式传递优点:减少实参与形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次*/p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第二章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.用二分(对半)查找表的元素的速度比用顺序法( )A.必然快 B. 必然慢 C. 相等 D. 不能确定2.具有12个关键字的有序表,折半查找的平均查找长度()A. 3.1B. 4C. 2.5D. 53.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用( )查找法。

A. 分块查找B. 顺序查找C. 折半查找D. 基于属性4.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( )A.(100,80,90,60,120,110,130) B.(100,120,110,130,80,60,90)C.(100,60,80,90,120,110,130)D. (100,80,60,90,120,130,110)5. 在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0右孩子的平衡因子为1,则应作( ) 型调整以使其平衡。

A. LLB. LRC. RLD. RR7. 下面关于B和B+树的叙述中,不正确的是( )A. B树和B+树都是平衡的多叉树。

B. B树和B+树都可用于文件的索引结构。

C. B树和B+树都能有效地支持顺序检索。

D. B树和B+树都能有效地支持随机检索。

8. m阶B-树是一棵( )A. m叉排序树B. m叉平衡排序树C. m-1叉平衡排序树D. m+1叉平衡排序树9. 设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散列函数为H(key)=key MOD 13,散列地址为1的链中有()个记录。

A.1 B. 2 C. 3 D. 410.下面关于哈希(Hash,杂凑)查找的说法正确的是( )A.哈希函数构造的越复杂越好,因为这样随机性好,冲突小B.除留余数法是所有哈希函数中最好的C.不存在特别好与坏的哈希函数,要视情况而定D.若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单的将该元素删去即可11. 若采用链地址法构造散列表,散列函数为H(key)=key MOD 17,则需((1))个链表。

数据结构课后习题及答案

数据结构课后习题及答案

填空题(10 * 1’ = 10’)一、概念题2.2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。

2.3.当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。

2.6.带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。

3.6.循环队列的引入,目的是为了克服假溢出。

4.2.长度为0的字符串称为空串。

4.5.组成串的数据元素只能是字符。

4.8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。

7.2.为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。

5.7.广义表的深度是广义表中括号的重数7.8.有向图G可拓扑排序的判别条件是有无回路。

7.9.若要求一个稠密图的最小生成树,最好用Prim算法求解。

8.8.直接定址法法构造的哈希函数肯定不会发生冲突。

9.2.排序算法所花费的时间,通常用在数据的比较和交换两大操作。

1.1.通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。

1.2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。

1.3.存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。

1.4.抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。

1.5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。

2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。

2.9.在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。

数据结构习题课(2012)

数据结构习题课(2012)

数据结构习题课(2012)复习重点1.数据结构的概念,逻辑结构、物理结构的概念及各⾃包含的内容2.算法的特性、设计要求,如何度量算法的时间效率。

3.线性表的顺序/链式存储结构的特点,插⼊、删除算法。

4.栈和队列的逻辑特性,顺序栈的⼊栈/出栈、循环队列的⼊队/出队算法。

5.以三元组顺序表存放的稀疏矩阵的转置算法。

6.⼆叉树的性质及其四种遍历算法。

7.森林与⼆叉树的相互转换。

8.WPL、前缀编码的概念,哈夫曼树的构造算法。

9.图的相关概念,邻接矩阵及邻接表的存储结构。

10.图的深度优先/⼴度优先遍历算法。

11.最⼩⽣成树的两种算法。

12.拓扑排序的意义和算法。

13.最短路径算法。

14.顺序表、有序表的查找算法。

15.⼆叉排序树的性质、插⼊/删除算法、平衡⼆叉树的性质、插⼊算法。

16.哈希表的相关概念,常⽤的冲突处理⽅法。

17.直接插⼊排序、希尔排序、快速排序、堆排序、归并排序的算法。

注意:1.上述每个知识点可能会以任何题型出现,复习的时候别把它们当做“简答题”来复习。

2.红⾊(下划线)标识的知识点或算法,只要求对给出的初始数据,能画出结果则可。

其他的算法则可能会出现在“算法题”中。

⾃测题第1章绪论⼀、判断1.顺序存储⽅式只能⽤于存储线性结构。

(错)2.顺序查找法适⽤于存储结构为顺序或链式存储的线性表。

(对)⼆、选择1.计算机算法必须具备输⼊、输出、( B )等5个特性。

A.可⾏性、可移植性和可扩展性B.可⾏性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、安全性和稳定性2.算法在发⽣⾮法操作时可以作出处理的特性称为(C )。

A.正确性B.易读性C.健壮性D.可靠性3.数据结构是⼀门研究⾮数值计算的程序设计问题中计算机的(A )以及它们之间的( B )和运算的学科。

A.操作对象B.计算⽅法C.逻辑存储D.数据映像A.结构B.关系C.运算D.算法4.在数据结构中,逻辑上数据结构可分为:(B )A.动态结构和静态结构B.线性结构和⾮线性结构C.紧凑结构和⾮紧凑结构D.内部结构和外部结构5.数据结构主要研究数据的(D )A.逻辑结构B.存储结构C.逻辑结构和存储结构D.逻辑结构和存储结构及其运算的实现6.为了描述n个⼈之间的同学关系,可⽤(C )结构表⽰A.线性表B.树C.图D.队列7.下⾯的程序段违反了算法的(A )原则void sam(){ int n=2;while (!odd(n)) n+=2;printf(n);}A.有穷性B.确定性C.可⾏性D.健壮性三、问答1.什么是逻辑结构和物理结构?各⾃包含哪⼏种?2.线性结构和树型结构的特点分别是什么?3.简述顺序存储结构与链式存储结构在表⽰数据元素之间关系上的只要区别。

数据结构课程习题集第1页共25页

数据结构课程习题集第1页共25页

《数据结构》课程习题集第 1 页(共 25 页)一、. 选择题. 1. 算法的计算量的大小称为计算的()。

A.效率 B. 复杂性 C. 现实性 D. 难度.2. 算法的时间复杂度取决于().A.问题的规模 B. 待处理数据的初态 C. A和B D. 难确定.3. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的.4.从逻辑上可以把数据结构分为()两大类。

A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构.5.以下数据结构中,哪一个是线性结构()?A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串.6.下述哪一条是顺序存储结构的优点?()A.存储密度大 B.插入运算方便C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示.7.下面关于线性表的叙述中,错误的是哪一个?()A.线性表采用顺序存储,必须占用一片连续的存储单元。

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

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

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

.8.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表.9.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。

A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表.10. 链表不具有的特点是().A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比.11. 设一个栈的输入序列是 1,2,3,4,5,则下列序列中,是栈的合法输出序列的是()。

A. 5 1 2 3 4B. 4 5 1 3 2C. 4 3 1 2 5D. 3 2 1 5 4.12. 某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的是()。

数据结构C++陈慧南习题课1

数据结构C++陈慧南习题课1

// O(1)
习题三(第50页) 习题三( 50页
五个元素依次进栈(进栈后可立即出栈) 3 .1 设A、B、C、D、E五个元素依次进栈(进栈后可立即出栈),问 能否得到下列序列。若能得到,则给出相应的push pop序列 push和 序列; 能否得到下列序列。若能得到,则给出相应的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 不能。 中的E 而言, 最先出栈则表明, 答:2)和3)不能。对2)中的E,B,D而言,E最先出栈则表明,此 均在栈中,由于, 先于D进栈,所以应有D先出栈。同理3 时 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
设计共享栈。 3.2 设计共享栈。
0
n-1
↑ bottom1 bottom1
↑ top1 top1
↑ top2 top2
↑ bottom2 bot个足够大的栈空间 。 该空间的两端分别设为两个栈的 栈底, bottom1 bottom2 指示, 让两个栈的栈顶, top1 栈底 , 用 bottom1 和 bottom2 指示 , 让两个栈的栈顶 , 用 top1 和 top2 指示,都向中间伸展,直到两个栈的栈顶相遇, top2 指示 , 都向中间伸展 , 直到两个栈的栈顶相遇 , 才会发生 溢出。 溢出。 栈空,两栈均空:top1=0且 top2=n-1 栈空,两栈均空:top1 top2=n栈满:top1=top2 栈满:top1=top2-1

数据结构第七章习题课

数据结构第七章习题课

1、判定一个有向图是否存在回路,除了利用拓扑排序方法外,还可以利用( )A 、求关键路径的方法B 、求最短路径的Dijkstra 方法C 、宽度优先遍历算法D 、深度优先遍历算法 2.图中有关路径的定义是( )oA. 由顶点和相邻顶点序偶构成的边所形成的序列B. 由不同顶点所形成的序列C. 由不同边所形成的序列D.上述定义都不是3. 一个n 个顶点的连通无向图,其边的个数至少为()4. 当一个有N 个顶点的无向图用邻接矩阵 A 表示时,顶点Vi 的度是()5. 下列说法不正确的是( )oA. 图的遍历是从给定的源点出发每一个顶点仅被访问一次B. 遍历的基本算法有两种:深度遍历和广度遍历C. 图的深度遍历不适用于有向图D. 图的深度遍历是一个递归过程6. 无向图 G=(V,E),其中:V={a,b,c,d,e,f},E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序 列正确的是( )oA . a,b,e,c,d,fB . a,c,f,e,b,dC . a,e,b,c,f,dD . a,e,d,f,c,b 7. 设图如右所示,在下面的5个序列中,符合深度优先遍历的序列有多少?(a e d f cb a e f dc b C . 3个&在图采用邻接表存储时,求最小生成树的A. O (n ) B O (n+e ) 9.已知有向图 G=(V,E),其中 V={V 1,V 2,V 3,V 4,V 5,V 6,V 7},E={VV 1,V 2>,VV 1,V 3>,VV 1,V 4>,VV 2,V 5>,VV 3,V 5>,VV 3,V 6>,VV 4,V 6>,VV 5,V 7>,VV 6,V 7>},A . n-1B . nC . n+1D . nlogn ;nZ A[i, j]A. i 4nZ A 【,j]B. 订nZ A[j,i]C . VnnS A[i, j]迟 Aj,i]D. v + vPrim 算法的时间复杂度为(23C. O (n )D. O (n ) )oa eb d f cB . 4个G 的拓扑序列是()。

习题课 数据结构(C语言版)

习题课   数据结构(C语言版)

习题课1. 设有数据结构(D,R),其中D={d1,d2,d3,d4},R={r},r={(d1,d2),(d2,d3),(d3,d4)}。

试按图论中图的画法惯例画出其逻辑结构图。

2. 假设n为2的乘幂,并且n>2,求下列算法的时间复杂度及变量count的值(以n的函数形式表示)。

int Time(int n){count=0;x=2;while(x<n/2){x*=2;count++;}return(count);}//time3. 简述以下算法的功能。

(1) Status A(LinkedList L) { //L是无表头结点的单链表if (L&&L->next){Q=L;L=L->next;P=L;while (P->next)P=P->next;P->next =Q; Q->next=NULL;}return OK;}//A(2) void BB(LNode *s,LNode *q){p=s;while(p->next!=q)p=p->next;p->next=s;}//BBvoid AA(LNode *pa,LNode *pb){//pa和pb分别是指向单循环链表中的两个结点BB(pa,pb);BB(pb,pa);}//AA4. 指出以下算法中的错误和低效(即费时)之处,并将它改写成一个既正确又高效的算法。

Status DeleteK(SqList&a,int i,int k){//本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素if (i<1||k<0||i+k>a.length)return INFEASIBLE; //参数不合法else {for (count = 1;count <k;count++){//删除一个元素for (j = a.length;j>=i+1;j--)a.elem[j-1]=a.elem[j];a.length--;}return OK;}//DeleteK5. 已知指针la和lb分别指向两个无头结点单链表中的首元结点。

数据结构课后习题(第4-5章)

数据结构课后习题(第4-5章)

【课后习题】第4章 串 第5章 数组和广义表网络工程2010级( )班 学号: 姓名:题 号 一 二 三 四 总分 得 分一、填空题(每空1分,共30分)1. 串有三种机内表示方法: 、 和 ,其中前两种属于顺序存储结构,第三种属于 。

2. 若n 为主串长度,m 为子串长度,则串的BF (朴素)匹配算法最坏的情况下需要比较字符的总次数为 ,T(n)= 。

3. 是任意串的子串;任意串S 都是S 本身的子串,除S 本身外,S 的其他子串称为S 的 。

4. 设数组a[1…50, 1…60]的基地址为1000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[32,58]的存储地址为 。

5. 对于数组,比较适于采用 结构够进行存储。

6. 广义表的深度是指_______。

7. 将一个100100 A 的三对角矩阵,按行优先存入一维数组B[297]中,A 中元素66,66A 在B 数组中的位置k 为 。

8. 注意:a i,j 的k 为 2(i-1)+j-1,(i=1时j=1,2;1<i<=n 时,j=i-1,i,i+1) 。

9. 称为空串; 称为空白串。

10. 求串T 在主串S 中首次出现的位置的操作是 ,其中 称为目标串, 称为模式。

11. 对称矩阵的下三角元素a[i,j],存放在一维数组V 的元素V[k]中(下标都是从0开始), 12. k 与i ,j 的关系是:k= 。

13. 在n 维数组中每个元素都受到 个条件的约束。

14. 同一数组中的各元素的长度 。

15. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。

16.稀疏矩阵中有n个非零元素,则其三元组有行。

17.求下列广义表操作的结果:18.(1)GetHead【((a,b),(c,d))】=== ;19.(2)GetHead【GetTail【((a,b),(c,d))】】=== ;20.(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== ;21.(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== ;22.广义表E=(a,(b,E)),则E的长度= ,深度= ;二、判断题(如果正确,在下表对应位置打“√”,否则打“⨯”。

数据结构1-2章习题课答案

数据结构1-2章习题课答案

14
1-5 试说明数据的逻辑结构、存储结构和算法三者之间的关系。 答:数据的逻辑结构、存储结构和算法是数据结构所讨论的三个 方面。 1个数据逻辑结构可有多种不同的存储结构;存储结构是对 逻辑结构实现;算法是基于逻辑结构对操作的实现;函数是 基于存储结构对算法的实现,是程序;
15
1-6 请给出下列函数的大O和Ω表示:
}
4
16. 一维数组逻辑结构是 对于二维方式.
.
对于一个二维数组A[m][n],若采用行优先顺序存储的
方式, 则任一数组元素A[i][j]相对于A[0][0]的地址为
.
5
补充题: 按增长率由小到大的顺序排列下列各函数: 2100,(3/2)n,(2/3)n,(4/3)n,nn,n2/3, n1/2, n!,n,log2n,n/log2n,log22n,log2(log2n), nlog2n,nlog2n
2
7. 在顺序表中插入一个元素,需要平均移动
元素,具体移动的元素个数与
8. 在顺序表中逻辑上相邻的元素的物理位置 单链表中逻辑上相邻的元素的物理位置 置由 指示。
有关。
紧邻。 紧邻。
9. 在单链表中,除了首元结点外,任一结点的存储位 10. 在单链表中设置头结点的作用是 。
3
14. 从一维数组A[n]中顺序找出一个最大值元素的时间复杂度
数据结构: 所研究内容的着重点主要体现在三个方面: 第一是数据间的逻辑关系,即数据元素之间的关系。 第二是数据的存储关系,即数据在计算机中的存储结构。 第三是算法,即定义在逻辑关系上的一组操作。 因此,简单说来,数据结构所研究的问题是如何将现实世界中的事 物合理描述为计算机世界中所研究的对象,并根据研究对象的特点, 分析对象之间的关系、存储结构和操作的学科。

严蔚敏数据结构课后习题及答案解析

严蔚敏数据结构课后习题及答案解析

严蔚敏数据结构课后习题及答案解析第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。

(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。

①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像②(A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。

(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。

①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。

()2.算法就是程序。

()3.数据元素是数据的最小单位。

()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。

()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。

()三、填空题1.数据逻辑结构包括________、________、_________ 和_________四种类型,其中树形结构和图形结构合称为_____。

2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。

3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。

习题课 数据结构(C语言版)

习题课   数据结构(C语言版)

习题31. 设s='I AM A STUDENT',t='GOOD',q='WORKER'.求:StrLength(s),StrLength(t),SubString(s,8,7),SubString(t,2,1), Index(s,'A'),Index(s,t),Replace(s,'STUDENT',q),Concat(SubString(s,6,2),Concat(t,SubString(s,7,8))).2. 已知下列字符串a='THIS',f='A SAMPLE',c='GOOD',d='NE',b='',s=Concat(a,Concat(SubString(f,2,7),Concat(b,SubString(a,3,2)))), t=Replace(f,SubString(f,3,6),c),u=Concat(SubString(c,3,1),d),g='IS'v=Concat(s,Concat(b,Concat(t,Concat(b,u)))),试问:s,t,v,StrLength(s),Index(v,g),Index(u,g)各是什么?3. 试问执行以下函数会产生怎样的输出结果?void demonstrate( ){StrAssign(s,'THIS IS A BOOK');Replace(s,SubString(s,3,7),)'ESE ARE');StrAssign(t,Concat(s,'S'));StrAssign(u,'XYXYXYXYXYXY');StrAssign(v,SubSting(u,6,3));StrAssign(w,'W');printf('t=',t,'v=',v,'u=',Replace(u,v,w));}//demonstrate4. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址.已知A的起始存储位置(基地址)为1000,计算:(1)数组A的体积(即存储量);(2)数组A的最后一个元素a5,7的第一个字节的地址;(3)按行存储时,元素a14的第一个字节的地址;(4)按列存储时,元素a47的第一个字节的地址;5. 假设按低下标优先存储整数数组A9×3×5×8时,第一个元素的字节地址是100,每个整数占四个字节.问下列元素的存储地址是什么.(1) a0000(2) a1111(3) a3125(4) a82476. 按高下标优先存储方式(以最右的下标为主序),顺序列出数组A2×2×3×3中所有元素a ijkl,,为了简化表达,可以只例出(i,j,k,l)的序列.7. 设有上三角矩阵(a ij)n×n,将其上三角元素逐行存于数组B[m]中(m 充分大),使得B[k]=a ij且k=f l (i)+f2 (j)+c .试推导出函数f l, f2和常数c (要求f l和f2中不含常数项).8. 设有三对角矩阵(a ij)n×n,将其三条对角线上的元素逐行存于数组B[3][n]中,使的元素B[u][v]= a ij,试推导出从(i,j)到(u,v)的下标变换公式.9. 求下列广义表操作的结果:(1)GetHead【(p,h,w)】;(2)GetTail【(b,k,p,h)】;(3)GetHead【((a,b),(c,d))】;(4)GetTail【((a,b),(c,d))】;(5)GetHead【GetTail【((a,b),(c,d))】】;(6)GetTail【GetHead【((a,b),(c,d))】】;(7)GetHead【GetTail【GetHead【((a,b),(c,d))】】】;(8)GetTail【GetHead【GetTail【((a,b),(c,d))】】】;注意:【】是函数的符号.10. 利用广义表的GetHead和GetTail 操作写出如上题的函数表达式,把原子banana 分别从下列广义表中分离出来.(1)L1=(apple,pear,banana,orange);(2)L2=((apple,pear),(banana,orange));(3)L3=(((apple),(pear),(banana),(orange)));(4)L4=(apple,(pear),((banana)),(((orange)));(5)L5=((((apple))),((pear)),(banana),orange);(6)L6=((((apple),pear),banana),orange);(7)L7=(apple,(pear,(banana),orange));11. 按教科书5.5节中图5.8所示结点结构,画出下列广义表的存储结构图,并求它的深度.(1) ((( )),a,((b,c),( ),d),(((e))))(2) ((((a),b)),((( ),d),(e,f)))。

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

8-9
假设按下述递归方法进行顺序表的查找:若
表长n ≤10,则进行顺序查找,否则进行折 半查找。试画出对表长n =50的顺序表进行上
述查找时,描述该查找的判定树,并求出在 等概率情况下查找成功的平均查找长度。
参考答案
a12
1 a6 2 6 a2
1-5 7-11
13-17
a25
2
5
a38
3
a18
a6
6
a3
a9
3
a1
a4
9
a7
a11
1
a2
4
7
11
a5
a8 a10
a12
2
5
8 10 12
参考答案 a6
二叉判定树如下: a3
6
a9
3
a1
a4
9
a7
a11
1
a2
4
7
11
a5
a8 a10
a12
2
5
8 10 12
ASLUNSUCC = En/(n+1) = (3*3+4*10)/13= 49/13
a31 8
a44
1
3
4
8
1
4
26-30
32-37
19-24
39-43
45-50
ASL=(1+2*2+3*4+(4+5+6+7+8)*8+9*3)/50=284/50
8-10
已知下列关键词和它们对应的散列函数值:
key
Zhao Sun
H(key) 6
5
Li Wang Chen Liu Zhang
参考答案
a5
5
a2
a8
2
a1
a3
8
a6
a9
1
a2
3
6
a4
a7
9
a10
Hale Waihona Puke 4710 ASLsucc=(1+2*2+3*4+4*3)/10=29/10 ASLunsucc = (5*3 + 6*4)/11 = 39/11
8-8
对长度为12的有序表(a1,a2,…,a12)(其中 ai<aj,当i<j时)进行折半查找,在设定查找 不成功的情况时,关键词x<a1, x> a12, ai<x<ai+1 (i=1,2,…,11)等情况发生的概 率相等,则查找不成功的平均查找长度是多少 ?
(1)插入数据9 (2)删除节点17 (3)再删除节点13
参考答案
动态插入创建二叉查找树: (17,31,13,11,20,35,25,8,4,11,24,40,27)
17
17
31
17
13
31
17
13
31
17
13
31
17
13
31
11
11
20
11
20 35
(17,31,13,11,20,35,25,8,4,11,24,40,27)
B为第2个元素:2种 C为第2个元素:1种(高度为2) D为第2个元素:2种
以B为根的BST共2种(高度为2) 以C为根的BST共2种(高度为2) 以D为根的BST共5种(类似A) 一共有14种。高度为2的有6种,为3的有8种
8-7
画出对长度为10的有序表进行折半查找的判定 树,并求其等概率时查找成功的平均查找长度 。
拉链法(假设散列表长度是8,下标从0开始)
下标 7
指针
Li
Λ
6
Zhao
Liu Λ
5
Sun Λ
4
3
Λ
Wang
Zhang Λ
2
Λ
1
Chen Λ
0
Λ
查找成功ASL=(1*5+2*1+2*1)/7=9/7
合并拉链法(算法C)
拉链法(假设散列表的长度是8,下标从0开始

下标 元素
Link
7
Li
-1
6
Zhao
3
5
Sun
-1
4 Wang
2
3
Liu
-1
2 Zhang
-1
1 Chen
-1
0
查找成功ASL=(1*5+2*1+2*1)/7=9/7
8-13
已知序列 (17,31,13,11,20,35,25,8,4,11,24,40,27), 请画出该序列的二叉查找树,并分别给出下列 操作后的二叉查找树。
THEN(flag FALSE. RETURN.). pre t. BST(right(t),pre,flag). ▌
C++
bool bst(BinTreeNode<T>* t, BinTreeNode<T>*& pre ) /*t指向根结点;pre指向t的中根前驱,初值NULL*/ {
if(t==NULL) return true; if(! bst(left(t),pre)) return false; if(pre &&pre->data > t->data)) return false; pre=t; return bst(right(t),pre); }
算法BST (t.pre,flag) /* 使用中根遍历和pre指针判断t是否是二叉查找树*/ B1 [特判]
flag TRUE. IF t = NULL THEN RETURN. B2 [中根遍历]
BST(left(t),pre,flag). IF(!flag) THEN RETURN. IF( pre!=NULL AND data(pre)>data(t) )
数据结构习题 第 8 章
吉林大学计算机科学与技术学院 谷方明
第8章作业
8-4 8-7,8-8,8-9,8-10 8-13 8-22,8-23
8-4
设有关键词为A、B、C和D,按照不同的输入 顺序,共可能组成多少种不同的二叉查找树 。请画出其中高度较小的6种。
参考答案
以A为根的BST共5种
40
再删除节点13
20
13
31
11
25 35
8 4
24
27
40
20
11
31
8 4
25 35
24
27
40
8-22
编写判定给定的二叉树是否是二叉查找树的算 法。
[提示]判定二叉树是否为二叉查找树是建立在 中根遍历的框架基础下,在遍历中附设一指针 pre指向当前访问节点的中根直接前驱,每访 问一个节点便比较前驱节点pre和此节点是否 有序,若遍历结束后各节点和其中根直接前驱 均满足有序,则此二叉树为二叉查找树;否则 ,只要有一个节点不满足,那么此二叉树就不 是二叉查找树。
17
13
31
17
13
31
11
20 35
11
20 35
8 4
25
40
24
27
可编辑
插入数据9
17
13
31
11 8 4
20 35
25
40
24
27
17
13
31
11
8
4
9
20 35
25
40
24
27
删除17
17
13
31
11 8 4
20 35
25
40
24
27
20
13
31
11
25 35
8 4
24
27
7
4
1
6
4
由此构造哈希表,用线性探测法冲突,计算平 均查找长度ASL。若用拉链法解决冲突情况又 如何?
参考答案
线性探测法(假设散列表的长度是8,下标从0
开始)
下标
元素
7
Li
6
Zhao
5
Sun
4
Wang
查找成功ASL =(1*5+3*1+7*1)/7
3
2
Zhang
1
Chen
=15/7
0
Liu
相关文档
最新文档