假设二叉树采用二叉链存储结构存储
数据结构 试题(A)-答案
3.建立平衡二叉树过程如图2所示(图中加阴影的结点表示要调整的结点)。
图2构造平衡二叉树过程
评分标准:每次调整占1分。
4.答:不能。因为在这里,二分查找只减少了关键字间的比较次数,而记录的移动次数不变,时间的复杂度仍为O(n2)。
评分标准:答对“不能”占3分,说明理由占5分。
A.872B.860
C.868D.864
8.一个具有1025个结点的二叉树的高h为。
A.11B.10
C.11~1025D.12~1024
9.一棵二叉树的后序遍历序列为DABEC,中序遍历序列为DEBAC,则先序遍历序列为。
A.ACBEDB.DECAB
C.DEABCD.CEDBA
10.对图1所示的无向图,从顶点1开始进行深度优先遍历;可得到顶点访问序列。
2.给出如下各种情况下求任意一个顶点的度的过程(只需文字描述):(8分)
(1)含n个顶点的无向图采用邻接矩阵存储;
(2)含n个顶点的无向图采用邻接表存储;
(3)含n个顶点的有向图采用邻接矩阵存储;
(4)含n个顶点的有向图采用邻接表存储。
3.将整数序列{4,5,7,2,1,3,6}中的数依次插入到一棵空的平衡二叉树中,试构造相应的平衡二叉树。(要求画出每个元素插入过程,若需调整,还需给出调整后的结果,并指出是什么类型的调整,12分)
A.输出第i(1≤i≤n)个元素值
B.交换第1个元素与第2个元素的值
C.顺序输出这n个元素的值
D.输出与给定值x相等的元素在线性表中的序号
4.设n个元素进栈序列是p1,p2,p3,…,pn,其输出序列是1,2,3,…,n,若p3=3,则p1的值。
A.可能是2B.一定是2
第七章和第八章补充练习题(答案)
7.3补充练习题及参考答案7.3.1单项选择题1.对于一棵具有n 个结点、度为4的树来说,_____________.A.树的高度最多是n-3B.树的高度最多是是n-4C.第i 层上最多有4(i-1)个结点D.至少在某一层上正好有4个结点答:这样的树中至少有一个结点的度为4,也就是说,至少有一层中有4个或以上的结点,因此树的高度最多是n-3。
本题的答案为A 。
2.度为4、高度为h 的树_____________.A.至少有h+3个结点B.最多有4h -1个结点C.最多有4h 个结点D.至少有h+4个结点答:与上小题分析相同,本题的答案为A 。
3.对于一棵具有n 个结点、度为4的树来说,树的高度至少是_____________.A.)]2([log 4nB.)]13([log 4-nC.)]13([log 4+nD.)]12([log 4+n答:由树的性质4可知,具有n 个结点的m 次树的最小高度为)]1)1(([log +-m n m 。
这里m=4,因此最小高度为)]13([log 4+n 。
本题的答案为C 。
4.在一棵3次树中度为3的结点数为两个,度为2的结点数为一个,度为1的结点数为两个,则度为0的结点数为_____________个。
A.4B.5C.6D.7答:3n =2,2n =1,1n =2,001235n n n n n n +=+++=,n=度之和+1=33n +22n +1n +1=11, 所以65110=-=n 。
本题的答案为C 。
5.若一棵有n 个结点的树,其中所有分支结点的度均为k,该树中的叶子结点个数 是_____________。
A.n(k 一1)/kB.n-kC.(n+1)/kD.(nk 一n+1)/k答:m=k,有k n n n +=0,度之和=n-1=k kn ,k n n k /)1(-=,所以0n =n-k n =n-(n-1)/k=(nk-n+1)/k.本题的答案为D 。
数据结构参考答案
简答一.1、已知模式串pat=’ADABBADADA’,写出该模式串的next函数值和nextval值;2、模式匹配算法是在主串中快速寻找模式的一种有效的方法,如果设主串的长度为m,模式的长度为n,则在主串中寻找模式的KMP算法的时间复杂性是多少?如果,某一模式 P=’abcaacabaca’,请给出它的NEXT函数值及NEXT函数的修正值NEXTVAL之值。
3、已知模式串pat=“abaabc”,写出该模式串的next函数值和nextval值;4、给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。
二、(意思对即可,不一定是这种写法)1、数据结构按照逻辑结构分为哪四种结构,说出元素之间的关系?集合:无关系线性结构:一对一树形结构:一对多图形结构:多对多2、图形结构有几种存储结构?分别是什么存储结构?4种。
邻接矩阵,邻接表,十字链表,邻接多重表3、度数为2的树和二叉树有何区别?(1)度为2的树中至少有一个结点的度为2,而二叉树中没有这种要求。
(2)度为2的树不区分左右子树,而二叉树严格区分左右子树。
4、简述栈和队列的特点。
栈:是一种只能在一端进行插入或删除操作的线性表。
“后进先出”队列:是一种仅允许在表的一端进行插入操作,而在表的另一端进行删除操作的受限的线性表“先进先出”三(只是最终的结果,有的题可能需要中间步骤,自己完善一下)1、已知某有向图的顶点集合为{A,B,C,D,E,F},边集合为{〈A,B〉,〈A,C〉,〈A,E〉,〈C,F〉,〈E,D〉},画出该图的邻接表,以它为基写出深度优先、广度优先遍历序列(深度、广度遍历要求从结点A开始)。
深度:A B C F E D广度:A B C E F D2、设无向图G(如右图所示),给出该图的最小生成树上边的集合并计算最小生成树各边上的权值之和。
3、对下图所示的无向图,从顶点1开始,写出该图的深度优先遍历和广度优先遍历。
《数据结构及其应用》笔记含答案 第五章_树和二叉树
第5章树和二叉树一、填空题1、指向结点前驱和后继的指针称为线索。
二、判断题1、二叉树是树的特殊形式。
()2、完全二叉树中,若一个结点没有左孩子,则它必是叶子。
()3、对于有N个结点的二叉树,其高度为。
()4、满二叉树一定是完全二叉树,反之未必。
()5、完全二叉树可采用顺序存储结构实现存储,非完全二叉树则不能。
()6、若一个结点是某二叉树子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
()7、不使用递归也可实现二叉树的先序、中序和后序遍历。
()8、先序遍历二叉树的序列中,任何结点的子树的所有结点不一定跟在该结点之后。
()9、赫夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
()110、在赫夫曼编码中,出现频率相同的字符编码长度也一定相同。
()三、单项选择题1、把一棵树转换为二叉树后,这棵二叉树的形态是(A)。
A.唯一的B.有多种C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子解释:因为二叉树有左孩子、右孩子之分,故一棵树转换为二叉树后,这棵二叉树的形态是唯一的。
2、由3个结点可以构造出多少种不同的二叉树?(D)A.2 B.3 C.4 D.5解释:五种情况如下:3、一棵完全二叉树上有1001个结点,其中叶子结点的个数是(D)。
A.250 B. 500 C.254 D.501解释:设度为0结点(叶子结点)个数为A,度为1的结点个数为B,度为2的结点个数为C,有A=C+1,A+B+C=1001,可得2C+B=1000,由完全二叉树的性质可得B=0或1,又因为C为整数,所以B=0,C=500,A=501,即有501个叶子结点。
4、一个具有1025个结点的二叉树的高h为(C)。
A.11 B.10 C.11至1025之间 D.10至1024之间解释:若每层仅有一个结点,则树高h为1025;且其最小树高为⎣log21025⎦ + 1=11,即h在11至1025之间。
计算机408统考真题
计算机专业基础综合考试模拟试卷(一)一、单项选择题:第1~40小题,每小题2分,共80分。
下列每题给出的四个选项中,只有一个选项最符合试题要求。
1.已知一个栈的进栈序列是1、2、3、…、n,其输出序列为p1、p2、p3、…、p n,若p1=3,则p2为()。
A.2或4、5、…、n都有可能B.可能是1C.一定是2 D.只可能是2或4 2.利用栈求表达式的值时,设立运算数栈OPEN。
假设OPEN只有两个存储单元,则在下列表达式中,不会发生溢出的是()。
A.A−B*(C−D) B.(A−B)*C−D C.(A−B*C)−DD.(A−B)*(C−D)3.已知A[1…N]是一棵顺序存储的完全二叉树,9号结点和11号结点共同的祖先是()。
A.4 B.6 C.2D.84.在常用的描述二叉排序树的存储结构中,关键字值最大的结点是()。
A.左指针一定为空B.右指针一定为空C.左、右指针均为空D.左、右指针均不为空5.分别以下列序列构造二叉排序树,与用其他三个序列所构造的结果不同的是()。
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)6.设无向图G=(V,E)和G′=(V′,E′),如果G′是G的生成树,则下面说法错误的是()。
A.G′是G的子图B.G′是G的连通分量C.G′是G的极小连通子图且V=V′D.G′是G的一个无环子图7.若G是一个具有36条边的非连通无向简单图,则图G的结点数至少是()。
A.11 B.10 C.9D.88.在有向图G的拓扑序列中,若顶点V i在顶点V j之前,则下列情形不可能出现的是()。
A.G中有弧<V i,V j> B.G中有一条从V i到V j的路径C.G中没有弧< V i,V j> D.G中有一条从V j到V i的路径9.具有12个关键字的有序表中,对每个关键字的查找概率相同,折半查找查找成功和查找失败的平均查找长度依次为()。
数据结构期末考试试题(含答案)
数据结构期末考试试题(含答案)2005年-2006学年第⼆学期“数据结构”考试试题(A)姓名学号(序号)_答案隐藏班号要求:所有的题⽬的解答均写在答题纸上(每张答题纸上要写清楚姓名、班号和学号),需写清楚题⽬的序号。
每张答题纸都要写上姓名和序号。
⼀、单项选择题(每⼩题2分,共20分)1.数据的运算a 。
A.效率与采⽤何种存储结构有关B.是根据存储结构来定义的C.有算术运算和关系运算两⼤类D.必须⽤程序设计语⾔来描述答:A。
2.链表不具备的特点是 a 。
A.可随机访问任⼀结点B.插⼊删除不需要移动元素C.不必事先估计存储空间D.所需空间与其长度成正⽐答:参见本节要点3。
本题答案为:A。
3.在顺序表中删除⼀个元素的时间复杂度为 c 。
A.O(1)B.O(log2n)C.O(n)D.O(n2)答:C。
4.以下线性表的存储结构中具有随机存取功能的是d 。
A.不带头结点的单链表B.带头结点的单链表C.循环双链表D.顺序表解D。
5.⼀个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是c 。
A.edcba B.decbaC.dceabD.abcde答:C。
6.循环队列qu的队空条件是 d 。
A. (qu.rear+1)%MaxSize==(qu.front+1)%MaxSizeB. (qu.rear+1)%MaxSize==qu.front+1C.(qu.rear+1)%MaxSize==qu.frontD.qu.rear==qu.front答:D。
7.两个串相等必有串长度相等且 b 。
A.串的各位置字符任意B.串中各位置字符均对应相等C.两个串含有相同的字符D.两个所含字符任意答:B。
8.⽤直接插⼊排序对下⾯四个序列进⾏递增排序,元素⽐较次数最少的是c 。
A.94,32,40,90,80,46,21,69B.32,40,21,46,69,94,90,80C.21,32,46,40,80,69,90,94D.90,69,80,46,21,32,94,40答:C。
数据结构教程李春葆课后答案第7章树和二叉树
教材中练习题及参考答案
1. 有一棵树的括号表示为 A(B,C(E,F(G)),D),回答下面的问题: (1)指出树的根结点。 (2)指出棵树的所有叶子结点。 (3)结点 C 的度是多少? (4)这棵树的度为多少? (5)这棵树的高度是多少? (6)结点 C 的孩子结点是哪些? (7)结点 C 的双亲结点是谁? 答:该树对应的树形表示如图 7.2 所示。 (1)这棵树的根结点是 A。 (2)这棵树的叶子结点是 B、E、G、D。 (3)结点 C 的度是 2。 (4)这棵树的度为 3。 (5)这棵树的高度是 4。 (6)结点 C 的孩子结点是 E、F。 (7)结点 C 的双亲结点是 A。
12. 假设二叉树中每个结点值为单个字符,采用二叉链存储结构存储。设计一个算法 计算一棵给定二叉树 b 中的所有单分支结点个数。 解:计算一棵二叉树的所有单分支结点个数的递归模型 f(b)如下:
f(b)=0 若 b=NULL
6 f(b)=f(b->lchild)+f(b->rchild)+1 f(b)=f(b->lchild)+f(b->rchild)
表7.1 二叉树bt的一种存储结构 1 lchild data rchild 0 j 0 2 0 h 0 3 2 f 0 4 3 d 9 5 7 b 4 6 5 a 0 7 8 c 0 8 0 e 0 9 10 g 0 10 1 i 0
答:(1)二叉树bt的树形表示如图7.3所示。
a b c e h j f i d g e h j c f i b d g a
对应的算法如下:
void FindMinNode(BTNode *b,char &min) { if (b->data<min) min=b->data; FindMinNode(b->lchild,min); //在左子树中找最小结点值 FindMinNode(b->rchild,min); //在右子树中找最小结点值 } void MinNode(BTNode *b) //输出最小结点值 { if (b!=NULL) { char min=b->data; FindMinNode(b,min); printf("Min=%c\n",min); } }
数据结构算法设计题
一、算法设计题1. 设二叉树bt采用二叉链表结构存储。
试设计一个算法输出二叉树中所有非叶子结点,并求出非叶子结点的个数。
【答案】int count=0;void algo2(BTNode *bt){if (bt){if(bt->lchild || bt->rchild){printf(bt->data);count++;}algo2(bt->lchild);algo2(bt->rchild);}}2. 阅读下列函数arrange()int arrange(int a[],int 1,int h,int x){//1和h分别为数据区的下界和上界int i,j,t;i=1;j=h;while(i<j){while(i<j && a[j]>=x)j--;while(i<j && a[j]>=x)i++;if(i<j){ t=a[j];a[j]=a[i];a[i]=t;}}if(a[i]<x) return i;else return i-1;}(1)写出该函数的功能;(2)写一个调用上述函数实现下列功能的算法:对一整型数组b[n]中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个数。
【答案】(1)该函数的功能是:调整整数数组a[]中的元素并返回分界值i,使所有<x的元素均落在a[1..i]上,使所有≥x的元素均落在a[i+1..h]上。
(2)int f(int b[],int n) 或 int f(int b[],int n){ {int p,q; int p,q;p=arrange(b,0,n-1,0); p=arrange(b,0,n-1,1);q= arrange(b,p+1,n-1,1); q= arrange(b,0,p,0);return q-p; return p-q;} }3. 假设线性表以带表头结点的循环单链表表示。
2014-2015学年第2学期算法与数据结构(AB)试题与标准答案
2014-2015学年第2学期考试试题(A)卷课程名称算法与数据结构任课教师签名出题教师签名审题教师签名考试方式(闭)卷适用专业信息与计算机考试时间(120)分钟一、单项选择题(每小题4分,共20分)1、算法的时间复杂度与()有关。
(A) 问题规模(B) 计算机硬件性能(C) 编译程序质量(D) 程序设计语言2、线性表的链式存储结构与顺序存储结构相比的优点是()。
(A) 所有的操作算法实现简单(B) 便于随机存取(C) 便于插入和删除操作的实现(D) 便于利用零散的存储器空间3、设10个元素进栈序列是1,2,…,10,其输出序列是a1,a2,…,a10,如果a1=3,则a2的值为()。
(A) 一定是2 (B) 一定是1(C) 不可能是4 (D) 不可能是14、设高度为h的二叉树上只有度为0和度为2的结点(假设仅含根结点的二叉树的高度为1),则此二叉树所包含的结点数至多有()。
(A) 2h-1 (B) 2h - 1(C) 2h+1 (D) 2h + 15、设有13个值,用它们组成一棵哈夫曼树,则该哈夫曼树共有()个结点。
(A) 13 (B) 12(C) 26 (D) 25二、填空题(每小题2分,共10分)1、把一个递归过程转换成一个等价的非递归过程,通常使用()。
2、数据的逻辑结构是从逻辑上描述数据,它与数据的()无关,是独立于计算机的。
3、在单链表中,结点与结点之间的逻辑关系不是通过存储单元的顺序来表示的,而是通过()来实现的。
4、实现动态分配和动态回收一个结点空间的两个标准过程是()和()。
三、名词解释(每小题5分,共10分)1、线性表2、哈希函数四、简答题(每小题5分,共10分)1、简述顺序表和链表的优缺点。
2、举例说明直接选择排序方法是一种不稳定的排序方法。
五、应用题(每小题6分,共30分)1、关键字序列{12,7,18,13,17,29,34,6,8}是否为堆?若不是,请将其调整为最小堆,并统计建堆过程中的交换次数。
福师20年秋数据结构概论在线作业二【标准答案】
福师《数据结构概论》在线作业二-0002试卷总分:100得分:100一、单选题(共25道试题,共50分)1.设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为 n,森林F中第一棵树的结点个数是()A.m-nB.m-n-1C.n+1D.条件不足,无法确定答案:A2.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。
A.前序B.中序C.后序D.按层次答案:C3.一个算法应该是()。
A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A 和 C.答案:B4.栈和队列的共同点是()。
A.都是先进先出8.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点E.限制存取点的线性结构F.限制存取点的非线性结构答案:C5.下面的程序段中,对x的赋值语句的频度为()FOR i:=1 TO n DOFOR j:=1 TO n DO x:=x+1;A.O(2n)B.O(n)C.O(n"2)D.O(log2n)答案:C6.算法的计算量的大小称为计算的()A.效率B.复杂性C.现实性D.难度答案:B7.对于栈操作数据的原则是()A.先进先出8.后进先出C.后进后出D.不分顺序答案:B8.下列表达式中结果不是日期型的是?A.CT0D("2000/10/01")B.「99/10/01}+365C.VAL("2000/10/01")D.DATE()答案:C9.关键路径是事件结点网络中()A.从源点到汇点的最长路径B.从源点到汇点的最短路径C.最长回路D.最短回路答案:A10.就平均性能而言,目前最好的内排序方法是()排序法。
A.冒泡B.希尔插入C.交换D.快速答案:D11.栈和队都是()A.顺序存储的B.线性结构C.链式存储的D.非线性结构答案:B12.关系数据库中,实现实体之间的联系是通过表与表之间的?A.公共索引B.公共存储C.公共元组D.公共属性答案:D13.下列关于候选键的说法中错误的是?A.键是惟一标识实体的属性集B.候选键能惟一决定一个元组C.能惟一决定一个元组的属性集是候选键D.候选键中的属性均为主属性答案:C14.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()A.808B.818C.1010D.1020答案:B15.链表不具有的特点是()儿插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比答案:B16.若要求尽可能快地对序列进行稳定的排序,则应选(A.快速排序B.归并排序C.冒泡排序D.堆答案:B17.下面关于关系数据模型的说法,正确的是哪一项?A.只能表示实体间的1:1联系B.只能表示实体间的l:n联系C.只能表示实体间的m:n联系D.可以表示实体间的上述三种联系答案:D18.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为()(1<=i<=n+1)。
沈阳农业大学信息与电气工程学院805计算机专业基础历年考研真题汇编附答案 (1)
沈阳师范大学教育技术学院862计算机学科专业基础综合(数据结构、操作系统)历年考研真题汇编附答案最新资料,WORD格式,可编辑修改!目录说明:沈阳师范大学2012年之前参加全国统考408计算机学科专业基础综合,2013年开始自主命题,科目改为867计算机学科专业基础综合(数据结构、操作系统),2015年科目代码改为862。
为帮助考生全面复习,特提供2009~2012年408计算机学科专业基础综合真题及详解。
第一部分沈阳师范大学教育技术学院862计算机学科专业基础综合(数据结构、操作系统)历年考研真题汇编2014年沈阳师范大学教育技术学院867计算机学科专业基础综合(数据结构、操作系统)考研真题科目代码:867科目名称:计算机学科专业基础综合(数据结构、操作系统)适用专业名称:计算机应用技术考生注意:请将答案写在答题纸上,写在本题签及草纸上无效。
考试后本题签同答题纸一并交回。
一、单项选择题(共10题,每题2分,合计20分)1.某算法的时间复杂度为O(n2),表明该算法()。
A.问题规模是n2B.执行时间等于n2C.执行时间与n2成正比D.问题规模与n2成正比2设线性表有n个元素,以下操作中,()在顺序表上实现比在链表上实现效率更高。
A.输出第i(1≤i≤n)个元素B.交换第1个元素与第2个元素的值C.顺序输出这n个元素的值D.输出与给定值x相等的元素在线性表中的序号3.给定一个空栈,若10、20、23、13依次进栈,然后有两个数出栈,又有3个数进栈,第一次进栈的23现在在()。
A.已出栈B.从栈底算起第3个C.栈顶D.从栈底算起第4个4.循环队列qu(其队头指针front指向队列中队头元素的前一个位置,队尾指针rear指向队尾元素的位置,队列中的单元个数为MaxSize)的队满足条件是()。
A.(+1)%MaxSize==+1)%MaxSizeB.+1)%MaxSize==+1C.+1)%MaxSize==D.==5.一棵二叉树的中序序列为ABDCEFG,后序序列为BDCAFGE,则其左子树中的节点个数为()。
考研计算机学科专业基础综合-30_真题-无答案
考研计算机学科专业基础综合-30(总分146,考试时间90分钟)一、单项选择题在每小题给出的四个选项中,请选出一项最符合题目要求的。
1. 若某线性表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则下面最合适的存储方式是______。
A.单链表 B.循环双链表C.单循环链表 D.带有尾指针的单循环链表2. 表长为n的顺序存储的线性表,当在任何位置上删除一个元素的概率相等时,删除一个元素所需移动元素的平均个数为______。
A.n B.n/2 C.(n-1)/2 D.(n+1)/23. 在下面的应用中,通常使用栈的是______。
Ⅰ递归调用Ⅱ括号匹配Ⅲ表达式求值A.Ⅰ、Ⅱ B.Ⅱ、Ⅲ C.Ⅰ、Ⅲ D.Ⅰ、Ⅱ、Ⅲ4. 用链表方式存储的队列,在进行删除运算时,下面正确的是______。
A.仅修改头指针 B.仅修改尾指针C.头、尾指针都要修改 D.头、尾指针可能都要修改5. 在含有15个结点的平衡二叉树上,查找关键字为28(存在该结点)的结点,则依次比较的关键字有可能是______。
A.30,36 B.38,48,28C.48,18,38,28 D.60,30,50,40,38,366. 设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,则T中的叶子数是______。
A.5 B.6 C.7 D.87. 简单无向图的邻接矩阵是对称的,可以对其进行压缩存储。
若无向图G有n个结点,其邻接矩阵为A[1..n,1..n],且压缩存储在B[1..n(n-1)/2]。
若按行压缩存储对称矩阵的上三角元素,则当n等于10时,边(v6,v3)的信息存储在______。
A.B[18] B.B[19] C.B[20] D.B[21]8. 以下关于图的说法正确的是______。
Ⅰ在一个有向图的拓扑序列中,若顶点a在顶点b之前,则图中必有一条弧<a,b>Ⅱ若一个有向图的邻接矩阵中对角线以下元素均为0,则该图的拓扑序列必定存在Ⅲ在AOE网中一定只有一条关键路径A.Ⅰ、Ⅱ B.Ⅱ、Ⅲ C.Ⅰ、Ⅲ D.仅有Ⅱ9. 设无向图G=(V,E)和G'=(V',E'),如果G'是G的生成树,则下面说法中错误的是______。
完整word版暨南大学计算机830数据结构2018年真题
考试科目: 数据结构 共5页,第1 页2018年全国硕士研究生统一入学考试自命题试题( A 卷)********************************************************************************************学科、专业名称:计算机科学与技术、软件工程研究方向:计算机系统结构 081201,计算机软件与理论 081202,计算机应用技术 081203, 软件工程083500,计算机技术(专业学位)085211 考试科目名称及代码:数据结构830考生注意:所有答案必须写在答题纸(卷)上,写在本试题上一律不给分。
单项选择题(每题2分,共30分)7. 在一棵非空m 阶的B-树上,除根之外的所有非终端结点A.至少有I m/2驛子树 B.至多有 尿/2」棵子树C.至少有m/21棵子树D.至多有(m/2[棵子树8. 若用单链表来表示队列,最适合队列操作的是(A.带尾指针的非循环队列B.带尾指针的循环链表C.带头指针的非循环链表D.带头指针的循环链表9. 下面的序列中,()是堆。
A. 12, 36, 27, 65, 40, 34, 98, 81,73, 55, 49B. 12, 36, 27, 65, 40, 14, 98, 81,73, 55, 49C. 12, 36, 27, 20, 40, 34, 98, 81,73, 55, 49D. 12, 36, 35, 65, 40, 34, 98, 81,73, 55, 49 10. 设有一个10阶的对称矩阵A,采用压缩存储方式,元素,其首存储地址为1,每个元素占1个地址空间,则a 85的地址为(J1NAN UNIVERSITY1.任何一棵二叉树 T,如果度为1的结点数为2,度为0结点数为11,其分支数为(A. 23B. 22 2. 深度为k 的二叉树至多有( A. 2kB. 2k "13. 已知一棵二叉树结点的中序序列为列为(C. 24个结点(k>=1);kC. 2 +1D. 21D.2k -1后序序列为DECBHGFA,则结点的先序序A. ABCDEFGHB. DGBFHCA4. 在有向图的逆邻接表存储结构中,顶点A.顶点V 的度 C.顶点V 的入度5. 顺序栈s 的GetTop (s, e )操作是用e 返回 A. e=*(s.to p ) B. e=*(s.to p-1)6. 若线性表最常用的操作是存取第A.单链表B.双链表C. v 在表结点中出现的次数是( B. 顶点V 的出度D.依附于顶点V 的边数 s 的栈顶元素,则下列(C. e=*(--s.t op )DECBGFAHD. CAFHGDB)。
练习题6
while (front!=rear)//队不空循环
{front++;
p=qu[front].s;//出队一个结点*p,它在qu中的下标为front
if (p->data==x)//找到值为x的结点
{printf("从根结点到%c结点的路径: ",p->data);
解:先序遍历树中结点的递归算法如下:
void PreOrder1(ElemType A[],int i,int n)
{if (i<n)
if (A[i]!='#')//不为空结点时
{printf("%c ",A[i]);//访问根结点
PreOrder1(A,2*i,n);//遍历左子树
PreOrder1(A,2*i+1,n);//遍历右子树
return h;
else
{l=Level(bt->lchild,x,h+1);//在左子树中查找
if (l!=0)
return l;
else//在左子树中未找到,再在右子树中查找
return(Level(bt->rchild,x,h+1));
}
}
上机实验题
假设一棵二叉树采用二叉链存储结构,其中所有结点值均不相同。设计一个算法求从根结点到值为x的结点的路径。并用相关数据进行测试。
图8.3一棵二叉树
(6)如果一棵哈夫曼树T有n0个叶子结点,那么,树T有多少个结点?要求给出求解过程。
答:一棵哈夫曼树中只有度为2和0的结点,没有度为1的结点,由非空二叉树的性质1可知,n0=n2+1,即n2=n0-1,则总结点数n=n0+n2=2n0-1。
数据结构二叉树习题含答案
2.1 创建一颗二叉树创建一颗二叉树,可以创建先序二叉树,中序二叉树,后序二叉树。
我们在创建的时候为了方便,不妨用‘#’表示空节点,这时如果先序序列是:6 4 2 3 # # # # 5 1 # # 7 # #,那么创建的二叉树如下:下面是创建二叉树的完整代码:穿件一颗二叉树,返回二叉树的根2.2 二叉树的遍历二叉树的遍历分为:先序遍历,中序遍历和后序遍历,这三种遍历的写法是很相似的,利用递归程序完成也是灰常简单的:2.3 层次遍历层次遍历也是二叉树遍历的一种方式,二叉树的层次遍历更像是一种广度优先搜索(BFS)。
因此二叉树的层次遍历利用队列来完成是最好不过啦,当然不是说利用别的数据结构不能完成。
2.4 求二叉树中叶子节点的个数树中的叶子节点的个数= 左子树中叶子节点的个数+ 右子树中叶子节点的个数。
利用递归代码也是相当的简单,2.5 求二叉树的高度求二叉树的高度也是非常简单,不用多说:树的高度= max(左子树的高度,右子树的高度) + 12.6 交换二叉树的左右儿子交换二叉树的左右儿子,可以先交换根节点的左右儿子节点,然后递归以左右儿子节点为根节点继续进行交换。
树中的操作有先天的递归性。
2.7 判断一个节点是否在一颗子树中可以和当前根节点相等,也可以在左子树或者右子树中。
2.8 求两个节点的最近公共祖先求两个节点的公共祖先可以用到上面的:判断一个节点是否在一颗子树中。
(1)如果两个节点同时在根节点的右子树中,则最近公共祖先一定在根节点的右子树中。
(2)如果两个节点同时在根节点的左子树中,则最近公共祖先一定在根节点的左子树中。
(3)如果两个节点一个在根节点的右子树中,一个在根节点的左子树中,则最近公共祖先一定是根节点。
当然,要注意的是:可能一个节点pNode1在以另一个节点pNode2为根的子树中,这时pNode2就是这两个节点的最近公共祖先了。
显然这也是一个递归的过程啦:可以看到这种做法,进行了大量的重复搜素,其实有另外一种做法,那就是存储找到这两个节点的过程中经过的所有节点到两个容器中,然后遍历这两个容器,第一个不同的节点的父节点就是我们要找的节点啦。
数据结构教程 李春葆 七章习题答案
//在下标为i的前面的数组中寻找两个权值最小的节点,作为孩子节点
for(j = 0; j<i; j++)
{
if(-1==ht[j].parent)
{
if(min1>ht[j].weight)
{
min2 = min1; //至于为什么有这句和下面的一句,,大家依次将权值假设为2 1 3带入里面自己手工模仿运行
设计;狼影
时间:2012.10.5
***************************************/
/******************************************************
若发现错误请 留言本空间,万分感谢!!
/*******************/
-------------------------------------------------------------
权值: 2 3 4 7 8 9 5 9 15 18 33
-------------------------------------------------------------
}
/*************************************************************
输入叶子节点的个数
6
输入6个叶子的权值
2 3 4 7 8 9
哈夫曼树顺序存储如下
-------------------------------------------------------------
{
int i;
printf("\n-------------------------------------------------------------\n");
考研计算机学科专业基础综合-48_真题-无答案
考研计算机学科专业基础综合-48(总分151,考试时间90分钟)一、单项选择题1. 已知一个栈的进栈序列是1、2、3、…、n,其输出序列为p1、p2、p3、…、pn,若p1=3,则p2为______。
A. 2或4、5、…、n都有可能B. 可能是1C. 一定是2D. 只可能是2或42. 利用栈求表达式的值时,设立运算数栈OPEN。
假设OPEN只有两个存储单元,则在下列表达式中,不会发生溢出的是______。
A. A-B*(C-D)B. (A-B)*C-DC. (A-B*C)-DD. (A-B)*(C-D)3. 已知A[1...N]是一棵顺序存储的完全二叉树,9号结点和11号结点共同的祖先是______。
A. 4B. 6C. 2D. 84. 在常用的描述二叉排序树的存储结构中,关键字值最大的结点是______。
A. 左指针一定为空B. 右指针一定为空C. 左、右指针均为空D. 左、右指针均不为空5. 分别以下列序列构造二叉排序树,与用其他三个序列所构造的结果不同的是______。
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)6. 设无向图G=(V,E)和G"=(V",E"),如果G"是G的生成树,则下面说法错误的是______。
A. G"是G的子图B. G"是G的连通分量C. G"是G的极小连通子图且V=V",D. G"是G的一个无环子图7. 若G是一个具有36条边的非连通无向简单图,则图G的结点数至少是______。
A. 11B. 10C. 9D. 88. 在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是______。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
假设二叉树采用二叉链存储结构存储,分别实现以下算法,并在程序中完成测试:(1)计算二叉树节点个数;(2)输出所有叶子节点;(3)求二叉树b的叶子节点个数;(4)求二叉树b的宽度#include<>#include<>#define MaxSize 100typedef char ElemType;typedef struct node{ElemType data; //数据元素struct node *lchild; //指向左孩子struct node *rchild; //指向右孩子} BTNode;void CreateBTNode(BTNode *&b,char *str); //由str串创建二叉链BTNode *FindNode(BTNode *b,ElemType x); //返回data域为x的节点指针BTNode *LchildNode(BTNode *p); //返回*p节点的左孩子节点指针BTNode *RchildNode(BTNode *p); //返回*p节点的右孩子节点指针int BTNodeDepth(BTNode *b); //求二叉树b的深度void DispBTNode(BTNode *b); //以括号表示法输出二叉树void DestroyBTNode(BTNode *&b); //销毁二叉树void LevelOrder(BTNode *b){BTNode *p;BTNode *qu[MaxSize]; //定义环形队列,存放节点指针int front,rear; //定义队头和队尾指针front=rear=-1; //置队列为空队列rear++;qu[rear]=b; //根节点指针进入队列while (front!=rear) //队列不为空{front=(front+1)%MaxSize;p=qu[front]; //队头出队列printf("%c ",p->data); //访问节点if (p->lchild!=NULL) //有左孩子时将其进队{rear=(rear+1)%MaxSize;qu[rear]=p->lchild;}if (p->rchild!=NULL) //有右孩子时将其进队{rear=(rear+1)%MaxSize;qu[rear]=p->rchild;}}}void CreateBTNode(BTNode *&b,char *str) //由str串创建二叉链{BTNode *St[MaxSize],*p=NULL;int top=-1,k,j=0;char ch;b=NULL; //建立的二叉树初始时为空ch=str[j];while (ch!='\0') //str未扫描完时循环{switch(ch){case'(':top++;St[top]=p;k=1;break; //为左节点case')':top--;break;case',':k=2;break; //为右节点default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if (b==NULL) //p指向二叉树的根节点b=p;else//已建立二叉树根节点 {switch(k){case 1:St[top]->lchild=p;break;case 2:St[top]->rchild=p;break;}}}j++;ch=str[j];}}BTNode *FindNode(BTNode *b,ElemType x) //返回data域为x的节点指针{BTNode *p;if (b==NULL)return NULL;else if (b->data==x)return b;else{p=FindNode(b->lchild,x);if (p!=NULL)return p;elsereturn FindNode(b->rchild,x);}}BTNode *LchildNode(BTNode *p) //返回*p节点的左孩子节点指针{return p->lchild;}BTNode *RchildNode(BTNode *p) //返回*p节点的右孩子节点指针{return p->rchild;}int BTNodeDepth(BTNode *b) //求二叉树b的深度{int lchilddep,rchilddep;if (b==NULL)return(0); //空树的高度为0 else{lchilddep=BTNodeDepth(b->lchild); //求左子树的高度为lchilddep rchilddep=BTNodeDepth(b->rchild); //求右子树的高度为rchilddepreturn (lchilddep>rchilddep)? (lchilddep+1):(rchilddep+1); }}void DispBTNode(BTNode *b) //以括号表示法输出二叉树{if (b!=NULL){printf("%c",b->data);if (b->lchild!=NULL || b->rchild!=NULL){printf("(");DispBTNode(b->lchild);if (b->rchild!=NULL) printf(",");DispBTNode(b->rchild);printf(")");}}}void DestroyBTNode(BTNode *&b) //销毁二叉树{if (b!=NULL){DestroyBTNode(b->lchild);DestroyBTNode(b->rchild);free(b);}}void PreOrder1(BTNode *b){BTNode *St[MaxSize],*p;int top=-1;if (b!=NULL){top++; //根节点入栈St[top]=b;while (top>-1) //栈不为空时循环{p=St[top]; //退栈并访问该节点top--;printf("%c ",p->data);if (p->rchild!=NULL) //右孩子入栈{top++;St[top]=p->rchild;}if (p->lchild!=NULL) //左孩子入栈{top++;St[top]=p->lchild;}}printf("\n");}}void InOrder1(BTNode *b){BTNode *St[MaxSize],*p;int top=-1;if (b!=NULL){p=b;while (top>-1 || p!=NULL){while (p!=NULL){top++;St[top]=p;p=p->lchild;}if (top>-1){p=St[top];top--;printf("%c ",p->data);p=p->rchild;}}printf("\n");}}void PostOrder1(BTNode *b){BTNode *St[MaxSize];BTNode *p;int flag,top=-1; //栈指针置初值if (b!=NULL){do{while (b!=NULL) //将t的所有左节点入栈{top++;St[top]=b;b=b->lchild;}p=NULL; //p指向当前节点的前一个已访问的节点 flag=1;while (top!=-1 && flag){b=St[top]; //取出当前的栈顶元素if (b->rchild==p) //右子树不存在或已被访问,访问之{printf("%c ",b->data); //访问*b节点top--;p=b; //p指向则被访问的节点}else{b=b->rchild; //t指向右子树flag=0;}}}while (top!=-1);printf("\n");}}int main(){BTNode *b;CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");printf("二叉树b: ");DispBTNode(b);printf("\n");printf("先序遍历序列:\n");PreOrder1(b);printf("中序遍历序列:\n");InOrder1(b);printf("后序遍历序列:\n"); PostOrder1(b);DestroyBTNode(b);getchar();}。