考研数据结构大题整合
一、ZYL组
ZYL组一
1.一棵树有度为i的结点ni 个(i=1,2,3,…m), 求叶结点的个数.(10分)
2、已知带权连通图G=(V,E)的邻接表如图所示,请画出该图,并分别以深度优先和广度优先遍历之,写出遍历结点序列,并画出该图的一个最小生成树。其中表结点的三个域各为: (10分)
3.证明:任一棵满二叉树T中分支数B满足B=2(n0-1),(其中n0为叶结点数)。(10分)
五、程序填空/写程序结果或程序功能 (20分)
1、程序填空: (5分)
void SelectSort(Datatype R[ ],int n)
//用直接选择排序法对R[0]---R[n-1]排序
{ int i,j,small;
datatype temp;
for(i=0;i<n-1;i++)
{ small=i;
for(j=i+1;j<n;j++) //寻找排序码最小的元素
{ if(________) small=j;}
if(small!=i)
{ temp=R[i]; R[i]=R[small]; R[small]=temp; }
}
}
2、分析下面程序段的复杂度.(5分)
for (i=1; i<= n ;i++)
{ for (j=1;j<= n;j++)
b[i,j]=0;
{sum=0;
for (k=1;k<=n;k++)
{sum=sum+a[i,k]*a[k,j];
}
}
}
b[i,j]=sum;
end;
该程序段的复杂度为_________.
3、一棵具有n个结点的完全二叉树以一唯数组作为存储结构,对该完全二叉树进行前序遍历的非递归算法如下:写出空格部分的内容。 (10分)
//preorder(R) 前序遍历二叉树R
int R[n];
{ int root; //root 为数组的下标
seqstack *s; //*s 为一指针栈,类型为seqstack
s->top= -1; //s栈置空
root=1; //从数组第一单元开始扫描遍历
while{(root<=n)||(s->top>-1)}
{ while (______________)
{ cout<<R[root];
_________;
s->data[s->top]=root; //保留结点
root=2*root; //遍历左子树
}
if (__________) //栈非空,遍历右子树
{ root=s->data[s->top]*2+1;
___________;
}
}
}
六、算法设计 (10分)
用链表插入法对a[0]—a[n-1]排序,排序结果存放在带头结点的单链表list中。
ZYL组二
四、计算题/画图题/证明题 (30分)
1.试为下列二叉树建立后序线索,画出相应的后序线索二叉树.(10分)
2.已知某电文中共出现10种不同的字母,各个字母出现的频率分别为A:8, B:5, C:3, D:2, E:7, F:23, G:9, H:15, I:3, J:35 ,现在对这段电文用三进制进行编码(即码字由0,1,2组成),问电文编码总长度最少有多少位?并画出图(10分)
3.证明:前序序列和中序序列、后序序列和中序序列可唯一确定一棵二叉树,而前序序列和后序序列则不能。(10分)
五、程序填空/写程序结果或程序功能 (20分)
1、程序填空: (7分)
用链表表示的数据的简单选择排序,结点的域为数据域data,指针域next,链表首指针为head,链表无头指针。
Selectsort(head)
{
p=head;
while(p_________)
{ q=p;
r=__________;
while(____________)
{
if(____________)
q=r;
r=____________;
}
tmp=q->data;
q->data=_________
p->data=tmp;
p=__________;
}
}
2、分析下面程序段的复杂度:(5分)
x=n; //n>1
y=0;
while ((x>=(y+1)*(y+1))
y=y+1;
该程序段的复杂度为____________________。
3、中序遍历线索二叉树算法(树的结点有5个域:数据域data,左右孩子域lchild, rchild和左右标志域ltag, rtag,规定标志域1是线索,0是指向孩子的指针。) (8分)
void inorder (Hbitree *t)
{ Hbitree *p; p=t;
if (p_________)
{ while (p___________) p___________; //找开始结点
while (p__________)
{ cout <<p->data;
p= inordernext(p); //调用函数找中序后继
}
}
}
六、算法设计 (10分)
编写函数实现双向冒泡排序,即在排序过程中交替改变扫描方向。
ZYL组三
四、计算题/画图题/证明题 (30分)
1、对于如图所示的有向图,试写出:
(1) 从顶点①出发按深度方向周游所得到的深度优先生成树;
(2) 从顶点②出发按广度方向周游所得到的广度优先生成树;
(3) 能否找出一个拓扑有序的序列?若能,给出一个拓扑有序的序列。.(10分)
2.设散列表为HT[13], 散列函数为H(key)=key%13。用闭散列法解决冲突,对下列关键码序列12,23,45,57,20,0