数据结构习题和答案
- 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、一个算法的效率可分为效率和效率。
17、队列的特点是。
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、试给出下图所示的有向图的邻接表和邻接矩阵。
答:
6、已知一组元素为(38,52,25,74,68,16,30,54,90,72),画出按线性表中元素的次序生成的一棵二叉排序树,并求出其在等概率的情况下查找成功的平均查找长度。
,
7、利用普里姆算法,求下图对应的最小生成树。
答:
8、已知一组元素为(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、顺序表操作
(a)已知L是采用顺序结构存储的线性表,试完成删除表中第i个数据元素的算法。Status ListDelete_Sq(SqList &L,int I,ElemTyep &e) {
if ( ) return ERROR; //表空
if ( ) return ERROR; //删除位置不合法
e=L.elem[i-1];
for (j=i-1;j<=L.length-1;j++)
//元素后移
L.length--; //表长减1
return OK;
}
(b) 已知L是采用顺序结构存储的线性表,试完成在第i个数据元素之前插入一个数据元素的算法。
Status ListInsert_Sq(SqList &L,int i,ElemTyep e) {
if ( ) return ERROR; //插入位置不合法
if ( ) return ERROR; //表满
for (j=L.length-1;j>=i-1;j--)
//元素后移
L.elem[i-1]=e;
L.length++; //表长增1
}
3、简述下面算法的功能。
(a) Status alto(Stack S, int e) {
Stack T; int d;
InitStack(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->next!=q) p=p->next;
p->next=s; ]//BB
void AA(LNode *pa, LNode *pb) {
//pa和pb分别指向单循环链表中的两个结点
BB(pa,pb);
BB(pb,pa); }//AA printf(x);
}
算法功能为:
(c) Status A(LinkedList L) {//L是无表头结点的单链表
if (L&&L->next) {