数据结构的问答题

合集下载

数据结构期末考试试题

数据结构期末考试试题

武汉大学计算机学院2010年-2011学年第一学期“数据结构”考试试题(A)一、单项选择题(每小题2分,共计40分)1. 下列各项中属于逻辑结构的是。

A. 哈希表B. 有序表C. 单链表D. 顺序表2. 以下算法的时间复杂度为。

void fun(int n){ int i=1; while (i<=n) i=i*2; }A. O(n)B. O(n2)C. O(nlog2n)D. O(log2n)3. 在一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动个元素。

A. nB. i-1C. n-iD. n-i+14. 判断带头结点的循环单链表L中只有一个结点的条件是。

A. L==NULLB. L->next==LC. L->next->next==LD. L->next==NULL5. 中缀表达式a*(b+c)-d的后缀表达式是。

A. abcd*+-B. abc+*d-C. abc*+d-D. -+*abcd6. 设环形队列中数组的下标是0~N-1,其头尾指针分别为f和r(f指向队列中队头元素的前一个位置,r指向队尾元素的位置),则其元素个数为。

A. r-fB. r-f-1C. (r-f)%N+1D. (r-f+N)%N7. 若用一个大小为6的数组来实现环形队列,队头指针front指向队列中队头元素的前一个位置,队尾指针rear指向队尾元素的位置。

若当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为。

A. 1和5B. 2和4C. 4和2D. 5和18. 稀疏矩阵采用压缩存储后,通常必会失去功能。

A. 顺序存储B. 随机存取C. 输入输出D. 以上都不对9. 一棵有124个叶子结点的完全二叉树,最多有个结点。

A. 247B. 248C. 249D. 25010. n个结点的线索二叉树上含有的线索个数为。

数据结构考试题2

数据结构考试题2
q=q->next;
else
break;
}
while (p!=NULL && q!=NULL && p->data==q->data)
{//当两者值相等时同步后移
p=p->next;
q=q->next;
}
if (q==NULL)//当B中节点比较完毕返回1
return 1;
else//否则返回0
return 0;

1.设A=(a1,a2,…,an),B=(b1,b2,…,bm)是两个递增有序的线性表(其中n、m均大于1),且所有数据元素均不相同。假设A、B均采用带头节点的单链表存放,设计一个尽可能高效的算法判断B是否为A的一个子序列,并分析你设计的算法的时间复杂度和空间复杂度。(15分)
2.假设二叉树b采用二叉链存储结构存储,试设计一个算法,输出该二叉树中从根节点出发的第一条最长的路径长度,并输出此路径上各节点的值。并分析你设计的算法的时间复杂度和空间复杂度。(15分)
{//pathlen和maxpathlen的初值均为0
int i;
if (b==NULL)
{if (pathlen>maxpathlen)//通过比较求最长路径
{for (i=pathlen-1;i>=0;i--)
maxpath[i]=path[i];
maxpathlen=pathlen;
}
}
else
}
}
A. O(n)B. O( )
C. O(nlog2n)D. O(log2n)
3.在一个双链表中,删除p所指节点(非首、尾节点)的操作是。
A.p->prior->next=p->next;p->next->prior=p->prior;

数据结构模拟试卷及参考答案

数据结构模拟试卷及参考答案

数据结构模拟试卷(一)及参考答案一.单项选择题(本大题共15小题,每小题2分,共30分)1.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用( A )方法最快。

A、起泡排序B、快速排序C、堆排序D、直接选择排序2.算法分析的目的是(B)A.辨别数据结构的合理性B.评价算法的效率C.研究算法中输入与输出的关系D.鉴别算法的可读性3.在线性表的下列运算中,不改变数据元素之间结构关系的运算是(C)A.插入B.删除C.定位D.排序4.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为(D)A.3,2,6,1,4,5 B.5,6,4,2,3,1C.1,2,5,3,4,6 D.3,4,2,1,6,55.设串sl=″DataStructureswithJava″,s2=″it″,则子串定位函数index(s1,s2)的值为(A)A.15 B.16 C.17 D.186.一个顺序存储的线性表的第一个元素的存储地址是100,每个元素的长度为4,则第4个元素的存储地址是(B)。

A. 108B. 112C. 116D. 1207.从一个具有n个结点的单链表中查找其值等于x的结点,在查找成功的情况下,平均需要比较(C)个结点。

A. nB. n/2C. (n+1)/2D. (n-1)/28.在任意一棵二叉树的前序序列和后序序列中,各叶子之间的相对次序关系(D)A.不一定相同 B.互为逆序C.都不相同D.都相同9.高度为5的二叉树至多有结点数为(A)A. 63B. 32C. 24D.6410.若用邻接矩阵表示一个有向图,则其中每一列包含的″1″的个数为(B)A.图中每个顶点的出度B.图中每个顶点的入度C.图中弧的条数D.图中连通分量的数目11.图的邻接矩阵表示法适用于表示(C)A.无向图B.有向图C.稠密图D.稀疏图12.在一个单链表中,若p所指的结点不是最后一个结点,在p之后插入s所指的结点,则执行(D)。

数据结构教材课后习题及参考答案习题 (10)[3页]

数据结构教材课后习题及参考答案习题 (10)[3页]

习题6一.填空题1.树中除根结点外,其他结点有且只有个直接前驱结点,但可以有个直接后继结点。

2.树中结点的度,是指结点拥有的个数;一棵具有n个结点的树,该树中所有结点的度数之和为。

3.深度为h的完全二叉树至少有个结点,至多有个结点,若按层序从1开始编号,则编号最小的叶子结点的编号是。

5.将一棵完全二叉树按层序从1进行编号,对编号为i的结点,如果有左孩子,则左孩子的编号应该是;如果有右孩子,则右孩子的编号应该是。

6.一棵完全二叉树有1001个结点,其深度是,叶子结点个数是。

78.树的先根遍历序列与其对应二叉树的遍历序列相同,树的后根遍历序列与其对应二叉树的遍历序列相同。

9.若二叉树共有n个结点,采用线索链表存储其线索二叉树,那么在所有存储结点里,一共有个指针域,其中有个指针是指向其孩子结点的,个指针是指向其前驱后继结点的。

指向前驱后继结点的指针称为。

10.哈夫曼树又称。

它是n个带权叶子结点构成的所有二叉树中,带权路径长度的二叉树。

11.哈夫曼树中,权值较大的叶结点一定离根结点。

由n个带权值的叶结点生成的哈夫曼树中共有个结点,其中有个分支结点。

12.哈夫曼树中不存在度为的结点。

二.选择题1.有关二叉树下列说法正确的是()A.二叉树的度为2 B.一棵二叉树的度可以小于2C.二叉树中至少有一个结点的度为2 D.二叉树中任何一个结点的度都为2 2.二叉树的第i层上最多含有结点数为()A.2i B.2i-1-1 C.2i-1D.2i-13.一棵具有1025个结点的二叉树的高度为( )。

A.11 B.10 C.11至1025之间D.10至1024之间4.一棵高度为5的二叉树,其结点总数为()。

A.6~17 B.5~16 C.6~32 D.5~315.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点的个数是( )。

A.9 B.11 C.15 D.不能确定6.一棵完全二叉树具有600个结点,则它有( ) 个度为1的结点。

数据结构与算法面试题

数据结构与算法面试题

数据结构与算法面试题目录1. 数组 (3)2. 链表 (5)3. 栈 (9)4. 队列 (10)5. 堆(优先队列) (12)6. 二叉树 (15)7. 二叉查找树 (24)8. 字典树 (26)9. 平衡树(AVL) (26)10. 红黑树 (26)11. B树/B+树 (28)12. 哈希 (29)13. 图 (31)14. 字符串 (33)15. 排序 (36)16. 二分查找 (40)17. 跳跃列表 (41)18. 动态规划 (42)1.数组应用场景:1)数据比较少2)经常做的运算是按序号访问数据元素面试题选择题:1)对于长度为n的线性表,建立其对应的单链表的时间复杂度为()。

O(1)O(log2n)O(n)O(n^2)2)下列哪些不是线性表?队列栈关联数组链表3)稀疏矩阵一般的压缩存储方法有两种,即()二维数组和三维数组三元组和散列三元组和十字链表散列和十字链表4)将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为1004055805)设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij (1≤i,j≤n,且i≤j)在B中的位置为()i(i-1)/2+jj(j-1)/2+ij(j-1)/2+i-1i(i-1)/2+j-16)若有定义:int c[4][5],( *pc)[5];pc=c;那么,下列对数组C的元素引用正确的是( )。

pc+1* (pc+3)* (pc+1) +3* (*pc+2)问答题:1)数组和链表的区别思路:从逻辑结构上来看,数组必须实现定于固定的长度,不能适应数据动态增减的情况,即数组的大小一旦定义就不能改变。

当数据增加是,可能超过原先定义的元素的个数;当数据减少时,造成内存浪费;链表动态进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。

从内存存储的角度看;数组从栈中分配空间(用new则在堆上创建),对程序员方便快速,但是自由度小;链表从堆中分配空间,自由度大但是申请管理比较麻烦。

数据结构第六章题目讲解

数据结构第六章题目讲解

数据结构第六章题⽬讲解02⼀选择题:1、以下说法错误的是①树形结构的特点是⼀个结点可以有多个直接前趋②线性结构中的⼀个结点⾄多只有⼀个直接后继③树形结构可以表达(组织)更复杂的数据④树(及⼀切树形结构)是⼀种"分⽀层次"结构⑤任何只含⼀个结点的集合是⼀棵树2.深度为6的⼆叉树最多有( )个结点①64 ②63 ③32 ④313 下列说法中正确的是①任何⼀棵⼆叉树中⾄少有⼀个结点的度为2②任何⼀棵⼆叉树中每个结点的度都为2 ⼆叉树可空③任何⼀棵⼆叉树中的度肯定等于2 ④任何⼀棵⼆叉树中的度可以⼩于24 设森林T中有4棵树,第⼀、⼆、三、四棵树的结点个数分别是n1,n2,n3,n4,那么当把森林T转换成⼀棵⼆叉树后,且根结点的右⼦树上有()个结点。

①n1-1 ②n1③n1+n2+n3④n2+n3+n4⼆.名词解释:1 结点的度 3。

叶⼦ 4。

分⽀点 5。

树的度三填空题⼆叉树第i(i>=1)层上⾄多有_____个结点。

1、深度为k(k>=1)的⼆叉树⾄多有_____个结点。

2、如果将⼀棵有n个结点的完全⼆叉树按层编号,则对任⼀编号为i(1<=i<=n)的结点X有:若i=1,则结点X是_ ____;若i〉1,则X的双亲PARENT(X)的编号为__ ____。

若2i>n,则结点X⽆_ _____且⽆_ _____;否则,X的左孩⼦LCHILD(X)的编号为____。

若2i+1>n,则结点X⽆__ ____;否则,X的右孩⼦RCHILD(X)的编号为_____。

4.以下程序段采⽤先根遍历⽅法求⼆叉树的叶⼦数,请在横线处填充适当的语句。

Void countleaf(bitreptr t,int *count)/*根指针为t,假定叶⼦数count的初值为0*/ {if(t!=NULL){if((t->lchild==NULL)&&(t->rchild==NULL))__ __;countleaf(t->lchild,&count);countleaf(t->rchild,&count);}}5 先根遍历树和先根遍历与该树对应的⼆叉树,其结果_____。

数据结构复习题

2017 ~2018学年度第2学期《数据结构》复习提纲1.在数据结构中,从逻辑上可以把数据结构分为_________两类。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构2.链表不具有的特点是_________。

A.可随机访问任一元素B.插入、删除不需要移动的元素C.不必事先估计存储空间D.所需空间与线性表长度成正比3.若线性表最常用的运算是存取第i个元素及其前驱元素,则采用_________存储方式节省时间。

A.单链表B.双链表C.循环单链表D.顺序表4.算法分析的目的是_________。

A.找出数据结构的合理性B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易读性和文档性5.若一个栈用数组data[1..n]存储,初始栈顶指针top为0,则以下元素x进栈的操作正确的是_________。

A.top++; data[top]=x;B.data[top]=x; top++;C.top--; data[top]=x;D.data[top]=x; top--;6.表达式a*(b+c)-d的后缀表达式是_________。

A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd7.递归函数f(1)=1,f(n)=f(n-1)+n(n>1)的递归出口是_________。

A.f(1)=1B.f(1)=0C.f(0)=0D.f(n)=n8.将递归算法转换成对应的非递归算法时,通常需要使用_________保存中间结果。

A.队列B.栈C.链表D.树9.对稀疏矩阵采用压缩存储,其缺点之一是_________。

A.无法判断矩阵有多少行、多少列B.无法根据行、列号查找某个矩阵元素C.无法根据行、列号直接计算矩阵元素的存储地址D.使矩阵元素之间的逻辑关系更加复杂10.一个n阶上三角矩阵a按行优先顺序压缩存放在一维数组b中,则b中的元素个数是_________。

数据结构

一、选择题:20*31. 组成数据的基本单位是( C ) (A)数据项(B)数据类型(C)数据元素(D)数据变量2. 在数据结构中,从逻辑上可以把数据结构分成( C )(A) 动态结构和静态结构(B) 紧凑结构和非紧凑结构(C) 线性结构和非线性结构(D) 内部结构和外部结构3. 算法性能评价的两个主要方面是( D ) (A)正确性和简单性(B)可读性和文档性(C)数据复杂性和程序复杂性(D)时间复杂度和空间复杂度4. 求下列程序段的时间复杂度( A )for( i=1; i<=n ; i + + )for ( j=1; j<=n ; j + + )x=x+1; (A)O(n2)(B)O(n) (C)O(1) (D)O(0)5.把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里,用这种方法存储的线性表简称为( A ) ( A ) 顺序表( B ) 单链表:(存在任意地址) ( C ) 双向链表( D ) 循环链表6. 用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是( B )( A ) 当前结点所在地址域( B ) 指针域( C ) 空域( D ) 空闲域7. 设单链表中指针p指向结点a i,,若要删除a i之后的结点(若存在),则需修改指针的操作为( A )(A) p.next = p.next.next(B)p=p.next (C) p=p.next.next (D)next=p8. 一个栈的入栈序列是a,b,c,d,e, 则栈的不可能的输出序列是( C )(A) e,d,c,b,a (B)d,e,c,b,a (C)d,c,e,a,b(D)a,b,c,d,e9. 一个队列的入列序列是1,2,3,4,则队列的输出序列是( B )(A)4,3,2,1 (B)1,2,3,4 (C)1,4,3,2 (D)3,2,4,110. 栈和队列的共同点是(C )(A)都是先进后出(B)都是先进先出(C)只允许在端点处插入和删除元素(D)没有共同点11. 对任何一棵二叉树T, 如果其终端结点数为n0, 度为2的结点数为n2,则( A)(A) n0= n2+1(B) n2= n0+1 (C) n0= 2 n2 +1 (D) n2=2 n0+112.深度为k的二叉树至多有( B ) 个结点(A) 2k(B) 2k-1(C) 2k-1 (D)2k-1-113. 按照二叉树的定义,具有3个结点的二叉树有( C )种(A)3 (B)4 (C)5 (D)614.在一个具有10个结点度为3的树中,该树的最少的层次为( B ) (A)2 (B) 3(C) 4 (D) 515.对线性表进行折半查找时,要求线性表必须( C ) (A)以顺序方式存储(B)以链接方式存储(C)以顺序方式存储,且结点关键字有序排列(D)以链接方式存储,且结点关键字有序排列1、树最合适用来表示( B )A、有序数据元素B、元素之间具有分支层次关系的数据C、无序数据元素D、元素之间无联系的数据2、假定一颗三叉树的结点数为50,则它的最小高度为(D)。

哈工程历年数据结构试题

05年招收硕士研究生入学考试试题科目名称:数据结构试题编号:429 共3页一.判断题(每小题1分,共10分)1.若一个算法中的语句频度之和为T(n)=1024n+4nlogn,则算法的时间复杂度为0(nlogn)2.串是一种特殊的线性表。

3.两个栈共享一个向量空间的优点是其中一个栈可用该空间一半或一半以上。

4.广义表是非线性数据结构,因为表中的元素可以是子表。

5.二叉树的中序序列中,结点A在结点B之前的条件是A是B的祖先。

6.若一个有向图的拓扑排序没有包括全部顶点,则说明该图存在有向回路。

7.具有几个顶点e条边的无向图,若用邻接矩阵作为存储结构,则求任一顶点的度数的时间复杂度为0(e).8.哈希法既是一种查找方法,又是一种存储方法。

9.希尔排序是属于插入排序的改进方法。

10.在单链表上可以实现简单选择排序,但难以实现堆(选择)排序。

二.填空题(每小题2分,共20分)1.在字符串S=“structure”中,以t为首字符的子串有——个。

2.N阶的下三角阵按行序为主序存储,每个元素占L个单元,若已知首地址为loc(A00 ),则元素Aij(0≤j≤i≤n-1)的存储地址loc(Aij)为——3.已知一个栈的入栈序列是1,2,3,……,n,其输出序列为P1,P2,P3,……,Pn。

若P1=n,则Pi为——4.已知广义表LS=(a,(b,c,d),e)运用head和tail函数取出LS中的原子b的运算是——5.在一棵具有h层的满三叉树中,结点总数为——6.已知在一棵含有n个结点的树中,只有度为3和度为0的结点,则树中度为0的结点数为——7.设树T的度为4,其中度为1,2,3,4的结点树分别为4,2,1,1,则听众叶子数为——8.在含有20个关键字的4阶B-树中进行查找,至多访问——个结点。

9.将m个互为冲突(具有相同的哈希地址)的记录存入哈希表,处理冲突采用伪随机探测法。

最多需要探测——次。

10.将30个记录分成5块,进行分块查找,平均查找长度是——。

数据结构题库

线性结构题 1. 栈和队列的共同特点是(A)。 (A)只允许在端点处插入和删除元素 (B)都是先进后出 (C)都是先进先出 (D)没有共同点 2. 以下数据结构中哪一个是非线性结构?(D) (A)队列 (B)栈(C)线性表 (D)二叉树 3. 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在(C)位置。脚注(10)表示用10进制表示。 (A)688(B)678(C)692(D)696 4.设某数据结构的二元组形式表示为A=(D,R),D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},则数据结构A是(B)。 (A)线性结构 (B)树型结构 (C)物理结构 (D)图型结构 5.下面程序的时间复杂为(B) for(i=1,s=0;i<=n;i++){t=1;for(j=1;j<=i;j++)t=t*j;s=s+t;} (A)O(n) (B)O(n2) (C)O(n3) (D)O(n4) 6.下列程序段的时间复杂度为(A)。 i=0,s=0;while(s(A)O(n1/2) (B)O(n1/3) (C)O(n) (D)O(n2) 7.为解决计算机主机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区。主机将要打印输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是(B) (A)栈 (B)队列 (C)树 (D)图 8.已知二级数组a[50][40]按行序为主序存放,每个元素占4个字节空间,若数组a的首元素a[1][1]地址为2012,计算a[23][21]的内存地址为(B)。 (A)5600 (B)5612 (C)2912 (D)3600 9.设输入序列为1、2、3、4、5、6,则通过栈的作用后可以得到的输出序列为(B)。 (A)5,3,4,6,1,2 (B)3,2,5,6,4,1 (C)3,1,2,5,4,6 (D)1,5,4,6,2,3 10.设有一个10阶的下三角矩阵A(包括对角线),按照从上到下、从左到右的顺序存储到连续的55个存储单元中,每个数组元素占1个字节的存储空间,则A[5][4]地址与A[0][0]的地址之差为(B)。 (A)10 (B)19 (C)28 (D)55 11.广义表A=(a,b(c,d),(e,(f,g))),则head(tail(head(tail(tail(A)))))值为(D) (A)(g) (B)(d) (C)(c) (D)(d) 12.数据的最小单位是(A)。 (A)数据项 (B)数据类型 (C)数据元素 (D)数据变量 13.函数substr(“DATASTRUCTURE”,5,9)的返回值为(A)。 (A)“STRUCTURE” (B)“DATA” (C)“ASTRUCTUR” (D)“DATASTRUCTURE” 14.在线性表中,一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(A)。 (A)110 (B)108(C)100 (D)120 15.栈中元素的进出原则是(B)。 (A)先进先出(B)后进先出(C)栈空则进(D)栈满则出 16.设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,

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

1.线性表L第i个存储结点a i的起始地址LOC(a i)可以通过下面的公式计算得到:LOC(a i)= LOC(a i-1)+k,其中k表示存储结点的长度。

这个公式对吗?为什么?答:这个公式是对的,因为第i个存储结点a i的起始地址LOC(a i),实际上就是等于第i-1个存储结点a i-1的起始地址LOC(a i-1)加上一个存储结点的长度k得到。

2.打算形成一个有表头结点的循环双链表,初始时除了每个结点的Next域已经链接好外,它们的Prior域还都是空的。

有人编写了下面的算法,试图完成Prior域的链接:Com_Cd (Cd_h){ptr = Cd_h->Next ;qtr = Cd_h ;while (ptr != Cd_h){ptr ->Prior = qtr ;qtr = ptr ;ptr = ptr->Next ;}Cd_h->Prior = qtr ;}读懂并理解它,解释为什么能够完成各结点的Prior域的链接?答:算法中用两个指针ptr和qtr配合,从头到尾扫描这个循环双链表,以达到让每个结点的Prior域指向其直接前驱的目的。

3.若元素进栈的序列是1、2、3、…、n,有一个出栈序列的第1个元素是n。

那么,这个出栈序列的第i个元素是什么?答:由于栈具有“先进后出”的特性,因此只有将1、2、3、…、n依次都进栈后,出栈序列的第1个元素才能是n。

所以,在这个出栈序列里,第个i元素应该是n-i+1。

4.设有6个元素a1、a2、a3、a4、a5、a6,它们以此顺序依次进栈。

假定要求它们的出栈顺序是a4、a3、a2、a6、a5、a1,那么应该如何安排push和pop操作序列?答:所需的push和pop操作序列如下:push,push,push,push,pop,pop,pop,push,push,pop,pop,pop5.有一个递归函数Write(),定义如下:Write(x){if (x != 0){Write (x-1) ;for (j=1; j<=x; j++)printf (“%3d”, x);printf (“/n”);}}试问,Write(5)的输出结果是什么?答:输出结果为:13 3 34 4 4 45 5 5 5 56.试问满二叉树与完全二叉树之间有何关系?答:由满二叉树与完全二叉树的定义可知,满二叉树一定是一棵完全二叉树,但完全二叉树却不一定是一棵满二叉树。

如果一棵二叉树不是完全二叉树,那么它绝对不可能是一棵满二叉树。

7.分别写出如图5-32所示二叉树的先序、中序、后序遍历序列。

图5-32 二叉树示例答:先序遍历序列为:A-B-C-D-F-G-H-E,中序遍历序列为:B-A-D-G-F-H-C-E,后序遍历序列为:B-G-H-F-D-E-C-A。

8.利用折半查找法对一个长度为10的有序表进行查找,请填写查找表中每个元素时所需要的比较次数。

答:根据折半查找算法9.在冒泡排序算法里,是什么条件保证它的稳定性?答:冒泡排序是一种稳定排序算法,主要是因为算法里每趟扫描时的判定条件设定为:Ar[j].key>Ar[j+1].key,它保证了原先在前面的记录,排序后仍然排在前面,不会改变它们之间的相对顺序。

如果把大于号改为大于等于,那么算法就不是稳定的应用题1.已知一个带表头结点的递增单链表。

试编写一个算法,功能是从表中去除值大于min、且值小于max的数据元素。

(假定表中存在这样的元素)答:所需算法编写如下。

Del_Sq(Lk_h, nim, max){ptr = Lk_h->Next ; /* ptr指向链表的起始结点*/while ( (ptr != NULL) && (ptr->Data <= min) ) /* 跳过所有值<=min的结点*/{qtr = ptr ;ptr = ptr->Next ;}while ( (ptr != NULL) && (ptr->Data <max) ) /* 若结点值<max,则去除*/p = p->Next ;qtr->Next = ptr ; /* qtr指出第1个大于max的结点位置,完成链接*/ }2.一个单链表Lk的表头指针为Lk_h,不同结点的Data域值有可能相同。

编写一个算法,功能是计算出Data域值为x的结点的个数。

答:算法应该遍历链表的每一个结点,遇到一个结点的Data域值为x时,计数器n就加1。

最后返回计数器n。

Count_Lk (Lk_h){n = 0 ;ptr = Lk_h ;while (ptr != NULL){if (ptr->Data == x)n = n+1 ;ptr = ptr->Next}return (n) ;}12.编写一个算法,它能够输出顺序队列Qs上所有元素的值。

答:算法编写如下:Print_Qs (Qs_front, Qs_rear){if (Qs_front == Qs_rear) /* 队列空!*/printf (“queue is empty!”);else /* 队列非空!*/{qtr = Qs_front ;while (qtr <= Qs_rear){printf (“%d”, *qtr);qtr++ ;}}}3答:相应的后缀表达式是583*+2-,其图示如下。

4.算法:Trans_St(St,ch1,ch2){i=1;While(St[i]!="\0"){if(St[i]==ch1)St[i]==ch2;i++;}}是通过while循环来实现将顺序串St中所有的字符ch1改为字符ch2的。

请改写成用for 循环来实现相同的功能。

答:用for 循环改写的算法如下。

Trans_St(St, ch1, ch2){for (i=1; i<=St_len; i++)if (St[i] == ch1)St[i] = ch2;}5.已知顺序串St,编写一个算法,将其中第i个字符开始连续的j个字符删除。

(提示:先要判断所给参数是否合理,然后通过将第i+j开始往后的字符全部移动j个位置,完成删除的功能)答:算法编写如下。

Moveij(St, i, j){if (i+j<=St_len){for (k=i+j; k<=St_len; k++) /* 将i+j开始往后的所有字符前移j个位置*/St[k-j]=St[k];St_len=St_len-j; /* 修改St的长度*/St[St_len]= “\0”; /* 安放新的串结束符*/}elseprintf (“参数不合理,无法进行删除!”);}6.在算法4-12的最后,为了释放被删结点使用的存储空间,先做了操作:ptr->Next = NULL;把由指针ptr指向的最后一个要释放空间的结点的Next域设置为NULL,然后通过while循环完成释放。

其实,由于知道要释放空间的结点共有m个,因此可以取消这一操作,改用for循环通过m来控制释放空间的结点个数。

请试着按照这一思路改写那一小段算法。

答:改写一小段算法如下。

for (j=1; j<=m; j++){ptr=rtr;rtr=rtr->Next;free(ptr);}7.已知两个mⅹn的矩阵A和B。

编写一个算法,求C=A+B。

即C也是一个mⅹn的矩阵,其元素满足条件:c ij = a ij + b ij(1≤i≤m,1≤j≤n)答:算法名为Add_Mt(),参数为A,B,C。

Add_Mt(A, B, C){for (i=1; i<=m; i++)for (j=1; j<=n; j++)C[i][j] = A[i][j] + B[i][j];}8.已知中序遍历序列为:A-B-C-E-F-G-H-D,后序遍历序列为:A-B-F-H-G-E-D-C。

试画出这棵二叉树。

9.一棵有11个结点的二叉树的顺序存储情况如表所示,序号3的结点是根结点。

画出该二叉树,并给出它的先序、中序、后序遍历序列(其中“^”表示空)。

答:二叉树如图所示,先序遍历序列为:A-C-B-R-S-E-D-F-M-L-K,中序遍历序列为:R-B-S-C-E-A-F-D-L-K-M,后序遍历序列为:R-S-B-E-C-F-K-L-M-D-A。

10.已知一棵树的孩子链表表示法如图6-24所示,试画出该树。

图6-24 一棵树的孩子链表表示法图6-25 树示例答:该树形状如下图所示。

11.已知一棵树如图6-25所示。

请画出该树的以下存储结构:(1)双亲表示法;(2)带双亲的孩子链表表示法(我们介绍过双亲表示法和孩子链表表示法,没有介绍过带双亲的孩子链表表示法。

望能够把两者结合起来);(3)孩子/兄弟链表表示法。

答:(1)双亲表示法如下图(a)所示;(2)带双亲的孩子链表表示法如图下(b)所示;(3)孩子/兄弟链表表示法如下图(c)所示。

12,将图6-28所示的森林转换成对应的二叉树。

图6-28 森林示例图6-29 树示例答:对应的二叉树如下图所示。

13.将图6-29所示的树转换成相对应的二叉树。

答:对应的二叉树如下图所示14.设散列函数为h(key)=key % 11,散列表长为11(索引地址为0~10)。

给定:SUN,MON,TUE,WED,THU,FRI,SAT取单词第1个字母在英语字母表中的序号为关键字值(比如S的关键字值为19),采用链地址法解决散列地址冲突。

请画出对应的散列表。

答:对应的散列表如下。

15.有关键字序列:36、27、68、33、97、40、81、24、23、90、32、14,散列表长为13,采用的散列函数为:h(key)=key%13,使用开放地址法的线性探测解决冲突。

请完成下面散列表的填写(比如,第1个插入的是36,它的散列地址为10,由于没有发生冲突,所以比较一次就存放在了地址为10的位置),求出其平均查找长度ASL。

答:最终的散列表如图所示。

其平均查找长度ASL为:ASL(线性探测)=(2+1+2+1+2+5+1+1+3+1+1+3)/12=1.9216.已知由12个关键字组成的序列:Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec散列表长为13(地址为0~12),散列函数为:h(key)=i/2,其中i为关键字中第1个字母在字母表里的序号。

(1)用线性探测法解决冲突,给出所构造的散列表以及查找成功的平均查找长度。

(2)用链地址法解决冲突,给出所构造的散列表以及查找成功的平均查找长度。

答:(1)用线性探测法解决冲突时,插入地址及比较次数如下:h(Jan)=10/2=5,比较1次插入;h(Feb)=6/2=3,比较1次插入;h(Mar)=13/2=6,比较1次插入;h(Apr)=1/2=3,比较1次插入;h(May)=13/2=6,比较2次插入;h(Jun)=10/2=5,比较4次插入;h(Jul)=10/2=5,比较5次插入;h(Aug)=1/2=0,比较2次插入;h(Sep)=19/2=9,比较2次插入;h(Oct)=15/2=7,比较5次插入;h(Nov)=14/2=7,比较6次插入;h(Dec)=4/2=2,比较1次插入。

相关文档
最新文档