数据结构习题和答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题课
填空
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、一个算法的效率可分为____________ 效率和____________ 效率。
仃、队列的特点是______________________ 。
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 的第一个字节地址为。
3、已知二叉树结点的先序序列是ABCDEFGHIJ中序序列是CBAEFDIHJG请画出这棵二叉树。
4、试给出下图所示的有向图的邻接表和邻接矩阵。
5、试给出下图所示的有向图的邻接表和邻接矩阵。
3
2
6
6、已知一组元素为(38, 52, 25, 74, 68, 16, 30, 54, 90, 72),画出按线性表中元素的次序生成的一棵二叉排序树,并求出其在等概率的情况下查找成功的平均查找长度。
7、禾U用普里姆算法,求下图对应的最小生成树。
&已知一组元素为(46,25,78,62,12,37,70,29 )画出按线性表中元素的次序生成的一棵二叉排序树,并求出其在等概率的情况下查找成功的平均查找长度。
算法分析题
1、语句频度
(a) 设n为正整数,试确定下面程序段中前置以记号@勺语句的频度。
x = 91; y= 100;
while (y>0) {
@ if (x>100) {x- = 10; y--;}
else x++;
}
语句频度为: _______
(b) 设n为正整数,试确定下面程序段中前置以记号@勺语句的频度。
x = n; y = 0;
while (x> = (y+1)*(y+1)) {
@ y++;
}
语句频度为: _______
(c) 设n为正整数,试确定下面程序段中前置以记号@勺语句的频度。
i = 1; j = 0;
while (i+j< = n) {
@ if (i>j) j++;
else i++;
}
语句频度为:__________
2、顺序表操作
⑻已知L是采用顺序结构存储的线性表,试完成删除表中第
i个数据元素的算法。Status ListDelete—Sq(SqList &L,int l,ElemTyep &e) {
if ( __________ ) return ERROR; // 表空
if ( __________ ) return ERROR; //删除位置不合法
e=L.elem[i-1];
for (j=i-1;j<=L」en gth-1;j++)
________________________ 〃元素后移
L.le ngth--; // 表长减1
return OK;
(b)已知L是采用顺序结构存储的线性表,试完成在第i个数据元素之前插入一个数据元素的算法。
Status Listlnsert—Sq(SqList &L,int i,ElemTyep e) {
if ( __________________ ) return ERROR; //插入位置不合法
if ( __________________ ) return ERROR; // 表满
for (j=L .len gth-1;j>=i-1;j--)
____________________________ 〃元素后移
L.elem[i-1]=e;
L.le ngth++; // 表长增1
}
3、简述下面算法的功能。
⑻ Status alto(Stack S, i nt e) {
Stack T; int d;
Ini tStack(T);
While (!StackEmpty(S)) {
Pop(S,d);
if (d! = e) push(T,d);
}
While(!StackEmpty(T)) {
Pop(T,d);
push(S,d);
}}
算法功能为:_____________________________________________________________
(b) void BB(LNode *s, LNode *q) {
p=s;
while (p->n ext!=q) p=p->n ext;
p-> next=s; ]//BB
void AA(LNode *pa, LNode *pb) {
//pa和pb分别指向单循环链表中的两个结点
BB(pa,pb);
BB(pb,pa); }//AA prin tf(x);
}
算法功能为:_______________________________________________________
(c) Status A(LinkedList L) {//L是无表头结点的单链表
if (L&&L->next) {