中北大学 数据结构习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《算法与数据结构》习题
第一到三章习题
选择题
1.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为(C )。

A.O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1)
2.非空的循环单链表head的尾结点p满足(A )。

A.P->next=head B.P->next=NIL C.p=NIL D.p= head
3.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:( B)。

A.p->next=s;s->next=p->next; B. s->next=p->next;p->next=s;
C.p->next=s;p->next=s->next; D. p->next=s->next; p->next=s;
4.在双向链表指针p的结点前插入一个指针q的结点操作是( C)注:双向链表的结点结构为(pre,data,next)。

A. p->pre=q;q->next=p;p->pre->next=q;q->pre=q;
B. p->pre=q;p->pre->next=q;q->next=p;q->pre=p->pre;
C. q->next=p;q->pre=p->pre;p->pre->next=q;p->pre=q;
D. q->pre=p->pre;q->next=q;p->pre=q;p->pre=q;
5.栈的特点是(①B ),队列的特点是(② A),栈和队列都是(A③ A )。

若进栈序列为1,2,3,4 则(④C )不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则(⑤ E)是一个出队列序列。

①, ②: A. 先进先出 B. 后进先出 C. 进优于出 D. 出优于进
③: A.顺序存储的线性结构 B.链式存储的线性结构
C.限制存取点的线性结构
D.限制存取点的非线性结构
④, ⑤: A. 3,2,1,4 B. 3,2,4,1 C. 4,2,3,1 D. 4,3,2,1 E. 1,2,3,4 F. 1,3,2,4
6.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i (1<=i<=n)个元素是( B )。

A.不确定
B. n-i+1
C. i
D. n-i
7.若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( D )。

A. i-j-1
B. i-j
C. j-i+1
D. 不确定的
8.若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是( C )。

A.top:=top+1; V [top]:=x B. V [top]:=x; top:=top+1
C. top:=top-1; V [top]:=x
D. V [top]:=x; top:=top-1
9.表达式a*(b+c)-d的后缀表达式是( B )。

A.abcd*+- B. abc+*d- C. abc*+d- D. -+*abcd
10. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为( D ),其中^为乘幂。

A.3,2,4,1,1;*^(+*-
B. 3,2,8;*^-
B. C. 3,2,4,2,2;*^(- D. 3,2,8;*^(-
11.循环队列存储在数组A[0..m]中,则入队时的操作为(D)。

A. rear=rear+1
B. rear=(rear+1) mod (m-1)
C. rear=(rear+1) mod m
D. rear=(rear+1)mod(m+1)
12.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(C)。

A. 6 B. 4 C. 3 D. 2
13.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?(B)
解析:
当队列非空时,可执行如下的出队操作:Q.front=(Q.front+1) % Q.queuesize;
当队列非满时,可执行如下的入队操作:Q.rear= (Q.rear+1) % Q.queuesize;
A. 1和 5
B. 2和4
C. 4和2
D. 5和1
14.循环队列A[0..m-1]存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是(A)。

A. (rear-front+m)%m
B. rear-front+1
C. rear-front-1
D. rear-front
应用题
1.在程序设计中,可采用下列三种方法实现输出和输入:
(1) 通过scanf和printf语句;
(2) 通过函数的参数显式传递;
(3) 通过全局变量隐式传递。

试讨论这三种方法的优缺点。

答:(1)用scanf和printf直接进行输入输出的好处是形象、直观,但缺点是需要对其进行格式控制,较为烦琐,如果出现错误,则会引起整个系统的崩溃。

(2)通过函数的参数传递进行输入输出,便于实现信息的隐蔽,减少出错的可能。

(3)通过全局变量的隐式传递进行输入输出最为方便,只需修改变量的值即可,但过多的全局变量使程序的维护较为困难。

2.线性表有两种存储结构:一是顺序表,二是链表。

(1)如果有 n个线性表同时并存,并且在处理过程中各表的长度会动态变化,线性表的总数也会自动地改变。

在此情况下,应选用哪种存储结构?为什么?(2)若线性表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取线性表中的元素,那么应采用哪种存储结构?为什么?
答:(1)选链式存储结构。

它可动态申请内存空间,不受表长度(即表中元素个数)的影响,插入、删除时间复杂度为O(1)
(2)选顺序存储结构。

顺序表可以随机存取,时间复杂度为O(1)
3.设pa,pb分别指向两个带头结点的有序(从小到大)单链表。

仔细阅读如下的程序,并回答问题:
(1)程序的功能。

(2) s1,s2中值的含义。

(3) pa,pb中值的含义。

答:Void exam(node*pa,node*pb)
{node*p,*p1,*p2; int s1,s2;
p1=pa->next; p2=pb->next; pa->next=null; s1=0; s2=0;
While( p1&& p2)
{ if(p1->data<p2->data)
{p=p1; p1=p1->next; s2=s2+1; delete(p) };
else if(p1->data>p2->data) p2=p2->next;
else (p1->data==p2->data)
{ p=p1; p1=p1->next; p->next= pa->next;
pa->next= p; p2= p2->next;s1=s1+1;};
}
While(p1){ p=p1; p1=p1->next; delete(p); s2=s2+1 }
}
解:本程序段功能是将pa和pb链表中的值相同的结点保留在pa链表中(pa中与pb中不同结点删除),pa是结果链表的头指针。

链表中结点值与从前逆序。

S1记结果链表中结点个数(即pa与pb中相等的元素个数)。

S2记原pa链表中删除的结点个数。

算法题
1.写出下图双链表中对换值为23和15的两个结点相互位置时修改指针的有关语句。

结点结构为:(pre,data,next)
解:
设 q=p->pre; 则
q->next=p->next; p->next->pre=q;
p->pre=q->pre;q->pre->next=p;
p->next=q; q->pre=p
2.顺序结构线性表LA与LB的结点关键字为整数。

LA与LB的元素按非递减有序,线性表空间足够大。

试给出一种高效算法,将LB中元素合到LA中,使新的LA 的元素仍保持非递减有序。

高效指最大限度的避免移动元素。

解:Void Union(seqlist LA, seqlist LB)
{ m=LA.length; n=LB.length; k=m+n-2; i=m-1;j=n-1;
while(i>=0&&j>=0)
{ if(LA.elem[i]>=LB.elem[j])
{LA.elem[k]=LA.elem[i];k=k-1;i=i-1;}
else{LA.elem[k] =LB.elem[j];k=k-1;j=j-1;}
}
while(j>=0){LA.elem[k]=LB.elem[j];k=k-1;j=j-1;}
}
3.给定一个带表头结点的单链表,设head为头指针,结点的结构为(data,next),data为整型元素,next为指针;试写出算法:按递增次序输出单链
表中各结点的数据元素,并释放结点所占的存储空间。

(要求;不允许使用数组作辅助空间)
解:void MiniDelete(LinkedList head)
{ LinkedList *pre,*p,*u;
while(head->next!=null)∥循环到仅剩头结点。

{pre=head; p=pre->next;∥p为工作指针,pre为最小值的前驱
while(p->next!=null)
{if(p->next->data<pre->next->data)pre=p;
p=p->next;} ∥记住当前最小值结点的前驱
print(%2d,pre->next->data);∥输出最小值。

u=pre->next;pre->next=u->next; free(u);∥删除最小结点
}
free(head);∥释放头结点。

}
4.试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x);
解:int LocateElem_L(LinkList &L,ElemType x)
{
int i=0;
LinkList p=L;
while(p&&p->data!=x){
p=p->next;
i++;
}
if(!p) return 0;
else return i;
}
5.已知单链表中的元素以值递增有序排列。

试写一高效的算法,删除表中所有值大于mink且小于maxk的元素,同时释放被删结点空间。

解:
void delete(LinkList &L, int mink, int maxk) {
p=L->next;
while (p && p->data<=mink)
{ pre=p; p=p->next; } //查找第一个值>mink的结点
if (p) {
while (p && p->data<maxk) p=p->next;
// 查找第一个值≥maxk 的结点
q=pre->next; pre->next=p; // 修改指针
while (q!=p)
{ s=q->next; delete q; q=s; } // 释放结点空间
}
} // delete
6.试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。

已知一个非纯集合 B,试构造一个纯集合 A,使 A中只包含 B 中所有值各不相同的数据元素
从集合 B 取出物件放入集合 A
要求集合A中同样物件不能有两件以上
因此,算法的策略应该和例2-1基本相同,差别仅在于集合 A 的初始状态是“空集”
void union(List &La, List Lb) {
InitList(La); // 构造(空的)线性表LA
La_len=ListLength(La); Lb_len=ListLength(Lb);
for (i = 1; i <= Lb_len; i++) {
GetElem(Lb, i, e); // 取Lb中第 i 个数据元素赋给 e
if (!LocateElem(La, e, equal( )) )
ListInsert(La, ++La_len, e);
// La中不存在和 e 相同的数据元素,则插入之
}//for
} // union
例如:
(2,3,3,5,6,6,6,8,12)
对集合 B 而言,
值相同的数据元素必定相邻
对集合 A 而言,
数据元素依值从小至大的顺序插入
因此,数据结构改变了,
解决问题的策略也相应要改变。

void purge(List &La, List Lb) {
InitList(LA); La_len = ListLength(La);
Lb_len =ListLength(Lb); // 求线性表的长度
for (i = 1; i <= Lb_len; i++) {
GetElem(Lb, i, e); // 取Lb中第i个数据元素赋给 e
if (ListEmpty(La) || !equal (en, e)) {
ListInsert(La, ++La_len, e);
en = e;
} // La中不存在和 e 相同的数据元素,则插入之
}//for
} // purge
第四章串习题
1.下面关于串的的叙述中,哪一个是不正确的?(B)
2.A.串是字符的有限序列 B.空串是由空格构成的串
3.C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储
4.2.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )
5.A.求子串 B.联接 C.匹配 D.求串长
6.3.串‘ababaaababaa’的next数组为( C )。

A.012345678999 B.012121111212 C.011234223456 D.0123012322345 4.字符串‘ababaabab’的nextval 为( A )
A.(0,1,0,1,0,4,1,0,1) B.(0,1,0,1,0,2,1,0,1)
C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )
5、设字符串S=‘aabaabaabaac',T=‘aabaac'
(1)给出S和T的next值和nextval值;
(2)若S作主串,T作模式串,试给出利用BF算法和KMP算法的匹配过程。

解:(1)S的next与nextval值分别为012123456789和002002002009; t的next与nextval值分别为012123和002003。

(2)利用BF算法的匹配过程:利用KMP算法的匹配过程:
第一趟匹配: aabaabaabaac 第一趟匹配:aabaabaabaac
aabaac(i=6,j=6) aabaac(i=6,j=6)
第二趟匹配: aabaabaabaac 第二趟匹配:aabaabaabaac
aa(i=3,j=2) (aa)baac
第三趟匹配: aabaabaabaac 第三趟匹配:aabaabaabaac
a(i=3,j=1) (成功) (aa)baac
第四趟匹配: aabaabaabaac
aabaac(i=9,j=6)
第五趟匹配: aabaabaabaac
aa(i=6,j=2)
第六趟匹配: aabaabaabaac
a(i=6,j=1)
第七趟匹配: aabaabaabaac
(成功) aabaac(i=13,j=7)
第6章 树和二叉树习题
选择题
1、已知一算术表达式的中缀形式为 A+B*C-D/E ,后缀形式为ABC*+DE/-,其前缀形式为( D )
A .-A+B*C/DE B. -A+B*CD/E
C .-+*ABC/DE D. -+A*BC/DE
2、设森林F 中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。

与森林F 对应的二叉树根结点的右子树上的结点个数是( D )。

A .M1
B .M1+M2
C .M3
D .M2+M3
3、有关二叉树下列说法正确的是( B )
A .二叉树的度为2
B .一棵二叉树的度可以小于2
C .二叉树中至少有一个结点的度为2
D .二叉树中任何一个结点的度都为2
4、二叉树的第I 层上最多含有结点数为( C )
A .2I
B . 2I-1-1
C . 2I-1
D .2I -1
5、一个具有1025个结点的二叉树的高h 为( C )
A .11
B .10
C .11至1025之间
D .10至1024之间 解析:具有 n 个结点的完全二叉树的深度为1log 2 n 6、高度为 K 的二叉树最大的结点数为( C )。

A .2k
B .2k-1
C .2k -1
D .2k-1-1
7、利用二叉链表存储树,则根结点的右指针是(C )。

A .指向最左孩子
B .指向最右孩子
C .空
D .非空
8、对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( C )次序的遍历实现编号。

A .先序 B. 中序 C. 后序 D. 从根开始按层次遍历
9、某二叉树中序序列为A,B,C,D,E,F,G ,后序序列为B,D,C,A,F,G,E 则先序序列是:B
A .E,G,F,A,C,D,
B B .E,A,C,B,D,G,F
C .E,A,G,C,F,B,
D D .上面的都不对
10、上题的二叉树对应的森林包括多少棵树( B )
A .l
B .2
C .3
D .概念上是错误的
11、一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( C )
A .所有的结点均无左孩子
B .所有的结点均无右孩子
C.只有一个叶子结点 D.是任意一棵二叉树
12、在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( B )
A.都不相同 B.完全相同
C.先序和中序相同,而与后序不同 D.中序和后序相同,而与先序不同13、在完全二叉树中,若一个结点是叶结点,则它没( C )。

A.左子结点 B.右子结点
C.左子结点和右子结点 D.左子结点,右子结点和兄弟结点
14、n个结点的线索二叉树上含有的线索数为( C )
A.2n B.n-l C.n+l D.n
(解析:一棵n结点树包含n-1条边,而每个结点有两个指针域即总共2n个指针,减去表示边的指向关系(即左右子树)的n-1条边,剩下n+1条边即为线索。

)
15、下述编码中哪一个不是前缀码( B )。

A.(00,01,10,11) B.(0,1,00,11)
C.(0,10,110,111) D.(1,01,000,001)
(解析:一组编码中任何一个编码均不为其他编码的前缀.避免了多义性,且缩短了报文总长)
16、在下述结论中,正确的是( D )
①只有一个结点的二叉树的度为0; ②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。

A.①②③ B.②③④ C.②④ D.①④
17、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B )
A.9 B.11 C.15 D.不确定
(解析:任意一棵二叉树,度为零的节点即叶子节点的数比度为二的节点多一。

)18、具有10个叶结点的二叉树中有(B )个度为2的结点
A.8 B.9 C.10 D.1l
19、一棵完全二叉树上有1001个结点,其中叶子结点的个数是( D )(1023是满二叉树,有512片叶子。

1001比1023少22个结点,所以有512-22+22/2=501片叶子。

511是满二叉树,有256片叶子。

1001比511多490个结点,所以有256+490-(490+1)/2=501片叶子。

所以答案就是501了。


A. 250 B. 500 C.254 D.501
20、有n个叶子的哈夫曼树的结点总数为( D )。

A.不确定 B.2n C.2n+1 D.2n-1
21、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历: HFIEJKG 。

该二叉树根的右子树的根是( C )。

A、 E
B、 F
C、 G
D、 H
22、设森林F对应的二叉树为B,它有m个结点,B的根为p,p的右子树结点个数为n,森林F中第一棵树的结点个数是( A )
A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定
23、用一维数组存储二叉树时,总是以(D)遍历顺序存储结点
A.先序 B. 中序 C. 后序 D. 按层次遍历
24、对一棵二叉树进行层次遍历时,应借助于一个(D)。

A.顺序表 B. 数组 C. 栈 D.队列
25、某二叉树的先序序列和后序序列正好相反,则该二叉树一定是(C)的二叉树。

A.空或只有一个结点 B.任一结点无左子树
C.高度等于其结点数 D.任一结点无右子树
26、设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为( D )
A.5 B.6 C.7 D.8
(设度为0的结点数为n0,度为1的结点数为n1,度为2的结点数为n2,度为3的结点数为n3,度为4的结点数为n4,那么这棵树总的结点数为n0+n1+n2+n3+n4;又因为树中的每个结点(除了根结点外)都有一个指针指向它,那么这棵树总的结点数为总的指针数加上1;
总的指针数=1*n1+2*n2+3*n3+4*n4;故有:
1+1*n1+2*n2+3*n3+4*n4=n0+n1+n2+n3+n4;从而有
n0=1+n2+2*n3+3*n4=1+2+2*1+3*1=8;)
27、将一棵树t 转换为孩子—兄弟链表表示的二叉树h,则t的后根序遍历是h 的( B )
A.先序遍历 B.中序遍历 C.后序遍历
28、某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号为1,2,… ,n,且有如下性质:T中任一结点V,其编号等于左子树上的最小编号减1,而V的右子树的结点中,其最小编号等于V左子树上结点的最大编号加1。

这时是按( B )编号的。

A.中序遍历序列
B.先序遍历序列
C.后序遍历序列
D.层次顺序
应用题
1、从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。

答:树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(森林的特例)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。

树和二叉树的区别有:一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下,也必须指出是左子树还是右子树,树无此限制。

2、试找出满足下列条件的二叉树
1)先序序列与后序序列相同;2)中序序列与后序序列相同;3)先序序列与中序序列相同;
1)、既不含左子树,也不含右子树的二叉树。

2)、不含右子树的二叉树。

3)、不含左子树的二叉树。

3、已知一棵度为k 的树中有n 1个度为1的结点,n 2个度为2的结点,…,n k 个度为k 的结点,问该树中有多少个叶子结点?
解:根据树的定义,在一颗树中,除树根结点外,每个结点有且仅有一个前驱结点,也就是说,每个结点与指向它的一个分支一一对应,所以除树根结点之外的结点树等于所有结点的分支数,即度数,从而可得树中的结点数等于所有结点的度数加1。

总结点数为
而度为0的结点数就应为总结点数减去度不为0的结点数的总和,即
4、将算术表达式 ((a+b)+c*(d+e)+f)*(g+h)转化为二叉树。

解析:用一维数组存储二叉树时,总是以层次遍历顺序存储结点 答:HIDJKEBLFGCA
6、对下图所示二叉树分别按先序、中序﹑后序遍历,给出相应的结点序列,同时给二叉树加上中序线索。

(1)先序序列:ABDEHCFG (2)中序序列:DHEBAFCG (3)后序序列:HEDBFGCA
k
kn n n n +++++...321321∑
=-+
=++++-+++++=k i i k k n i n n n n kn n n n n 13213210)1(1)...( (321)
A
B
C
D
F
G
E
H
null
null
7、设一棵二叉树的先序、中序遍历序列分别为先序遍历序列: ABDFCEGH 中序遍历序列:BFDAGEHC (1)画出这棵二叉树。

(2)将这棵二叉树转换成对应的树(或森林)
A
E
D C
B
H
G
F
8、将森林转换成对应的二叉树
A
B
F
D
C
E
H
G
E
D
F B A
C
N
P
G
H
J
M O
L
I
K
H G D
A
C
J
I
B
F
E
M
K
L
9、一棵二叉树的先序、中序、后序序列如下,其中一部分未标出,请构造出该二叉树。

先序序列 :_ _ C D E _ G H I _ K 中序序列 :C B _ _ F A _ J K I G 后序序列 :_ E F D B _ J I H _ A
10、设二叉树BT 的存储结构如下:
指针域,data 为结点的数据域。

试完成下列各题: (l )画出二叉树BT 的逻辑结构;
(2)写出按先序、中序、后序遍历该二叉树所得到的结点序列; (3)画出二叉树的后序线索树 。

先序序列:ABCEDFHGIJ 中序序列: E C B H F D J I G A 后序序列: ECHFJIGDBA
A
B
C
E
D
G
I
H
F J
K
11、给定集合{15,3,14,2,6,9,16,17},(1) 构造相应的huffman 树,(2) 计算它的带权路径长度,(3) 写出它的huffman 编码。

编码为:
15:111, 3:10101, 14:110, 2:10100 6:1011 9:100 16:00 17:01
12、已知下列字符A 、B 、C 、D 、E 、F 、G 的权值分别为3、12、7、4、2、8,11,
第七章图习题
选择题
1、设无向图的顶点个数为n,则该图最多有( B )条边。

A.n-1 B.n(n-1)/2 C. n(n+1)/2 D.0 E.n2
2、一个n个顶点的连通无向图,其边的个数至少为( A )。

A.n-1 B.n C.n+1 D.nlogn;
3、要连通具有n个顶点的有向图,至少需要( B )条边。

A.n-l B.n C.n+l D.2n
4、一个有n个顶点的图,最少有( B )个连通分量,最多有(D )个连
通分量。

A.0 B.1 C.n-1 D.n
5、在一个无向图中,所有顶点的度数之和等于所有边数( B )倍,在一个
有向图中,所有顶点的入度之和等于所有顶点出度之和的( C )倍。

A.1/2 B.2 C.1 D.4
6、下列哪一种图的邻接矩阵是对称矩阵?( B )
A.有向图 B.无向图 C.AOV网 D.AOE网
7、无向图G=(V,E),其中:V={a,b,c,d,e,f},
E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)},对该图进行深度优先遍历,得到的顶点序列正确的是( D )。

A.a,b,e,c,d,f B.a,c,f,e,b,d
C.a,e,b,c,f,d D.a,e,d,f,c,b
8、图中给出由7个顶点组成的无向图。

从顶点1出发,对它进行深度优先遍历
得到的序列是( ① C),而进行广度优先遍历得到的顶点序列是(②C )。

①.A.1354267 B.1347652
C.1534276 D.1247653
②.A.1534267 B.1726453
C.l354276 D.1247653
9、当各边上的权值( A )时,BFS(广度优先)算法可用来解决单源最短路径问题。

A.均相等 B.均互不相等 C.不一定相等
10、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},
E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>,<V3,V6>,
<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是( A)。

A.V1,V3,V4,V6,V2,V5,V7 B.V1,V3,V2,V6,V4,V5,V7
C.V1,V3,V4,V5,V2,V6,V7 D.V1,V2,V5,V3,V4,V6,V7
11、一个有向无环图的拓扑排序序列( B )是唯一的。

A.一定 B.不一定
12、在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是( D )。

A.G中有弧<Vi,Vj> B.G中有一条从Vi到Vj的路径
C.G中没有弧<Vi,Vj> D.G中有一条从Vj到Vi的路径
13、关键路径是事件结点网络中(A )。

A.从源点到汇点的最长路径 B.从源点到汇点的最短路径
C.最长回路 D.最短回路
14、下列关于AOE网的叙述中,不正确的是( B )。

A.关键活动不按期完成就会影响整个工程的完成时间
B.任何一个关键活动提前完成,那么整个工程将会提前完成
C.所有的关键活动提前完成,那么整个工程将会提前完成
D.某些关键活动提前完成,那么整个工程将会提前完成
填空题
1、判断一个无向图是一棵树的条件是有(n个顶点,n-1条边的连通图)
2、具有10个顶点的无向图,边的总数最多为(45)。

3、BFS遍历和DFS遍历图的不同之处在于(访问的次序不同),反映在数据结
构上的差别是(深度优先遍历采用递归算法,广度优先遍历采用队列算法) 4、已知一无向图G=(V,E),其中V={a,b,c,d,e }
E={(a,b),(a,d),(a,c),(d,c),(b,e)}现用某一种图遍历方法从顶点a开始遍历图,得到的序列为abecd,则采用的是(深度优先)遍历方法。

5、一无向图G(V,E),其中V(G)={1,2,3,4,5,6,7},E(G)={(1,2),(1,3),
(2,4),(2,5),(3,6),(3,7),(6,7),(5,1)},对该图从顶点3开始进行遍历,去掉遍历中未走过的边,得一生成树G’(V,E’),V(G’)=V(G),E(G’)={(1,3),(3,6),(7,3),(1,2),(1,5),(2,4)},则采用的遍历方
法是(广度优先遍历)
6、为了实现图的广度优先搜索,除了一个标志数组标志已访问的图的结点外,
还需(队列)存放被访问的结点以实现遍历。

7、构造连通网最小生成树的两个典型算法是(Prim/普里姆算法和kruskal/克
鲁斯卡尔算法)。

8、Prim(普里姆)算法适用于求(偏稠密)网的最小生成树;kruskal(克鲁
斯卡尔)算法适用于求(偏稀疏)网的最小生成树。

9、有一个用于n个顶点连通带权无向图的算法描述如下:
10、(1)设集合T1与T2,初始均为空;
11、(2)在连通图上任选一点加入T1;
12、(3)以下步骤重复n-1次:
13、 a.在i属于T1,j不属于T1的边中选最小权的边;
14、 b.该边加入T2。

上述算法完成后,T2中共有(n-1)条边,该算法称(Prim)算法,T2中的边构成图的(最小生成边)。

10、有向图G可拓扑排序的判别条件是(图中不存在环)。

11、Dijkstra最短路径算法从源点到其余各顶点的最短路径的路径长度按(递增)次序依次产生,该算法弧上的权出现(负值)情况时,不能正确产生最短路径。

12、有向图G=(V,E),其中 V(G)={0,1,2,3,4,5},用<a,b,d>三元组表示弧<a,b>及弧上的权 d.E(G)为{<0,5,100>,<0,2,10><1,2,5><0,4,30><4,5,60><3,5,10><2,3,50><4,3,20>},则从源点0到顶点3的最短路径长度是(50),经过的中间顶点是(4)。

图去掉有向弧看成无向图则对应的最小生成树的边权之和为(75)。

13、AOV网中,顶点表示(事件),边表示(各事件的优先关系)。

AOE网中,顶点表示(事件),边表示(活动)。

应用题
1、设有数据逻辑结构为:
B = (K, R), K = {k1, k2, …, k9}
R={<k1, k3>, <k1, k8>, <k2, k3>,<k2, k4>, <k2, k5>, <k3, k9>,<k5, k6>, <k8, k9>, <k9, k7>, <k4, k7>, <k4, k6>}
(1).画出这个逻辑结构的图示。

(2).相对于关系r, 指出所有的开始顶点和终端顶点。

(3).分别对关系r中的开始顶点,举出一个拓扑序列的例子。

(4).分别画出该逻辑结构的正向邻接表和逆向邻接表。

(2)开始顶点:K1,K2;
终端顶点:K6,K7;
(3)拓扑序列
K1,K2,K3,K4,K5,K6,K8,K9,K7;
K2,K1,K3,K4,K5,K6,K8,K9,K7;
2、已知某图的邻接表为
(1).写出此邻接表对应的邻接矩阵;
(2).写出由v1开始的深度优先遍历的序列;
(3).写出由v1开始的深度优先的生成树;
(4).写出由v1开始的广度优先遍历的序列;
(5).写出由v1开始的广度优先的生成树;
v1
v2 v3 v4 v5 v61
2
1
1
2

3





(2)V1V2V5V3V4V6 (3)
K9
K1
K3
K8K7
K5
K2
K6
(4)V1V2V3V4V5V6
(5)
3、如下所示的连通图,请画出:
(1).以顶点①为根的深度优先生成树;
(2).如果有关节点,请找出所有的关节点。

(1)
(2)关节点有3,1,8,7,2
4、对图示的AOE网络,计算各活动弧的ee(Vi)和el(Vi)的函数值,各事件(顶点)的ve(Vj)和vl (Vj)的函数值,列出各条关键路径。

课堂练习题
1、试写出用克鲁斯卡尔(Kruskal)算法构造下图的一棵最小生成树的过程。

(1) (2)
2、按Prim 算法求无向加权图的最小生成树,并给出构造最小生成树过程中辅助数组的各分量值
3、试利用Dijkstra 算法求下图中从顶
点a 到其他个顶点间的最短路径,
写出执行算法过程中各步的状态
第九、十章 查找和内部排序 习题
1、对线性表进行二分查找时,要求线性表必须( B ) A.以顺序方式存储
B.以顺序方式存储,且数据元素有序
C.以链接方式存储
D.以链接方式存储,且数据元素有序
2、用二分(折半)查找表的元素的速度比用直接插入法( D ) A 必然快 B. 必然慢 C. 相等 D. 不能确定
3、二叉查找树的查找效率与二叉树的( C)有关, 在 (C)时其查找效率最低 (1): A. 高度 B. 结点的多少 C. 树型 D. 结点的位置
(2): A. 结点太多 B. 完全二叉树 C. 呈单枝树 D. 结点太复杂。

4、设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散列函数为H (key )=key MOD 11,散列地址为1的链中有( B )个记录。

A .1 B. 2 C. 3 D. 4 5、下面关于哈希(Hash)查找的说法正确的是( C )
A .哈希函数构造的越复杂越好,因为这样随机性好,冲突小
B .除留余数法是所有哈希函数中最好的
C .不存在特别好与坏的哈希函数,要视情况而定
D .若需在哈希表中删去一个元素,不管用何种方法解决冲突都只要简单的将该元素删去即可 6、设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是( D )
A .8
B .3
C .5
D .9
b
g d e
a f c 1228
9
4510
2
4
6
15
7、散列表的地址区间为0-17,散列函数为H(K)=K mod 17。

采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。

8、(1)元素59存放在散列表中的地址是( D )。

9、 A. 8 B. 9 C. 10 D. 11
10、(2)存放元素59需要搜索的次数是( B )。

11、 A. 2 B. 3 C. 4 D. 5
12、8、下面给出的四种排序法中( D )排序法是不稳定性排序法
13、 A、插入 B. 冒泡 C. 二路归并 D. 堆
14、9、如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。

( C )就是不稳定的排序方法。

15、A.起泡排序 B.归并排序 C.简单选择排序 D.直接插入排序
解析:快速排序,简单选择排序,堆排序是不稳定排序方法。

10、数据序列(2,1,4,9,8,10,6,20)只能是下列排序算法中的( A )的两趟排序后的结果。

A、快速排序 B. 冒泡排序 C. 选择排序 D. 插入排序
11、对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1) 84 47 25 15 21 (2) 15 47 25 84 21 (3) 15 21 25 84 47 (4) 15 21 25 47 84
则采用的排序是 ( A )。

A、选择 B. 冒泡 C. 快速 D. 插入
12、下列排序算法中( B )不能保证每趟排序至少能将一个元素放到其最终的位置上。

A.快速排序
B. shell排序
C. 堆排序
D.冒泡排序
13、一组记录的关键字为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为( C )。

A.(38,40,46,56,79,84) B. (40,38,46,79,56,84)
C.(40,38,46,56,79,84) D. (40,38,46,84,56,79)
解析:快速排序方法的基本思想是任取待排序对象序列中的某个对象 (例如取第一个对象) 作为枢轴(pivot),按照该对象的关键字大小,将整个对象序列划分为左右两个子序列:
左侧子序列中所有对象的关键字都小于或等于枢轴对象的关键字
右侧子序列中所有对象的关键字都大于枢轴对象的关键字
14、就平均性能而言,目前最好的内排序方法是( D )排序法。

冒泡 B. 希尔插入 C. 交换 D. 快速
15、若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行( C )次比较。

3 B. 10 C. 15 D. 25
16、下列四个序列中,哪一个是堆( C )。

A. 75,65,30,15,25,45,20,10
B. 75,65,45,10,30,25,20,15
C. 75,45,65,30,15,25,20,10
D. 75,45,65,10,25,30,20,15
解析:堆:将一个序列表示成一棵完全二叉树,若树中的每个非终端结点的值都不大于(或不小于)它的左右孩子结点的值,则该序列为堆,序列中的第。

相关文档
最新文档