简述二叉链表的类型定义
数据结构(二十四)二叉树的链式存储结构(二叉链表)
数据结构(⼆⼗四)⼆叉树的链式存储结构(⼆叉链表) ⼀、⼆叉树每个结点最多有两个孩⼦,所以为它设计⼀个数据域和两个指针域,称这样的链表叫做⼆叉链表。
⼆、结点结构包括:lchild左孩⼦指针域、data数据域和rchild右孩⼦指针域。
三、⼆叉链表的C语⾔代码实现:#include "string.h"#include "stdio.h"#include "stdlib.h"#include "io.h"#include "math.h"#include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 *//* ⽤于构造⼆叉树********************************** */int index=1;typedef char String[24]; /* 0号单元存放串的长度 */String str;Status StrAssign(String T,char *chars){int i;if(strlen(chars)>MAXSIZE)return ERROR;else{T[0]=strlen(chars);for(i=1;i<=T[0];i++)T[i]=*(chars+i-1);return OK;}}/* ************************************************ */typedef char TElemType;TElemType Nil=''; /* 字符型以空格符为空 */Status visit(TElemType e){printf("%c ",e);return OK;}typedef struct BiTNode /* 结点结构 */{TElemType data; /* 结点数据 */struct BiTNode *lchild,*rchild; /* 左右孩⼦指针 */}BiTNode,*BiTree;/* 构造空⼆叉树T */Status InitBiTree(BiTree *T){*T=NULL;return OK;}/* 初始条件: ⼆叉树T存在。
最新1月自学考试数据结构试题及答案解析
2018年1月自学考试数据结构试题课程代码:02331一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.下列程序段的时间复杂度为( )s=0;for(i=1;i<n;i++)for(j=1;j<n;j++)s+=i*j;A.O(1)B.O(n)C.O(2n)D.O(n2)2.假设某个带头结点的单链表的头指针为head,则判定该表为空表的条件是( )A.head==NULL;B.head->next==NULL;C.head!=NULL;D.head->next==head;3.栈是一种操作受限的线性结构,其操作的主要特征是( )A.先进先出B.后进先出C.进优于出D.出优于进4.假设以数组A[n]存放循环队列的元素,其头、尾指针分别为front和rear。
若设定尾指针指向队列中的队尾元素,头指针指向队列中队头元素的前一个位置,则当前存于队列中的元素个数为( ) A.(rear-front-1)%n B.(rear-front)%nC.(front-rear+1)%nD.(rear-front+n)%n5.判断两个串大小的基本准则是( )A.两个串长度的大小B.两个串中首字符的大小C.两个串中大写字母的多少D.对应的第一个不等字符的大小6.二维数组A[4][5]按行优先顺序存储,若每个元素占2个存储单元,且第一个元素A[0][0]的存储地1址为1000,则数组元素A[3][2]的存储地址为( )A.1012B.1017C.1034D.10367.高度为5的完全二叉树中含有的结点数至少为( )A.16B.17C.31D.328.已知在一棵度为3的树中,度为2的结点数为4,度为3的结点数为3,则该树中的叶子结点数为( )A.5B.8C.11D.18)9.下列所示各图中是中序线索化二叉树的是(A.(v0,v1,v2,v5,v4,v3)B.(v0,v1,v2,v3,v4,v5)C.(v0,v1,v5,v2,v3,v4)D.(v0,v1,v4,v5,v2,v3)11.如图所示有向图的一个拓扑序列是( )A.ABCDEFB.FCBEADC.FEDCBAD.DAEBCF12.下列关键字序列中,构成大根堆的是( )23A.5,8,1,3,9,6,2,7B.9,8,1,7,5,6,2,33C.9,8,6,3,5,l ,2,7D.9,8,6,7,5,1,2,313.对长度为15的有序顺序表进行二分查找,在各记录的查找概率均相等的情况下,查找成功时所需进行的关键字比较次数的平均值为( ) A.1539B.1549C.1551D.155514.已知一个散列表如图所示,其散列函数为H(key)=key %11,采用二次探查法处理冲突,则下一个插入的关键字49的地址为( )15.数据库文件是由大量带有结构的( )A.记录组成的集合B.字符组成的集合C.数据项组成的集合D.数据结构组成的集合二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。
树据结构 第5章答案(已核 )
第5章习题答案一、选择1.以下说法错误的是 ( )A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构2,以下说法错误的是 ( BC )A.二叉树可以是空集B.二叉树的任一结点都有两棵子树(是“最多有”两棵子树)C.二叉树与树具有相同的树形结构(二叉树的孩子必有左右之分,只有一个孩子时也要分出左右,而树即使是有序树, 只有一个孩子时部分左右)D.二叉树中任一结点的两棵子树有次序之分3、以下说法错误的是( )A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达B.在三叉链表上,二叉树的求双亲运算很容易实现C.在二叉链表上,求根,求左、右孩子等很容易实现D.在二叉链表上,求双亲运算的时间性能很好4、以下说法错误的是 ( )A.一般在哈夫曼树中,权值越大的叶子离根结点越近B.哈夫曼树中没有度数为1的分支结点C.若初始森林中共有n裸二叉树,最终求得的哈夫曼树共有2n-1个结点D.若初始森林中共有n裸二叉树,进行2n-1次合并后才能剩下一棵最终的哈夫树5.深度为6的二叉树最多有( )个结点 ( )A.64B.63C.32D.316.将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号为41的双结点编号为 ( )A.42B.40C.21D.207.设二叉树有n个结点,则其深度为( )A.n-1B.nC.5floor(log2n)D.无法确定注:完全二叉树才能确定其深度。
8.设深度为k的二叉树上只有度为0 和度为2 的节点,则这类二叉树上所含结点总数最少()个A.k+1B.2kC.2k-1D.2k+1注:单支数含结点个数最少,但题目规定该二叉树中不存在度为1的结点。
所以,在单支树的基础上把结点补齐,使之度数为2 或 0,结果就是有2k-1个结点。
数据结构课后习题(第6章)
【课后习题】第6章树和二叉树网络工程2010级()班学号:姓名:一、填空题(每空1分,共16分)1.从逻辑结构看,树是典型的。
2.设一棵完全二叉树具有999个结点,则此完全二叉树有个叶子结点,有个度为2的结点,有个度为1的结点。
3.由n个权值构成的哈夫曼树共有个结点。
4.在线索化二叉树中,T所指结点没有左子树的充要条件是。
5.在非空树上,_____没有直接前趋。
6.深度为k的二叉树最多有结点,最少有个结点。
7.若按层次顺序将一棵有n个结点的完全二叉树的所有结点从1到n编号,那么当i为且小于n时,结点i的右兄弟是结点,否则结点i没有右兄弟。
8.N个结点的二叉树采用二叉链表存放,共有空链域个数为。
9.一棵深度为7的满二叉树有___ ___个非终端结点。
10.将一棵树转换为二叉树表示后,该二叉树的根结点没有。
11.采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的遍历结果是一样的。
12.一棵Huffman树是带权路径长度最短的二叉树,权值的外结点离根较远。
二、判断题(如果正确,在对应位置打“√”,否则打“⨯”。
每题0.5分,共5分)1.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i-1个结点。
2.二叉树的前序遍历并不能唯一确定这棵树,但是,如果我们还知道该二叉树的根结点是那一个,则可以确定这棵二叉树。
3.一棵树中的叶子结点数一定等于与其对应的二叉树中的叶子结点数。
4.度≤2的树就是二叉树。
5.一棵Huffman树是带权路径长度最短的二叉树,权值较大的外结点离根较远。
6.采用二叉树来表示树时,树的先根次序遍历结果与其对应的二叉树的前序遍历结果是一样的。
7.不存在有偶数个结点的满二叉树。
8.满二叉树一定是完全二叉树,而完全二叉树不一定是满二叉树。
9.已知二叉树的前序遍历顺序和中序遍历顺序,可以惟一确定一棵二叉树;10.已知二叉树的前序遍历顺序和后序遍历顺序,不能惟一确定一棵二叉树;三、单项选择(请将正确答案的代号填写在下表对应题号下面。
数据结构练习题--树(题)
第六章树一.名词解释:1 树 2。
结点的度 3。
叶子 4。
分支点 5。
树的度6.父结点、子结点 7兄弟 8结点的层数 9树的高度 10 二叉树11 空二叉树 12 左孩子、右孩子 13孩子数 14 满二叉树 15完全二叉树16 先根遍历 17 中根遍历 18后根遍历 19二叉树的遍历 20 判定树21 哈夫曼树二、填空题1、树(及一切树形结构)是一种“________”结构。
在树上,________结点没有直接前趋。
对树上任一结点X来说,X是它的任一子树的根结点惟一的________。
2、一棵树上的任何结点(不包括根本身)称为根的________。
若B是A的子孙,则称A是B的________3、一般的,二叉树有______二叉树、______的二叉树、只有______的二叉树、只有______ 的二叉树、同时有______的二叉树五种基本形态。
4、二叉树第i(i>=1)层上至多有______个结点。
5、深度为k(k>=1)的二叉树至多有______个结点。
6、对任何二叉树,若度为2的节点数为n2,则叶子数n0=______。
7、满二叉树上各层的节点数已达到了二叉树可以容纳的______。
满二叉树也是______二叉树,但反之不然。
8、具有n个结点的完全二叉树的深度为______。
9、如果将一棵有n个结点的完全二叉树按层编号,则对任一编号为i(1<=i<=n)的结点X有:(1)若i=1,则结点X是______;若i〉1,则X的双亲PARENT(X)的编号为______。
(2)若2i>n,则结点X无______且无______;否则,X的左孩子LCHILD(X)的编号为______。
(3)若2i+1>n,则结点X无______;否则,X的右孩子RCHILD(X)的编号为______。
10.二叉树通常有______存储结构和______存储结构两类存储结构。
11.每个二叉链表的访问只能从______结点的指针,该指针具有标识二叉链表的作用。
数据结构复习题
return d;
}
1返回值:
2功能:
五.算法题(每题3分,共6分)
1.设计一个算法,判断链表中数据元素是否是递减的。
2.设某棵二叉树采用二叉链表作为存储,编写一递归算法求其叶结点数。
第一章绪论
一.选择题
1.下面关于算法说法正确的是()。
A.算法最终必须由计算机程序实现
B.为解决某问题的算法同为该问题编写的程序含义是相同的
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表
5.在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动()个元素
A.n-iB.n-i+lC.n-i-1D.i
6.从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较()个元素结点
3.线性表的顺序存储结构的优点是存储密度大,且插入、删除运算效率高。()
4.将一棵树转换为二叉树后,根结点没有左子树。()
5.完全二叉树中,若一个结点没有左孩子,则必是叶结点。()
四.简答题(每题2分,共4分)
1.简述下列算法的功能,并给出队列Q={12,34,25,4,8}在执行下列算法后的状态。
A.n/2B.nC.(n+1)/2D.(n-1)/2
7.设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为()
A.p->next=p->next->next;B.p=p->next;
C.p=p->next->next;D.p->next=p;
8.在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行()
计算机数据结构知识点梳理 二叉树的定义及其主要特征
当 n ≠ 2k , 即 n 不是2的方幂或者 n = 2k 但是一棵满二叉树,其高度为
。
当 n = 2k 但是非满二叉树,其高度为
。
②有n个结点的完全k叉树的高度为
。
性质5推广:一棵满k叉树,如果按层次顺序从1开始对全部结点编号,
①编号为p=1的结点无父结点,否则编号为p结点的父结点的编号是
(k≥2);
[题1]若一棵二叉树有126个结点,在第7层(根结点在第1层)至多有( )个结点。
A.32
B.64
C.63
D.不存在第7层
分析:根据二叉树的性质,第7层至多有64(27-1)个结点,但是题目中给出了二叉树的结点 总数126,由此来判断第7层是否可以有64个结点?
要在二叉树的第7层达到最多的结点个数,其上面6层必须是一个满二叉树,深度为6的满 二叉树有63(26-1)个结点,由此可以判断出此二叉树的第7层不可能达到64个结点,最 多是126-63=63个结点。
(2)完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到 右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树 中的位置相同,则这棵二叉树称为完全二叉树。它的特点是:叶子结点只能出现在最下 层和次下层,且最下层的叶子结点集中在树的左部。
任何完全二叉树中度为1的结点只有0个或1个。
中的所有结点从1开始顺序编号,则对于任意的序号为i的结点,有:
(1)如果i>1,则序号i的结点的双亲结点的序号为 ;如果i=1,则序号为i的结点是根 结点,无双亲结点。
(2)如果2i≤n,则序号为i的结点的左孩子结点的序号为2i;如果2i>n,则序号为i的结 点无左孩子。
(3)如果2i+1≤n,则序号为i的结点的右孩子结点的序号为2i+1;如果2i+1>n,则 序号为i的结点无右孩子。
数据结构名词解释和时间复杂度
数据结构名词解释和时间复杂度名词解释数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储和数据组织的方式,它分为三个方面,即数据的逻辑结构,数据的物理结构,数据的操作。
数据元素:数据元素构成数据,也是数据的基本单位。
数据项:是数据不可分割的最小单位,用它可以识别一个或一个组数据,一个数据元素可由若干数据项组成。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中被计算机程序处理的符号的总称,是计算机化的信息。
数据类型:是一个值的集合以及定义在这个值集上的一组操作,可分为原子类型和结构类型。
抽象数据类型:是基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。
逻辑结构:是数据元素之间逻辑关系的描述。
物理结构(存储结构):是指数据的逻辑结构在计算机中的映像(又称表示),即数据结构在计算机中的存储方法。
算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
时间复杂度:算法执行所需时间的量度。
空间复杂度:算法执行所需存储空间的量度。
存储密度:指结点数据本身所占存储量和整个结构所占存储量之比。
程序设计的一些基本原则:分解、抽象和信息隐蔽。
根据数据元素之间关系的不同特性,有四类基本的数据结构:集合结构,线性结构,树形结构,图形结构(网状结构)。
数据的存储结构有:顺序存储结构、链式(链接)存储结构、索引结构、散列存储结构常用的两种存储结构:顺序存储结构和链式存储结构。
算法的五个特性:确定性、有穷性、可行性、输入和输出。
(可以有零个或多个数据输入,但必须至少有一个输出数据。
算法设计的要求:正确性、可读性、稳健性、高效率低存储量。
(算法分析)衡量算法的两个标准:时间复杂度和空间复杂度。
一个算法的设计取决于所选的逻辑结构。
一个算法的实现取决于所选的存储结构。
结构化程序设计思想的要求:自顶向下、逐步细化、模块化设计、结构化编程。
二叉树
6-2-2 二叉树的基本操作与存储实现
1、二叉树的基本操作 Initiate(bt)
Create(x, lbt, rbt)
InsertL(bt, x, parent) InsertR(bt, x, parent) DeleteL(bt,parent) DeleteR(bt,parent)
Search(bt,x)
BiTree DeleteL(BiTree bt, BiTree parent){ BiTree p; if(parent==NULL||parent->lchild==NULL){ cout<<“删除出错”<<endl; return NULL; } p=parent->lchild; parent->lchild =NULL; delete p; return bt ; }
a b c e 0 1 2 3 4 5 a b c d e ^ 6 7 8 9 10 ^ ^ ^ f g
d
f
g
特点:结点间关系蕴含在其存储位置中。浪费空间, 适于存满二叉树和完全二叉树。
二、链式存储结构 1、二叉链表存储法
A
B C E G D B A ^
lchild data rchild
F
^ C ^ typedef struct BiTNode { DataType data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; ^ E
二叉树的五种基本形态
A
A
A B
A
B 空二叉树
B
C 左、右子树 均非空
只有根结点 的二叉树
右子树为空
左子树为空
二叉树
7.1.2
二叉树的五种基本形态
Ф
左子树
(a) (b) (c)
右子树
(d)
左子树
(e)
右子树
7.1.3
两种特殊形态的二叉树
结点拥有的子树数称为该结点的度(degree)。度为零的结点称 为叶子(leaf),其余结点称为分支结点(branch)。树中结点的最大的 度称为树的度。显然,二叉树结点的度可能为0、1或2。 根结点的层次(level)为1,其余结点的层次等于该结点的双亲结 点的层次加1。树中结点的最大层次称为该树的高度或深度。 1.满二叉树 2.完全二叉树
7.6
本章小结
本章讨论了二叉树数据类型的定义以及实现方法。二叉树是 以两个分支关系定义的层次结构,结构中的数据元素之间存在着一 对多的关系,因此它为计算机应用中出现的具有层次关系或分支关 系的数据,提供了一种自然的表示方法。 二叉树是有明确的左子树和右子树的树形结构,因此当用二 叉树来描述层次关系时,其左孩子表示下属关系,而右孩子表示的 是同一层次的关系。 二叉树的遍历算法是实现各种操作的基础。遍历的实质是按 某种规则将二叉树中的数据元素排列成一个线性序列,二叉树的线 索链表便可看成是二叉树的一种线性存储结构,在线索链表上可对 二叉树进行线性化的遍历,即不需要递归,而是从第一个元素起, 逐个访问后继元素直至后继为空止。因此,线索链表是通过遍历生 成的,即在遍历过程中保存结点之间的前驱和后继的关系。
7.1.4
二叉树的几个特性
由二叉树的定义、形态,我们很容易的得出下面二叉树的 一些特性。 性质1 在二叉树的第i 层上至多有 2i-1 个结点(i≥1)。 性质2 深度为k的二叉树中至多含有2k-1 个结点(k≥1)。 性质3 对任何一棵二叉树 T,如果其终端结点数为,度为 2的结点数为,则。 性质4 具有n个结点的完全二叉树的深度为 log2n+1。 性质5 如果对一棵有 n 个结点的完全二叉树(其深度为 log2n+1)的结点按层序(从第1层到第 log2n+1 层,每层从左到 右)从1起开始编号。
数据结构第六章树和二叉树习题及答案
习题六树和二叉树一、单项选择题1.以下说法错误的是 ( )A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构E.任何只含一个结点的集合是一棵树2.下列说法中正确的是 ( )A.任何一棵二叉树中至少有一个结点的度为2B.任何一棵二叉树中每个结点的度都为2C.任何一棵二叉树中的度肯定等于2D.任何一棵二叉树中的度可以小于23.讨论树、森林和二叉树的关系,目的是为了()A.借助二叉树上的运算方法去实现对树的一些运算B.将树、森林按二叉树的存储方式进行存储C.将树、森林转换成二叉树D.体现一种技巧,没有什么实际意义4.树最适合用来表示 ( )A.有序数据元素 B.无序数据元素C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。
与森林F 对应的二叉树根结点的右子树上的结点个数是()。
A.M1 B.M1+M2 C.M3 D.M2+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A. 250 B. 500 C.254 D.505 E.以上答案都不对8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( )A.不确定 B.2n C.2n+1 D.2n-19.二叉树的第I层上最多含有结点数为()A.2I B. 2I-1-1 C. 2I-1 D.2I -110.一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有( )结点A.2h B.2h-1 C.2h+1 D.h+111. 利用二叉链表存储树,则根结点的右指针是()。
A.指向最左孩子 B.指向最右孩子 C.空 D.非空12.已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。
第六章树与二叉树教案 二叉树的类型定义 存储结构 遍历 哈夫曼树与哈夫曼编码
即 k-1 ≤ log2 n < k
因为 k 只能是整数,因此, k =log2n + 1
问题:
一棵含有n个结点的二叉树,可能达 到的最大深度和最小深度各是多少?
1
答:最大n,
2
最小[log2n] + 1
第六章 树和二叉树教案
二叉树的类型定义 存储结构 遍历 哈夫曼树与哈夫曼编码
树是常用的数据结构
•家族 •各种组织结构 •操作系统中的文件管理 •编译原理中的源程序语法结构 •信息系统管理 •。。。。
2
6.1 树的类型定义 6.2 二叉树的类型定义
6.2.3 二叉树的存储结构 6.3 二叉树的遍历
二叉树上每个结点至多有两棵子树, 则第 i 层的结点数 = 2i-2 2 = 2i-1 。
性质 2 :
深度为 k 的二叉树上至多含 2k-1 个 结点(k≥1)。
证明:
基于上一条性质,深度为 k 的二叉
树上的结点数至多为
20+21+ +2k-1 = 2k-1 。
(等比数列求和)
k
k
(第i层的最大结点数) 2i1 2k
i 1
i 1
性质 3 :
对任何一棵二叉树,若它含有n0 个叶 子结点(0度节点)、n2 个度为 2 的结 点,则必存在关系式:n0 = n2+1。
证明:
设 二叉树上结点总数 n = n0 + n1 + n2 又 二叉树上分支总数 b = n1+2n2
而 b = n-1 = n0 + n1 + n2 - 1 由此, n0 = n2 + 1 。
自考02331数据结构真题及答案(2009-2018)
if ( ! visited[p -> adjvex] )
DFS( G, p - > adjvex) ;
p = p->next;
}
}
}
void f32 ( ALGraph * G) {
int i;
for (i = 0; i < G->n; i ++)
visited [ i ] = FALSE ;
A.先进先出B.后进先出
C.进优于出D.出优于进
4.假设以数组A[n]存放循环队列的元素,其头、尾指针分别为front和rear。若设定尾指针指向队列中的队尾元素,头指针指向队列中队头元素的前一个位置,则当前存于队列中的元素个数为( )
A.(rear-front-1)%nB.(rear-front)%n
(1)(1+8)*8/2=36 存放次对角线以上的零为37
(2)12
27.对关键字序列(5,8,1,3,9,6,2,7)按从小到大进行快速排序。
(1)写出排序过程中前两趟的划分结果;
(2)快速排序是否是稳定的排序方法?
(1)
第一趟划分结果;(2,3,1),5,(9,6,8,7)
第二趟划分结果;(1,2,3),5,(9,6,8,7)
if ((2)) {R[k].key<R[k-l].key
t = R[k];
R[k] = R[k-1];
R[k-1] = t;
}
(3);i++
}
}
(1)
(2)
(3)
五、算法设计题(本大题10分)
34.假设以带头结点的单链表表示线性表,单链表的类型定义如下:
广东财经大学硕士研究生入学考试试卷2019年809-数据结构(自命题)
⼴东财经⼤学硕⼠研究⽣⼊学考试试卷2019年809-数据结构(⾃命题)⼴东财经⼤学硕⼠研究⽣⼊学考试试卷考试年度:2019年考试科⽬代码及名称:809-数据结构(⾃命题)适⽤专业:085211 ⼯程硕⼠(计算机技术)[友情提醒:请在考点提供的专⽤答题纸上答题,答在本卷或草稿纸上⽆效!]⼀、单项选择题(10题,每题2分,共20分)1、设n是描述问题规模的⾮负整数,下⾯的程序⽚段的时间复杂度是________。
i=2;while(i<=n)i=i*2;A.O(n2) B.O(n) C.O(nlog 2 n) D.O(log 2 n)2、在双向链表存储结构中,删除p所指的结点时须修改指针()。
A.p->next->prior=p->prior; p->prior->next=p->next;B.p->next=p->next->next; p->next->prior=p;C.p->prior->next=p; p->prior=p->prior->prior;D.p->prior=p->next->next; p->next=p->prior->prior;3、设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进⼊栈S,⼀个元素出栈后即进⼊Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量⾄少应该是________。
A.2 B.3 C.4 D. 64、设有⼀个递归算法如图1所⽰则计算fact(n)需要调⽤该函数的次数为________。
A.n+1 B.n-1 C. n D. n+25、对图2所⽰的带权有向图,若采⽤迪杰斯特拉(Dijkstra)算法求从原点a到其他各顶点的最短路径,则得到的第⼀条最短路径的⽬标顶点是b,第⼆条最短路径的⽬标顶点是c,后续得到的其余各最短路径的⽬标顶点依次是________。
数据结构与算法基础考试
数据结构与算法基础考试(答案见尾页)一、选择题1. 数据结构中,以下哪个是线性结构?A. 链表B. 栈C. 队列D. 二叉树2. 在算法分析中,以下哪个不是时间复杂度的组成部分?A. 时间复杂度B. 空间复杂度C. 时间步长D. 平均时间复杂度3. 以下哪个排序算法的时间复杂度为O(n^)?A. 快速排序B. 归并排序C. 堆排序D. 插入排序4. 在计算机中,以下哪种数据结构可以最有效地进行字符串匹配?A. 数组B. 链表C. 栈D. 哈希表5. 以下哪个图算法用于寻找最短路径?A. 拉普拉斯矩阵B. 关联矩阵C. 迪杰斯特拉算法D. A*搜索算法6. 以下哪个数据结构可以用来实现栈和队列?A. 数组B. 链表C. 栈D. 哈希表7. 在机器学习中,以下哪种算法属于监督学习?A. 决策树B. 聚类C. 逻辑回归D. 神经网络8. 以下哪个算法用于解决整数分解问题?A. RSA加密B. Diffie-Hellman密钥交换C. 数字签名D. ElGamal加密9. 在数据库管理中,以下哪个概念与数据的物理存储无关?A. 表空间B. 水平分割C. 垂直分割D. 存储过程10. 以下哪个编程语言不适合初学者学习数据结构和算法?A. PythonB. JavaC. C++D. JavaScript11. 什么是数据结构?请列举几种常见的数据结构,并简要描述它们的特点。
B. 链表C. 栈D. 队列E. 图12. 算法的时间复杂度是如何衡量的?请举例说明不同时间复杂度的算法。
A. O(1)B. O(log n)C. O(n)D. O(n^2)E. O(2^n)13. 什么是递归?请列举两种递归的例子,并解释它们如何工作。
A. 汉诺塔问题B. 二分查找C. 幂运算D. 斐波那契数列E. 求最大公约数14. 什么是栈?请列举栈的基本操作,并说明它们是如何实现的。
A. 后进先出(LIFO)B. 先进先出(FIFO)C. 帧栈D. 递归E. LIFO15. 什么是队列?请列举队列的基本操作,并说明它们是如何实现的。
数据结构自考试题及答案
数据结构⾃考试题及答案全国2006年10⽉⾼等教育⾃学考试数据结构试题课程代码:02331⼀、单项选择题(本⼤题共15⼩题,每⼩题2分,共30分)在每⼩题列出的四个备选项中只有⼀个是符合题⽬要求的,请将其代码填写在题后的括号内。
错选、多选或未选均⽆分。
1.数据结构是()A.⼀种数据类型B.数据的存储结构C.⼀组性质相同的数据元素的集合D.相互之间存在⼀种或多种特定关系的数据元素的集合2.算法分析的⽬的是()A.辨别数据结构的合理性B.评价算法的效率C.研究算法中输⼊与输出的关系D.鉴别算法的可读性3.在线性表的下列运算中,不.改变数据元素之间结构关系的运算是()A.插⼊B.删除C.排序D.定位4.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进⾏,则可能出现的出栈序列为()A.3,2,6,1,4,5 B.3,4,2,1,6,5C.1,2,5,3,4,6 D.5,6,4,2,3,15.设串sl=″Data Structures with Java″,s2=″it″,则⼦串定位函数index(s1,s2)的值为()A.15 B.16C.17 D.186.⼆维数组A[8][9]按⾏优先顺序存储,若数组元素A[2][3]的存储地址为1087,A[4][7]的存储地址为1153,则数组元素A[6][7]的存储地址为()A.1207 B.1209C.1211 D.12137.在按层次遍历⼆叉树的算法中,需要借助的辅助数据结构是()A.队列B.栈C.线性表D.有序表8.在任意⼀棵⼆叉树的前序序列和后序序列中,各叶⼦之间的相对次序关系()A.不⼀定相同B.都相同C.都不相同D.互为逆序9.若采⽤孩⼦兄弟链表作为树的存储结构,则树的后序遍历应采⽤⼆叉树的()A.层次遍历算法B.前序遍历算法C.中序遍历算法D.后序遍历算法10.若⽤邻接矩阵表⽰⼀个有向图,则其中每⼀列包含的″1″的个数为()A.图中每个顶点的⼊度B.图中每个顶点的出度C.图中弧的条数D.图中连通分量的数⽬11.图的邻接矩阵表⽰法适⽤于表⽰()A.⽆向图B.有向图C.稠密图D.稀疏图12.在对n个关键字进⾏直接选择排序的过程中,每⼀趟都要从⽆序区选出最⼩关键字元素,则在进⾏第i 趟排序之前,⽆序区中关键字元素的个数为()A.i B.i+1C.n-i D.n-i+113.下列排序算法中,其时间复杂度和记录的初始排列⽆关的是()A.插⼊排序B.堆排序C.快速排序D.冒泡排序14.若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在⼆分查找关键字b的过程中,先后进⾏⽐较的关键字依次为()A.f,c,b B.f,d,bC.g,c,b D.g,d,b15.若在⽂件中查询年龄在60岁以上的男性及年龄在55岁以上的⼥性的所有记录,则查询条件为()A.(性别=“男”)OR(年龄> 60)OR(性别=“⼥”)OR(年龄>55)B.(性别=“男”)OR(年龄> 60)AND(性别=“⼥”)OR(年龄>55)C.(性别=“男”)AND(年龄> 60)OR(性别=“⼥”)AND(年龄>55)D.(性别=“男”)AND(年龄> 60)AND(性别=“⼥”)AND(年龄>55)⼆、填空题(本⼤题共10⼩题,每⼩题2分,共20分)请在每⼩题的空格中填上正确答案。
第6章-1( 树的基本概念)
10.层数 根结点的层数为1,其它结点的层数为从根结点到该 结点所经过的分支数目再加1。 11. 树的高度(深度) 树中结点所处的最大层数称为树的高度,如空树的 高度为0,只有一个根结点的树高度为1。 12.树的度 树中结点度的最大值称为树的度。
13. 有序树
若一棵树中所有子树从左到右的排序是有顺序的,不 能颠倒次序。称该树为有序树。 14. 无序树
性质3 对任意一棵二叉树,如果叶子结点个数为n0, 度为2的结点个数为n2,则有n0=n2+1。 证明:设二叉树中度为1的结点个数为n1,根据二叉树 的定义可知,该二叉树的结点数n=n0+n1+n2。又因为 在二叉树中,度为0的结点没有孩子,度为1的结点有1 个孩子,度为2的结点有2个结孩子,故该二叉树的孩 子结点数为 n0*0+n1*1+n2*2 ,而一棵二叉树中,除根 结点外所有都为孩子 结点,故该二叉树的结点数应为 孩子结点数加1即:n=n0*0+n1*1+n2*2+1因此,有 n=n0+n1+n2=n0*0+n2*1+n2*2+1,最后得到n0=n2+1。 先定义两种特殊的二叉树:
初始化树T。 (2) root(T) 求树T的根结点。
(3) parent(T,x)
求树T中,值为x的结点的双亲。 (4) child(T,x,i)
求树T中,值为x的结点的第i个孩子。
(5) addchild(y,i,x) 把值为x的结点作为值为y的结点的第i个孩子插入到树 中。 (6) delchild(x,i)
图 6-1 树的示意图
2. 凹入法表示法
具体参见图6-3 。
A B E J K L F C G D H M I 图 6-3 图 6-1(c)的树的凹入法表示
树 历年试题及参考答案(08)
第6章树(2008年1月)8、树的先根序列等同于与该树对应的二叉树的()A、先序序列B、中序序列C、后序序列D、层序序列21、假设一棵完全二叉树含1000个结点,则其中度为2的结点数为___________。
27、已知二叉树的先序序列和中序序列分别为ABDEHCFI和DBHEACIF,(1)画出该二叉树的二叉链表存储表示;(2)写出该二叉树的后序序列。
(1)(2)32、已知以二叉链表作二叉树的存储结构,阅读算法f32,并回答问题:(1)设二叉树T如图所示,写出执行f32(T)的返回值;(2)简述算法f32的功能。
int f32(BinTree T){int m, n;if(! T)return 0;else{m= f32(T–>lchild);n = f 32(T–>rchild);if(m>n)return m +1;else return n+1;}}(1)(2)(2008年10月)7、已知一棵含50个结点的二叉树中只有一个叶子结点,则该树中度为1的结点个数为()A、0B、1C、48D、4921、假设用<x,y>表示树的边(其中x是y的双亲),已知一棵树的边集为{<b,d>,<a,b>,<c,g>,<c,f>,<c,h>,<a,c>},该树的度是。
26、由森林转换得到的对应二叉树如图所示,写出原森林中第三棵树的前序序列和后序序列。
前序序列:后序序列:(2009年1月)7、高度为5的完全二叉树中含有的结点数至少为( )A、16B、17C、31D、328、已知在一棵度为3的树中,度为2的结点数为4,度为3的结点数为3,则该树中的叶子结点数为( )A、5B、8C、11D、189、下列所示各图中是中序线索化二叉树的是( )21、在含有3个结点a,b,c的二叉树中,前序序列为abc且后序序列为cba的二叉树有_________棵。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简述二叉链表的类型定义
二叉链表是一种常见的数据结构,它是由节点组成的树形结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉链表的类型定义包括节点结构体和二叉链表结构体两部分。
节点结构体定义
节点结构体是二叉链表中最基本的数据单元,它包含三个成员变量:数据域、左子节点指针和右子节点指针。
其中,数据域用于存储节点的数据,左子节点指针和右子节点指针分别指向节点的左子节点和右子节点。
节点结构体的类型定义如下:
```
typedef struct BiTNode {
int data; // 数据域
struct BiTNode *lchild; // 左子节点指针
struct BiTNode *rchild; // 右子节点指针
} BiTNode, *BiTree;
```
在上面的代码中,BiTNode是节点结构体的别名,BiTree是指向节点结构体的指针类型。
节点结构体中的成员变量lchild和rchild都
是指向节点结构体的指针类型,它们分别指向节点的左子节点和右子节点。
二叉链表结构体定义
二叉链表结构体是由节点组成的树形结构,它包含一个指向根节点的指针。
二叉链表结构体的类型定义如下:
```
typedef struct {
BiTree root; // 指向根节点的指针
} BiTreeStruct;
```
在上面的代码中,BiTreeStruct是二叉链表结构体的别名,它包含一个指向根节点的指针root。
root指针指向节点结构体,表示二叉链表的根节点。
二叉链表的操作
二叉链表是一种常见的数据结构,它支持多种操作,包括创建二叉链表、遍历二叉链表、插入节点、删除节点等。
下面我们将介绍二叉链表的常见操作。
1. 创建二叉链表
创建二叉链表的过程就是构建二叉树的过程。
我们可以通过递归的方式来创建二叉链表。
具体步骤如下:
1. 如果当前节点为空,则返回NULL。
2. 创建一个新节点,并将数据存储到新节点的数据域中。
3. 递归创建左子树,将左子树的根节点指针赋值给新节点的左子节点指针。
4. 递归创建右子树,将右子树的根节点指针赋值给新节点的右子节点指针。
5. 返回新节点的指针。
下面是创建二叉链表的代码实现:
```
BiTree createBiTree() {
int data;
scanf("%d", &data);
if (data == -1) { // 如果当前节点为空,则返回NULL
return NULL;
}
BiTree node = (BiTree)malloc(sizeof(BiTNode)); // 创建一个
新节点
node->data = data; // 将数据存储到新节点的数据域中
node->lchild = createBiTree(); // 递归创建左子树
node->rchild = createBiTree(); // 递归创建右子树
return node; // 返回新节点的指针
}
```
在上面的代码中,我们通过scanf函数从标准输入中读取数据,如果读取到-1,则表示当前节点为空,返回NULL。
否则,我们创建一个新节点,并将数据存储到新节点的数据域中。
然后,我们递归创建左子树和右子树,并将左子树的根节点指针赋值给新节点的左子节点指针,将右子树的根节点指针赋值给新节点的右子节点指针。
最后,我们返回新节点的指针。
2. 遍历二叉链表
遍历二叉链表是指按照一定的顺序访问二叉链表中的所有节点。
常见的遍历方式包括前序遍历、中序遍历和后序遍历。
下面我们将介绍这三种遍历方式的实现方法。
前序遍历
前序遍历的顺序是先访问根节点,然后访问左子树,最后访问右子
树。
前序遍历的代码实现如下:
```
void preOrder(BiTree root) {
if (root == NULL) { // 如果当前节点为空,则返回
return;
}
printf("%d ", root->data); // 访问根节点
preOrder(root->lchild); // 遍历左子树
preOrder(root->rchild); // 遍历右子树
}
```
在上面的代码中,我们首先判断当前节点是否为空,如果为空,则返回。
否则,我们访问当前节点的数据域,然后递归遍历左子树和右子树。
中序遍历
中序遍历的顺序是先访问左子树,然后访问根节点,最后访问右子树。
中序遍历的代码实现如下:
```
void inOrder(BiTree root) {
if (root == NULL) { // 如果当前节点为空,则返回
return;
}
inOrder(root->lchild); // 遍历左子树
printf("%d ", root->data); // 访问根节点
inOrder(root->rchild); // 遍历右子树
}
```
在上面的代码中,我们首先判断当前节点是否为空,如果为空,则返回。
否则,我们递归遍历左子树,然后访问当前节点的数据域,最后递归遍历右子树。
后序遍历
后序遍历的顺序是先访问左子树,然后访问右子树,最后访问根节点。
后序遍历的代码实现如下:
```
void postOrder(BiTree root) {
if (root == NULL) { // 如果当前节点为空,则返回
return;
}
postOrder(root->lchild); // 遍历左子树
postOrder(root->rchild); // 遍历右子树
printf("%d ", root->data); // 访问根节点
}
```
在上面的代码中,我们首先判断当前节点是否为空,如果为空,则返回。
否则,我们递归遍历左子树和右子树,最后访问当前节点的数据域。
3. 插入节点
插入节点是指向二叉链表中插入一个新节点。
插入节点的过程可以分为两步:查找插入位置和插入新节点。
具体步骤如下:
1. 查找插入位置:从根节点开始,按照二叉搜索树的规则查找插入位置。
2. 插入新节点:将新节点插入到查找到的位置。
下面是插入节点的代码实现:
```
void insertNode(BiTree *root, int data) {
if (*root == NULL) { // 如果当前节点为空,则创建一个新节点 BiTree node = (BiTree)malloc(sizeof(BiTNode));
node->data = data;
node->lchild = NULL;
node->rchild = NULL;
*root = node;
return;
}
if (data < (*root)->data) { // 如果插入数据小于当前节点的数据,则递归插入左子树
insertNode(&((*root)->lchild), data);。