for(j=n;j>=i;j--)s;
2.队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是
3.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为
的内存单元中,则元素A[5,5]的地址是。
4.一棵有124个叶子结点的完全二叉树,最多有个结点。
5.N个顶点的无向连通图若要存在回路,则至少需要条边。
6.对于一棵二叉排序树做遍历,可以得到一个有序的序列。
7.进行折半查找的两个先决条件是查找表中数据有序和。
&按{12,24,36,90,52,30}的顺序构成的平衡二叉树,其根结点是。
9.时间复杂度为O(nlg2n)且稳定的排序算法是排序。
10.快速排序在情况下会蜕变成为冒泡排序。
三、应用题(共5题,每题10分,共50分)
1.设一棵二叉树的先序遍历序列:
ABDFCEGH中序遍历序列:
BFDAGEHC
(1)画出这棵二叉树。
(2)将这棵二叉树转换成对应的树(或森林)。
2.给定一组数列(15,8,10,21,6,19,3)分别代表字符A,B,C,D,E,F,G出现的频度,画出
Huffman树,并给出各字符的Huffman编码。
3.根据Prim算法或Kruskal算法,求右图的最小生成树。
4•某一工程作业的网络图如右图所示,其中箭头表示作业,箭头边的数字表示完成作业所需的天数。
箭头前后的圆圈表示事件的编号。
求出所有事件开始的最早时间和最晚时间,
并给出关键路径。
5.设哈希函数H(k)=3*Kmod11,散列地址空间为0〜10,对关键字序列(32,13,49,24,38,21,4,12)按线性探测再散列的方法解决冲突,构造哈希表,并求出
等概率下查找成功时的平均查找长度
四、程序设计题(共2题,共20分)
1.设有两条带头结点单链表La和Lb,且表中的数据有序递增。
现要将两条单链表合并成为一条单链表Lc,并使Lc中的数据有序递减.。
试写算法来实现,并说明算法的时间复杂度。
2.写算法判断两棵二叉树是否相似。
相似的条件是:
要么它们都为空或者都只有一个根结点,要么它们的左右子树均相似。
试题参考答案
选择题1-5BACBB6-10CDCAC
填空题
1
(n+3)(n-2)/2
2FIFO
3
1175
4248
5
N-1
6
中序遍历
7
顺序存储
836
9
归并排序
10
数据基本有序
操作题
1、
3、
4、略
5、
散列地址
0
1
2
3
4
5
6
7
8
9
10
关键字
4
12
49
38
13
24
32
21
比较次数
1
1
1
2
1
2
1
2
ASLsucc=(1+1+1+2+1+2+1+2)/8=11/8
算法设计
1voidMerge(LinkedListla,Linklistlb)
{pa=La->next;pb=Lb->next;
Lc=La;
while(pa&&pb){if(pa_>data<=pb_>data)
{Lc->next=pa;Lc=pa;pa=pa->next;}else{Lc->next=pb;Lc=pb;pb=pb->next}
}
Lc->next=pa?
pa:
pb;free(Lb);
}
2statussam(BiTreeTa,BiTreeTb)//判断相似{if(!
Ta&&!
Tb)returnOK;
else{if(Ta&&!
Tb||!
Ta&&Tb)returnFalse;else{p=same(Ta->lchild,Tb->lchild);if(p)p=same(Ta->rchild,Tb->rchild);
returnp;
}
}//结束
模拟试题2
一、选择题(共10题,每题1分,共10分)
1.下面关于线性表的叙述中,错误的是哪一个?
()
A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
2.在双向链表指针p的结点前插入一个指针q的结点操作是()。
A.p->prior=q;q_>next=p;p->prior->next=q;q->prior=q;
B.p->prior=q;p->prior->next=q;q->next=p;q->prior=p->prior;
C.q->next=p;q->prior=p->prior;p->prior->next=q;p->prior=q;
D.q->prior=p->prior;q->next=q;p->prior=q;p->prior=q;
3.设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是
()。
A.XYZB.YZXC.ZXYD.ZYX
4.递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。
A.队列B.多维数组C.栈D.线性表
5.循环队列存储在数组A中,数组长度为m,则入队时的操作为()。
A.rear=rear+1B.rear=(rear+1)%(m-1)
C.rear=(rear+1)%mD.rear=(rear+1)%m
6.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000
的内存单元中,则元素A[5,5]的地址是()。
&一棵非空的二叉树的先序遍历序列与中序遍历序列正好相同,则该二叉树一定满足
1.计算机执行下面的语句时,则其复杂时间度为0()。
for(i=l;ifor(j=n;j>=1;j--)s;
2.栈的数据进出特点是。
3.在顺序表中做插入和删除操作,移动元素的个数大约等于表程长度的。
4.深度为5的完全二叉树,其结点至少有_______个,至多有_______个。
5.对一棵完全二叉树按照层次编号,编号为i(i>1)的结点的双亲结点的编号是
6.对于一棵二叉排序树做遍历,可以得到一个有序的序列。
7.己知有序表为(12,18,24,35,47,50,62,83,90,115,134)当用二分法查找时,第二次查
找即查找成功的数据是或。
&归并排序算法的时间复杂度为。
三、操作题(共5题,每题10分,共50分)
1.设一棵二叉树的先序、中序遍历序列分别为,先序遍历序列:
ABDFCEGH中序
遍历序列:
BFDAGEHC,画出这棵二叉树。
2.给定集合{1,2,3,4,5,6},试构造一棵哈夫曼树。
3.根据普利姆算法或克鲁斯卡尔算法,求它的最小生成树。
4.
5.设一数组中原有数据如下:
15,13,20,18,12,60。
试写出每一趟快速排序的结果。
四、程序设计题(共2题,共20分)
1.设有一个无序单链表,删除单链表中第i个元素,写算法实现。
2.写出希尔排序的算法。
1(n+3)(n-2)/2
32_丄
52^6
738
试题参考答案
选择题1-5BCCCD6-10ABADB
填空题
2FIFO
42二2k-1
中序遍历归并
操作题
1、
3、
A
2
A
D
F
3
A
D
3
2
A
D
3
G
B
3
G
2
D
4
C
A
D
►
C
B
3
3
G
1
2、wpl=51
散列地址
0
1
2
3
4
5
7
8
g
10
11
12
13
14
15
16
关键宇
Apr
Aug
Bee
Feb
Jan
Mar
May
Jun
丁讥
Sep
Oct
Nov
比较次数
1
2
1
1
1
i
2
4
5
2
5
6
b=
13
A
AI
A
A
A
A
A
0123456789
Apr
Aug
A
Jun
May
A
Nev
A
Jul]人
4、a:
ASLsucc=31/12
5①快速排序
算法设计
(2)b:
ASGcc=18/12
1voidMiniValue(LinkedListla)
//la是数据域为正整数且无序的单链表,本算法查找最小值结点且打印。
若最小值结点的数值是奇数,则与后继结点值交换;否则,就删除其直接后继结点。
{p=la->next;//设la是头结点的头指针,p为工作指针。
pre=p;//pre指向最小值结点,初始假定首元结点值最小。
while(p->next!
=null)//p->next是待比较的当前结点。
{if(p_>next->datadata)pre=p->next;
p=p->next;//后移指针
}
printf("最小值=%d\n”,pre->data);
if(pre->data%2!
=0)//处理奇数
if(pre->next!
=null)//若该结点没有后继,则不必交换
{t=pre->data;pre->data=pre->next->data;pre->next->data=t;}〃交换完
毕
else//处理偶数情况if(pre->next!
=null)//若最小值结点是最后一个结点,则无后继
{u=pre->next;pre->next=u->next;free(u);}〃释放后继结点空间
2voidCount(BiTreebt,int*n0,*n)//统计二叉树bt上叶子结点数n0和非叶子结点数n
{if(bt)
{if(bt->lchild==null&&bt->rchild==nuII)*n0++;//叶子结点
else*n++;//非叶结点
Count(bt->lchild,&n0,&n);
Count(bt->rchild,&n0,&n);
}}//结束Count
模拟试题3
、选择题共10题,每题1分,共10分)
1.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)
栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A.|top[1]-top[2]|=1B.top[1]+1=top[2]
C.top[1]+top[2]=mD.top[1]=top[2]
2.用链接方式存储的队列,在进行插入运算时().
A.仅修改头指针B.头、尾指针都要修改
C.仅修改尾指针D.头、尾指针可能都要修改
3.
以下数据结构中哪一个是非线性结构?
()
6.
)的数据结构。
递归过程或函数调用时,处理参数及返回地址,要用一种称为(
A.队列B.多维数组C.栈D.线性表
7.若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查
找,则查找A:
3]的比较序列的下标依次为()
B.
A.1,2,3
9,5,2,3
C.9,5,3D.9,4,2,3
8.
对n个记录的文件进行快速排序,所需要的辅助存储空间大致为
A.p->Llink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q
B.p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;
C.q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;
D.q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;序
二、填空题(共10空,每空2分,共20分)
1.若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指
针。
在这种存储结构中,n个结点的二叉树共有个指针域,其中有个指针
域是存放了地址,有个指针是空指针。
2.循环队列的引入,目的是为了克服。
3.对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点
分别有个和个。
4.已知完全二叉树的第4层有3个叶子结点,则整个二叉树最多有结点。
5.二叉树的后序遍历序列与中序遍历序列相同,则此二叉树。
6.n个顶点的连通无向图,其边的条数至少为__。
7对二叉排序树进行遍历,可以得到该二叉树所有结点构成的有序序列。
、应用题(共6题,共48分)
1有一份电文中共使用5个字符:
a,b,c,d,e,它们的出现频率依次为4,7,5,2,9。
试构造对应的Huffman树(按照左子树根结点的权小于等于右子树根结点的权的次序构造),
并求出每个字符的Huffman编码和树的带权路径长度。
2.已知一棵二叉树的前序遍历的结果是ABDFCEGH,中序遍历的结果是BFDAGEHC,试画出这棵二叉树。
3.已知一个无向图如下图所示,用Prim或者Kruskal算法生成最小树(假设以①为起点,试画出构造过程)。
20
10
4.判别以下序列是否是堆(大顶堆),如果不是,则把它调整为堆。
(12,70,33,65,
24,56,48,92,86,33)
5.设一个散列表下标从0到18,采用二次探测法解决冲突。
请将关键字{19,1,23,14,55,20,84,27,68,
11,10,77}采用哈希函数。
H(key)=key%13将各关键码映像到表中。
并给出在等概率情况下查找成功时的平均查找长度。
6.请阅读下列算法,回答问题
voidsort(r,n)
{FOR(i=2;i<=n;i++)
{x=r(i);r(O)=x;j=i-1;
WHILE(x.key{r(j+1):
=r(j);j:
=j-1;}
r(j+1)=x}}
问题一:
这是什么类型的排序算法,该排序算法稳定吗?
问题二:
设置r(O)的作用是什么?
若将WHILE语句中判断条件改为x.key<=r(j).KEY,该算
法将会有什么变化,是否还能正确工作?
三、算法题(共2题,共12分)
1.设单链表的表头指针为h,结点结构由data和next两个域构成,其中data域为字符型。
写出算法dc(h,n),判断该链表的前n个字符是否中心对称。
例如xyx,xyyx都是中心对称。
2•以下程序是二分查找的递归算法。
,请填空使之完善。
IntBinsch(ElemTypeA[],intlow,inthigh,KeyTypeK)
{
if{intmid=(low+high)/2;
)returnmid;//
if(
elseif(KreturnBinsch(A,low,mid-1,K);//
elsereturn
}
else;//
}
;}
}
试题参考答案
选择题1-5DDDDC6-10CDCBC
填空题
1i/22i2i+1
2解决空间和入队操作间的矛盾
32ee
4
查找成功,返回元素的下标
在左子表上继续查找
;//在右子表上继续查找
查找失败,返回-1
255所有结点都没有左子树
6n-1
7中序
操作题
比较次数
3
1
2
1
2
3
1
1
3
1
1
1
ASLsucc=20/12
6、
(1)此为直接插入排序算法,该算法稳定。
⑵r[O]的作用是监视哨,免去每次检测文件是否到尾,提高了排序效率。
采用x.key<=r[j].key描述算法后,算法变为不稳定排序,但能正常工作。
四算法设计
1voidCount(BiTreebt,int*n)//统计二叉树bt上叶子结点数n0和非叶子结点数n
{if(bt)
{if(bt->lchild==null&&bt->rchild!
=null||bt->lchild!
=null&&
bt->rchild==null)*n++;
Count(bt->lchild,&n0,&n);
Count(bt->rchild,&n0,&n);
}}//结束Count
2low<=high
A[mid].key==k
Binsch(A,mid+1,high,k)
return-1
returnmid