视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据结构复习题目及答案
2025-09-29 16:36:34 责编:小OO
文档
《数据结构-C语言版》

第一章  绪论

单项选择题

1.在数据结构中,数据的基本单位是_____ ____。

A. 数据项 数据类型 数据元素 数据变量 

2.数据结构中数据元素之间的逻辑关系被称为__ ____。 

A. 数据的存储结构 数据的基本操作 程序的算法 数据的逻辑结构

3.在数据结构中,与所使用计算机无关的是数据的____ ___。 

A. 存储结构 逻辑和物理结构 逻辑结构 物理结构 

4.在链式存储结构中,数据之间的关系是通过____ ____体现的。

A. 数据在内存的相对位置 指示数据元素的指针

C. 数据的存储地址 指针

5.计算算法的时间复杂度是属于一种____ ___。

A. 事前统计的方法 事前分析估算的方法      

C. 事后统计的方法 事后分析估算的方法

6.在对算法的时间复杂度进行估计的时候,下列最佳的时间复杂度是____ __。 

 A. n2       B. nlogn      C. n        D. logn 

7.设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为____ ___。

A. O(O(O(O(nlog2n)

CDCBBDD

第二章  线性表

单项选择题

1.链表不具有的特点是____ ____。 

A. 可随机访问任一元素                 B. 插入和删除时不需要移动元素

C. 不必事先估计存储空间               D. 所需空间与线性表的长度正比 

2.设顺序表的每个元素占8个存储单元。第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为            。

A. 139            B. 140           C. 147              D. 148

3.在线性链表存储结构下,插入操作算法            。

A. 需要判断是否表满        B. 需要判断是否表空 

C. 不需要判断表满          D. 需要判断是否表空和表满 

4.在一个单链表中,若删除p所指结点的后继结点,则执行            。 

A. p->next = p->next->next; B. p->next = p->next;

C. p = p->next->next; D. p = p->next; p->next = p->next->next;

5.将长度为n的单链表接在长度为m的单链表之后的算法时间复杂度为           。 

A. O(n)       B. O(1)      C. O(m)         D. O(m+n)

6.需要预分较大空间,插入和删除不需要移动元素的线性表,其存储结构是         。 

A. 单链表        B. 静态链表        C. 线性链表          D. 顺序存储方式

ACCABB

填空题

1.在带表头结点的单链表中,当删除某一指定结点时,必须找到该结点的_____结点。

2.在单链表中,指针p所指结点为最后一个结点的条件是       。

3.将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是            。 

4.在一个长度为n的顺序表中第i个元素(1≤i≤n)之前插入一个元素时,需向后移动元素的个数是        。

5.在长度为n的顺序表中插入一个元素的时间复杂度为         。

1前驱  

2 p->next==NULL

3.1

4.n-i+1

5.O(n)

例题解析

【例2-1】 编写一个算法将一个单链表逆转,要求在原表上进行,不允许重新建链表。 

解:该算法可以在遍历原表的时候将各结点的指针逆转,从原表的第一个结点开始,头结点的指针在最后修改成指向原表的最后一个结点,即新表的第一个结点。实现本题功能的函数如下:

  void inverse(Lnode *h)

{s=h->next;

    if(s==NULL)  return;

  q=NULL;

    p=s;

  while(p!=NULL)

{ p=p->next;

     s->next=q;                        /*逆转指针*/

     q=s;                               /*指针前移*/

     s=p;

    }

  h->next=q;                          /*头指针h的后继是p*/

}

【例2-2】 编写一算法将两个按元素值递增有序排列的单链表A和B归并成一个按元素值递增有序排列的单链表C。

解:对于两个或两个以上的,结点按元素值有序排列的单链表进行操作时,应采用“指针平行移动,依次扫描完成”的方法。从两表的第一个结点开始顺链表逐个将对应数据元素进行比较,复制小的并插入c表尾。当两表中之一已到表尾,则复制另一个链表的剩余部分,插入到c表尾。设pa、pb分别指向两表当前结点,p指向c表的当前表尾结点。若设A中当前所指的元素为a,B中当前所指的元素为b,则当前应插入到 C中的元素c为

     例如:A=(3,5,8,11)

           B=(2,6,8,9,11,15,20)

则    C=(2,3,5,6,8,8,9,11,11,15,20)

实现本题功能的函数如下:

Lnode *hb(Lnode *pa,Lnode *pb)

{Lnode *p,*q,*pc;

 pc=(Lnode*)malloc(sizeof(Lnode));          /*建立表c 的头结点pc*/

 p=pc;                                   /*p指向C表头结点*/

 while(pa!=NULL&&pb!=NULL)

     {

           q=(Lnode*)malloc(sizeof(Lnode));    /*建立新结点q*/

      if(pb->datadata)   /*比较A、B表中当前结点的数据域值的大小*/

       {q->data=pb->data;         /*B中结点值小,将其值赋给q的数据域*/

        pb=pb->next;                               /*B中指针pb后移*/

        }

      else

       {q->data=pa->data;          /*相反,将A结点值赋给q的数据域*/

        pa=pa->next;                            /*A中指针pa后移*/

        }

p->next=q;                                 /*将q接在p的后面*/

p=q;                                     /*p始终指向C表当前尾结点*/

}

while(pa!=NULL)             /*若表A比B长,将A余下的结点链在C表尾*/

    {q=(Lnode*)malloc(sizeof(Lnode));

q->data=pa->data;

pa=pa->next;

p->next=q;

     p=q;

  }

while(pb!=NULL)           /*若表B比A长,将B余下的结点链在C表尾*/

    {q=(Lnode*)malloc(sizeof(Lnode));

q->data=pb->data;

pb=pb->next;

p->next=q;

     p=q;

    }

p->next=NULL;

p=pc;                             /*p指向表C的头结点pc*/

pc=p->next;                      /*改变指针状态,使pc指向p的后继*/

free(p);                      /*释放p空间*/

return (pc);       

}

此算法的时间复杂度为O(m+n),其中m,n分别是两个被合并表的表长。

第三章栈和队列

单项选择题

1.在初始为空的堆栈中依次插入元素f,e,d,c,b,a以后,连续进行了三次删除操作,此时栈顶元素是            。

   A. c          B.d     C.b            D. e

2.若某堆栈的输入序列是1,2,3,...,n,输出序列的第一个元素为n,则第i个输出元素为            。

A. i               B. n-i       C. n-i+1              D.  哪个元素无所谓

3.向一个栈顶指针为h的带头结点链栈中插入指针s所指的结点时,应执行            。

4.一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是            。

 A. edcba              B. decba   C. dceab              D. abcde

5.栈和队列的共同点是            。

A.  都是先进后出 都是先进先出 

C.  只允许在端点处插入和删除元素 没有共同点

6.对于循环队列            。

A. 无法判断队列是否为空 无法判断队列是否为满   

C. 队列不可能满 以上说法都不是

7. 若用一个大小为6的数组来实现循环队列,且当前队尾指针rear和队头指针front的值分别为0和3。当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为    。

A. 1和5和4和2和1

8. 判定一个循环队列 QU(最多元素为 m0)为满队列的条件是            。

9.判定一个循环队列 QU(最多元素为 m0)为空的条件是            。

BCDCCDACA

填空题

1.在求表达式值的算符优先算法中使用的主要数据结构是        。

2.设有一个空栈,现输入序列为1,2,3,4,5。经过push,push,pop,push,pop,push,pop,push后,输出序列是          。

3.仅允许在同一端进行插入和删除的线性表称为          。

7.在顺序栈s中,栈为空的条件是          ,栈为满的条件是_____。

4.用S表示入栈操作,X表示出栈操作,若元素入栈顺序为1234,为了得到1342出栈顺序,相应的S、X操作串为         。

5.用一个大小为1000的数组来实现循环队列,当前rear和front的值分别为0和994,若要达到队满的条件,还需要继续入队的元素个数是            。

1.栈

2. 2 3 4

3.栈

4.s.top==s.base,    s.top-s.base>=s.stacksize    SXSSXSXX

5.993

例题解析

【例3-1】 编程实现:用除法把十进制数转换成二进制数。 

解:算法思想:用初始十进制数除以2把余数记录下来并且若商不为0则再用商去除以2直到商为0,这时把所有的余数按出现的逆序排列起来(先出现的余数排在后面,后出现的余数排在前面)就得到了相应的二进制数,如把十进制数35转换成二进制数的过程如图3-1所示。

    

图3-1 十进制数转换成二进制数的过程

由题意可知,我们可以用一个栈来保存所有的余数,当商为0时则让栈里的所有余数出栈则可以得到正确的二进制数,算法可描述如下:

void conversion(){

Stack S; 

int n; 

InitStack(&S); 

printf("Input a number to convert:\\n");

scanf("%d",&n); 

if(n<0){

printf("\\nThe number must be over 0."); 

return;

}

if(n==0) Push(S,0); 

while(n!=0){ 

Push(S,n%2); 

n=n/2; 

printf("the result is: "); 

while(!StackEmpty(*S)){ 

printf("%d", Pop(S));

}

}

}

第四章 串

单项选择题

1.串是一种特殊的线性表,其特殊性体现在            。

A. 可以顺序存储 数据元素是一个字符 

C. 可以链接存储 数据元素可以是多个字符 

2.设有两个串p和q,求q在p中首次出现的位置的运算称作            。 

A.  连接 模式匹配 求子串 求串长

3.串是一个      B      的序列。

A. 不少于一个字母     B. 有限个字符     C. 不少于一个字符      D. 空格或字母 

4.已知串s=’ABCDEFGH’,则s的所有不同子串的个数为           。

   A. 8        B. 9       C. 36       D. 37

BBBD

填空题

1.两个串相等的充分必要条件是     。

2.空格串是      ,其长度等于       。

3.在串S=’tuition’中,以t为首字符且值不相同的子串有         个。

4. 使用“求子串”substring(S,pos,len)和“联接”concat(S1,S2)的串操作,可从串s=’conduction’中的字符得到串t=’cont’,则求t的串表达式为      。

1.两个串的长度相等且对应位置的字符相同

2.由一个或多个空格字符组成的串 其包含的空格个数

3.  10 

4.  concat(subString(s,1,3),substring(s,7,1))

第五章 数组与广义表

单项选择题

1.常对数组进行的两种操作是            。

A. 建立与删除 索引和修改 查找和修改 查找与索引 

2.假设8行10列的二维数组a[1..8, 1..10]分别以行序为主序和以列序为主序顺序存储时,其首地址相同,那么以行序为主序时元素a[3][5]的地址与以列序为主序时元素            ____ ___的地址相同。

A. a[5][3]        B. a[8][3]       C. a[1][4]          D. 答案A、B、C均不对 

3.将一个A[1..100,1..100]的三对角矩阵以行序为主序存入一维数组B[1..298]中,元素A[66,65]在B数组中的位置k等于____ ___。

A. 198     B. 197     C. 196     D. 195

4.稀疏矩阵一般的压缩存储方法有两种,即            。 

A. 二维数组和三维数组 三元组和散列

C. 三元组和十字链表 散列和十字链表

5. 一个非空广义表的表头____  ___。

 不可能是子表 只能是子表 只能是原子 可以是原子或子表

6. 设head(L)、tail(L)分别为取广义表表头、表尾操作,则从广义表L=((x,y,z),a,(u,v,w))中取出原子u的运算为____ ___。

   C. head(tail(head(tail(L))))         D. head(head(tail(tail(L))))

7.广义表(a,((b,(c,d,(e,f))),g))的深度为____ ___。

   A. 3         B. 4          C. 5            D. 6

CDDCDDC

填空题

1.将下三角矩阵A[1..8,1..8]的下三角部分逐行地存储到起始地址为1000的内存单元中,已知每个元素占四个单元,则元素A[7,5]的地址为            。 

2.二维数组A[0..9,0..19]采用行序为主方式存储,每个元素占一个存储单元,并且元素A[0,0]的存储地址是200,则元素A[6,12]的地址是            。 

3.二维数组A[10..20,5..10]采用行序为主方式存储,每个元素占4个存储单元,并且元素A[10,5]的存储地址是1000,则元素A[18,9]的地址是            。

4.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主序存储,且元素A[0,0]地址为1),则元素A[8,5]的地址是            。

5.设HAED[p]为求广义表p的表头函数,TAIL[p]为求广义表p的表尾函数,其中[]

 是函数的符号,给出下列广义表的运算结果: 

HEAD[(a,b,c)]的结果是        。 

TAIL[(a,b,c)]的结果是        。 

HEAD[((a),(b))]的结果是       。 

TAIL[((a),(b))]的结果是        。 

HEAD[TAIL[(a,b,c)]的结果是        。

TAIL[HEAD((a,b),(c,d))]的结果是       。 

HEAD[HEAD[(a,b),(c,d))]]的结果是        。 

TAIL[TAIL[(a,(c,d))]]的结果是     。 

①a;②(b,c);③(a);④((b));⑤b;⑥(b);⑦a;⑧( )

1.  1100

2. 332

3.    1208

4.     42 

5.  ① ② ③ ④ ⑤ ⑥ ⑦ ⑧

第6章 树和二叉树

选择题

1.以下说法错误的是         。

A.树形结构的特点是一个结点可以有多个直接前趋

B.线性结构中的一个结点至多只有一个直接后继

C.树形结构可以表达(组织)更复杂的数据

D.树(及一切树形结构)是一种"分支层次"结构

2.  如图6-2所示的 4 棵二叉树中,          不是完全二叉树。

图6-2  4 棵二叉树

3.  以下说法错误的是          。

A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达

B.在三叉链表上,二叉树的求双亲运算很容易实现

C.在二叉链表上,求根,求左、右孩子等很容易实现

D.在二叉链表上,求双亲运算的时间性能很好

4. 如图6-3所示的 4 棵二叉树,         是平衡二叉树。

图6-3  4 棵二叉树

5. 如图6-4所示二叉树的中序遍历序列是          。 

A. abcdgef      B. dfebagc     C. dbaefcg        D. defbagc

图6-4  1 棵二叉树

6.  某二叉树的前序遍历结点访问顺序是 abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是          。 

A. bdgcefha        B. gdbecfha     C. bdgaechf       D. gdbehfca 

7.  将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号为41的双亲结点编号为         。

A.42     B.40        C.21        D.20

8.  一棵二叉树如图6-5所示,其后序遍历的序列为          。 

A. abdgcefh       B. dgbaechf      C. gdbehfca         D. abcdefgh

图6-5  1 棵二叉树

9.  深度为 5 的二叉树至多有         个结点。

A. 16       B. 32     C.31      D.10 

10. 设深度为k的二叉树上只有度为0和度为2的节点,则这类二叉树上所含结点总数至少有      个。

A.kB.2C.2D.2k+1

11. 对含有      B    个结点的非空二叉树,采用任何一种遍历方式,其结点访问序列均相同。

A.0    B.1     C.2       D.不存在这样的二叉树

6-10     DDCCC

填空题

1.  有一棵树如图6-7 所示,回答下面的问题:

图6-7  1 棵二叉树

(1)这棵树的根结点是        ; 

(2)这棵树的叶子结点是        ; 

(3)结点 k3 的度是        ; 

(4)这棵树的度为        ; 

(5)这棵树的深度是        ; 

(6)结点 k3 的孩子是        ; 

(7)结点 k3 的双亲结点是        。 

2. 深度为 k 的完全二叉树至少有        个结点,至多有        个结点,若按自上而下,从左到右次序给结点编号(从 1 开始),则编号最小的叶子结点的编号是      。

答:①2  ②2-1  ③2+1

3.  一棵二叉树的第 i(i≥1)层最多有       个结点;一棵有 n(n>0)个结点的满二叉树共有        个叶子和        个非终端结点。 

答:①  2    ②     ③ 

4.  具有n个结点的完全二叉树的深度为          。

5. 哈夫曼树是带权路径度_______的树,通常权值较大的结点离根_______。

①最短  ②较近

6.在________遍历二叉树的序列中,任何结点的子树上的所有结点,都是直接跟在该结点之后。

1.答:①  k1    ②  k2 k5 k7 k4    ③  2    ④  3    ⑤  4    ⑥  k5,k6    ⑦  k1

2.   ① ② ③

3.   ① ② ③

4.floor(log2n)+1

5.   ① ② 

6. 先根

例题解析

【例6-1】由如图 6-1 所示的二叉树,回答以下问题。 

(1)其中序遍历序列为    ①    ; 

(2)其前序遍历序列为    ②    ; 

(3)其后序遍历序列为    ③    ; 

(4)该二叉树的中序线索二叉树为    ④    ; 

(5)该二叉树的后序线索二叉树为    ⑤    ; 

(6)该二叉树对应的森林是    ⑥    。

图6-1  1棵二叉树

解:

①  中序遍历序列为dgbaechif      ②  前序遍历序列为abdgcefhi    

③  后序遍历序列为gdbeihfca      ④  该二叉树的中序线索二叉树如图 6.1.1(a)所示    ⑤  该二叉树的后序线索二叉树如图6-1-1 (b)所示    

⑥  该二叉树对应的森林如图6-1-2所示

图6-1-1  二叉树的中序线索二叉树和后序线索二叉树

图6-1-2 二叉树对应的森林

1.二叉树结点数值采用顺序存储结构,如表6-2所示。

表6-2  二叉树的顺序存储结构

1234567891011121314151617181920
eafdgcjhib
(1)画出二叉树表示; 

(2)写出前序遍历,中序遍历和后序遍历的结果; 

(3)写出结点值 c 的父结点,其左、右孩子。

解: 

(1)该二叉树如图 6-9 所示。

图 6-9  1棵二叉树

(2)本题二叉树的各种遍历结果如下:           

前序遍历:eadcbjfghi             

中序遍历:abcdjefhgi             

后序遍历:bcjdahigfa   

(3)c 的父结点为 d,左孩子为 j,没有右孩子。 

2.有一份电文使用 5 个字符:a、b、c、d、e,它们的出现频率依次为 4、7、5、2、9,试画出对应的哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),并求出每个字符的哈夫曼编码。 

解:依题意,本题对应的哈夫曼树如图 6-15 所示。

各字符对应的哈夫曼编码如下:         

a:001         

b:10         

c:01         

d:000         

e:11

图6-15 一棵哈夫曼树

3.设给定权集 w={2,3,4,7,8,9},试构造关于 w 的一棵哈夫曼树,并求其加权路径长度 WPL。 

解:本题的哈夫曼树如图 6-16 所示。

图6-16 一棵哈夫曼树

其加权路径长度 WPL=7×2+8×2+4×3+2×4+3×4+9×2=80 

4. 已知一棵二叉树的中序序列为 cbedahgijf,后序序列为cedbhjigfa,画出该二叉树的先序线索二叉树。

解:由后序序列的最后一个结点 a 可推出该二叉树的树根为 a,由中序序列可推出 a的左子树由 cbed 组成,右子树由 hgijf 组成,又由 cbed 在后序序列中的顺序可推出该子树的根结点为 b,其左子树只有一个结点 c,右子树由 ed 组成,显然这里的 e 是根结点,其右子树为结点 d,这样可得到根结点 a 的左子树的先序序列为:bcde;再依次推出右子树的先序序列为:fghij。因此该二叉树如图 6-17所示。

图 6-17 二叉树

设二叉树的先序线索链表如图 6-18所示。

图 6-18 二叉树的先序线索链表

第7章 图

单项选择题

1.在一个图中,所有顶点的度数之和等于所有边数的          倍。

A. 1/2               B. 1         C. 2                D. 4 

2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的     B     倍。 

A. 1/2               B. 1         C. 2                D. 4 

3.具有 4 个顶点的无向完全图有          条边。

A. 6                B. 12         C. 16               D. 20 

4.具有 6 个顶点的无向图至少应有          条边才能确保是一个连通图。

A. 5              B. 6         C. 7                D. 8 

5.在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要          条边。 

A. n           B. n+1     C. n-1            D. n/2 

6.对于一个具有 n 个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是    。 

A2       C. n-1             D. n2 

7.对于一个具有 n 个顶点和 e 条边的无向图,若采用邻接表表示,则所有邻接表中的结点总数是          。 

A. e/2          B. e              C. 2e          D. n+e 

8.已知一有向图的邻接表存储结构如图 7-2 所示。

(1)根据有向图的深度优先遍历算法,从顶点 v1 出发,所得到的顶点序列是      。 

A. v1,v2,v3,v5,v,v2,v3,v4,v5 

C. v1,v3,v4,v5,v,v4,v3,v5,v2 

(2)根据有向图的广度优先遍历算法,从顶点 v1 出发,所得到的顶点序列是        。 

A. v1,v2,v3,v4,v,v3,v2,v4,v5 

C. v1,v2,v3,v5,v,v4,v3,v5,v2 

图7-2一个有向图的邻接表存储结构

9. 判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用          。 

A.  求关键路径的方法 求最短路径的 Dijkstra 方法 

C.  广度优先遍历算法 深度优先遍历算法 

1-5.CBAAC

6-9 DCCBD

填空题

1.n 个顶点的连通图至少            条边。

2.在无向图 G 的邻接矩阵 A 中,若 A[i][j]等于 1,则 A[j][i]等于            。 

3.已知图G的邻接表如图 7-3 所示,其从顶点 v1 出发的深度优先搜索序列为    ,其从顶点 v1 出发的广度优先搜索序列为        。

图7-3 G的邻接表

4.设x,y是图G中的两顶点,则(x,y)与(y,x)被认为______边,但是______的两条弧。答:①无向,②有向 

5.已知一个图的邻接矩阵表示,删除所有从第 i 个结点出发的边的方法是            。

6.在有向图的邻接矩阵上,由第i行可得到第______个结点的出度,而由第j列可得到第___ ____个结点的入度。①i  ②j

7. 在无向图中,如果从顶点v到顶点v’有路径,则称v和v’是______的。如果对于图中的任意两个顶点vi,vj∈V,且vi和vj都是连通的,则称G为______。①连通,②连通图

1.   n-1

2.    1

3.  答:①  v1,v2,v3,v6,v5,v②  v1,v2,v5,v4,v3,v6

4.  ① ②

5. 将矩阵第 i 行全部置为 0

5.  ① ②

6.  ① ②

 例题解析

【例7-1】对m个顶点的无向图G,采用邻接矩阵,如何判别下列有关问题:

(1)图中有多少条边?

(2)任意两个顶点i和j是否有边相连?

(3)任意一个顶点的度是多少?

解:

⑴邻接矩阵非零元素个数的总和除以2。

⑵当A[ i,j ]≠0时,表示两顶点i,j之间有边相连。

⑶计算邻接矩阵上顶点对应行上非零元素的个数。

1.给出如图 7-4 所示的无向图G的邻接矩阵和邻接表两种存储结构。

图7-4 无向图G

解:图 G 对应的邻接矩阵和邻接表两种存储结构分别如图所示。

2.用广度优先搜索和深度优先搜索对如图 7-5 所示的图 G 进行遍历(从顶点1出发),给出遍历序列。

解:搜索本题图的广度优先搜索的序列为:1,2,3,6,4,5,8,7,深度优先搜索的序列为:1,2,6,4,5,7,8,3。 

图7-5无向图G

3.使用普里姆算法构造出如图 7-6 所示的图 G 的一棵最小生成树。 

图7-6无向图G

解:使用普里姆算法构造棵最小生成树的过程如图 7-11所示。

图 7-11 普里姆算法构造最小生成树的过程

4.使用克鲁斯卡尔算法构造出如图 7-7 所示的图 G 的一棵最小生成树。 

图7-7 无向图G

解:使用克鲁斯卡尔算法构造棵最小生成树的过程如图 7-12所示。

图 7-12 克鲁斯卡尔算法构造最小生成树的过程

第8章  查找

单项选择题

1.顺序查找法适合于存储结构为           的线性表。 

A.  散列存储             B.  顺序存储或链接存储 

C.  压缩存储             C.  索引存储 

2.对线性表进行折半查找时,要求线性表的存储方式是           。

A.  顺序存储 

B.  链接存储

C.  以关键字有序排序的顺序存储

D.  以关键字有序排序的链接存储

3.对有 18 个元素的有序表作二分(折半)查找,则查找A[3]的比较序列的下标为     。

A. 1.2.3    B. 9.5.2.3   C. 9.5.3     D. 9.4.2.3 

4.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用      查找方法。 

A. 分块        B. 顺序       C. 二分         D. 散列 

5.有一个有序表为{2,5,7,11,22,45,49,62,71,77,90,93,120},当折半查找值为 90 的结点时,经过           次比较后查找成功。

A. 1            B. 2          C. 4            D. 8 

6.设哈希表长 m=14,哈希函数 H(key)=key % 11。表中已有 4 个结点:addr(14)=3, addr(38)=5,addr(61)=6,addr(85)=8,其余地址为空,如用线性探测再散列处理冲突,关键字为 49 的结点的地址是           。

A. 7            B. 3        C. 5               D. 4 

7.在采用链接法处理冲突的开散列表上,假定装填因子a 的值为 4,则查找任一元素的平均查找长度为          。

A. 3         B.3.5            C.4          D.2.5

1-4 BCDA

5-7CAA

填空题

1.在各种查找方法中,平均查找长度与结点个数 n 无关的查法方法是            。 

2.二分查找的存储结构仅限于            。

3.在散列存储中,装填因子α的值越大,则      ;α的值越小,则     。 

① 存取元素时发生冲突的可能性就越大  ② 存取元素时发生冲突的可能性就越小

4.对于二叉排序树的查找,若根结点元素的键值大于被查元素的键值,则应该在二叉树的___________上继续查找。

5.高度为8的平衡二叉树至少有_______个结点。

6. 在散列函数 H(key)=key % p 中,p 应取           。

1.   散列表查找

2.   有序的顺序存储结构   

3.  ①    ② 

4.   左子树

5.    54

6.  素数

例题解析

【例8-1】设有一组关键字{19,01,23,14,55,20,84,27,68,11,10,77},采用哈希函数:H(key)=key % 13 ,采用开放地址法的二次探测再散列方法解决冲突,试在 0~18 的散列地址空间中对该关键字序列构造哈希表。 

解:依题意,m=19,二次探测再散列的下一地址计算公式为:

d=H(key)     

d=( d+j*j) % m     

d=( d-j*j) % m; j=1,2,... 

其计算函数如下:     

H(14)=14 % 13=1 (冲突)     

H(14)=(1+1*1) % 19=2

H(84)=84 % 13=6 (冲突)     

H(84)=(6+1*1) % 19=7 (仍冲突)     

H(27)=27 % 13=1 (冲突)

H(27)=(1+1*1) % 19=2 (冲突)     

H(68)=68 % 13=3 (冲突)     

H(10)=10 % 13=10 (冲突)     

H(10)=(10+1*1) % 19=11 (仍冲突)     

H(77)=77 % 13=12  

因此:各关键字的记录对应的地址分配如下:

    addr(27)=0     

addr(01)=1     

addr(14)=2     

addr(55)=3     

addr(68)=4     

addr(84)=5     

addr(19)=6     

addr(20)=7     

addr(10)=9     

addr(23)=10     

addr(11)=11     

addr(77)=12 

其他地址为空。

综合题

1.设散列表为 T[0..12],散列函数为 H(key)= key%13,给定键值序列是{39,36,28,38,44,15,42,12,06,25},请画出分别用拉链法和线性探查法处理冲突时所构造的散列表,并求出在等概率情况下,这两种方法查找成功和查找失败时的平均查找长度。

解 用散列函数 H(key)= key% 13计算出键值序列的散列地址。并用探查次数表示待查键值需对散列表中键值比较次数。

键值序列:{39,36,28,38,44,15,42,12,06,25}

散列地址: 0,10,2,12,5,2,3,12,6,12

(1)线性探查法处理冲突

用线性探查法处理冲突构造的散列表见表8-1所示。

表8-1 用线性探查法处理冲突构造的散列表

下标0123456789101112
T[0..12]

39122815424406253638
查找成功探查次数1312211911
查找失败探查次数98765432112110
在等概率的情况下,查找成功的平均查找长度

ASL=(1×6+2×2+3×1+9×1)/10=2.2

设待查键值 k不在散列表中:若 H(k)= k% 13= d,则从 i=d开始顺次与 T[i]位置的键值进行比较,直到遇到空位,才确定其查找失败,同时累计 k键值的比较次数,例如若 k% 13= 0,则必须将 k与 T[0]、T[1]、…、T[8]中的键值进行比较之后,发现 T[8]为空,比较次数为 9、类似地可对 k% 13=1,2,3,…,12进行分析可得查找失败的平均查找长度。

ASL =(9+8+7+6+5+4+3+2+1+1+10)/13  = 59/13 = 4.54

(2)拉链法处理冲突

用拉链法处理冲突构造的散列表见图8-2所示。

图8-2 拉链法处理冲突构造的散列表

在等概率的情况下查找成功的平均查找长度:

ASL=(1×7+2×2+3×1)/10=1.4

设待查键值 k不在散列表中,若 k% 13= d。则需在 d链表中查找键值为 k的结点,直到表尾,若不存在则查找失败,设 d链表中有 i个结点,则 k需与表中键值比较 i次,查找失败的平均长度为:

ASL=(1+ 0+ 2+ 1+ 0+ 1+ 1+ 0+0+0+1+0+3)/13=10/13 = 0.77

2.线性表的关键字集合{87,25,310,08,27,132,68,95,187,123,70,63,7},共有 13 个元素,已知散列函数为:H(k) = k % 13 ,采用拉链法处理冲突。设计出这种链表结构,并计算该表的成功查找的平均查找长度。

解:依题意,得到:

H(87)=87 % 13=9    

H(25)=25 % 13=12    

H(310)=310 % 13=11    

H(08)=08 % 13=8    

H(27)=27 % 13=1

H(132)=132 % 13=2    

H(68)=68 % 13=3    

H(95)=95 % 13=4    

H(187)=187 % 13=5    

H(123)=123 % 13=6    

H(70)=70 % 13=5    

H(63)=63 % 13=11    

H(47)=47 % 13=8 

采用拉链法处理冲突的链接表如图8-3 所示。成功查找的平均查找长度:

    ASL=(1×10+2×3)/13=16/13=1

第9章  排序

单项选择题

1.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是           。

A.  希尔排序              B.  起泡排序        

C.  插入排序              D.  选择排序 

2.设有 10000 个无序的元素,希望用最快的速度挑选出其中前 10 个最大的元素,排序方法最好选用           。

A.  起泡排序          B.  快速排序   

C.  堆排序            D.  基数排序 

3.在待排序的元素序列基本有序的前提下,效率最高的排序方法是           。 

A.  插入排序                B.  选择排序 

C.  快速排序                D.  归并排序 

4.一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为   。 

A. 79,46,56,38,40,80   B. 84,79,56,38,40,46 

C. 84,79,56,46,40,38   D. 84,56,79,40,46,38 

5.在下列算法中,           算法可能出现下列情况:在最后一趟开始之前,所有的元素都不在其最终的位置上。

A.堆排序   B.冒泡排序    C.插入排序  D.快速排序 

6.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为           。 

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 

7.一组记录的排序码为(48,16, 79,35,82,23,36,72),按归并排序的方法对该序列进行一趟归并后的结果为           。 

A. 16 48 35 79 23 82 36 72   B. 16 35 48 79 82 23 36 72 

C. 16 48 35 79 82 23 36 72   D. 16 35 48 79 23 36 72 82 

8.排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为           。 

A.  希尔排序                B.  起泡排序         

C.  插入排序                D.  选择排序 

9.排序方法中,从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为           。

A.  希尔排序                B.  归并排序         

C.  插入排序                D.  选择排序 

1-5 DCABC

6-9 CACD

填空题

1.在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第 8 个记录 45 插入到有序表时,为寻找插入位置需比较           次。

2.对于关键字序列(12,13,11,18,60,15,7,20,25,100),用筛选法建堆,必须从键值为       的关键字开始。

3.对 n个记录的表 r[1..n]进行简单选择排序,所需进行的关键字间的比较次数为    

4.在插入和选择排序中,若初始数据基本正序,则选用        ;若初始数据基本反序则选用        。 插入排序  选择排序

5.对 n 个元素的序列进行起泡排序时,最少的比较次数是            。

6.          排序不需要进行记录关键字间的比较。 

1.   5

2.   60

3.   n(n-1)/2 

4.   ①      ②

5.   n-1

6.   基数

综合题

1.已知序列49.38,65,97,76,13,27,请给出采用起泡排序对该序列作升序排列的每一趟的结果。

2.已知序列{503,87,512,61,908,170,7,275,653,462},采用快速排序法对该序列作升序排序时的每一趟的结果。 

3.已知序列{265,301,751,129,937,863,742,694,076,438},采用基数排序法对该序列作升序排序时的每一趟的结果。 

4.已知序列{503,17,512,908,170,7,275,653,426,154,509,612,677,765,703,94},请给出采用希尔排序法(d1=8)对该序列作升序排序时的每一趟的结果。 

5.已知序列{35,,61,135,78,29,50},请给出采用插入排序法对该序列作升序排序时的每一趟的结果。 

6.已知序列{11,18,4,3,6,15,1,9,18,8},请给出采用归并排序法对该序列作升序排序时的每一趟的结果。

1.解:根据起泡排序法的基本思想,比较无序区中相邻关键字。按照大小关系调整其位置,本题的解法是,通过比较已知序列中相邻关键字,并根据需要调整其位置、重复此过程直到没有关键字的位置交换为止,结果正好是关键字的升序排列。

 依题意,采用起泡排序法排序的各趟的结果如下:

 初始:49,38、65,97,76,13,27

 第一趟;38,49,65,76,13,27,97

 第二趟:38,49,65,13,27,76,97

 第二趟:38,49.13,27,65,76,97

 第四趟:38,13,27,49,65,76,97

第五趟:13,27,38,49,65.76,97

第六趟:13,27,38,49,65,76,97

第六题无元素交换,排序结束。

2.依题意,采用快速排序法排序的各趟的结果如下: 

初始:503,87,512,61,908,170,7,275,653,462 

第 1 趟:[462,87,275,61,170] 503 [7,908,653,512] 

第 2 趟:[170,87,275,61] 462,503 [7,908,653,512] 

第 3 趟:[61,87] 170 [275] 462,503 [7,908,653,512]

第 4 趟:61 [87] 170 [275] 462,503 [7,908,653,512] 

第 5 趟:61,87,170 [275] 462,503 [7,908,653,512] 

第 6 趟:61,87,170,275,462,503 [7,908,653,512] 

第 7 趟:61,87,170,275,462,503 [512,653] 7 [908] 

第 8 趟:61,87,170,275,462,503,512 [653] 7 [908]

第 9 趟:61,87,170,275,462,503,512,653,7 [908] 

第 10 趟:61,87,170,275,462,503,512,653,7,908 

3.依题意,采用基数排序法排序的各趟的结果如下: 

初始态:265 301 751 129 937 863 742 694 076 438

第一趟:[] [301 751] [742] [863] [694] [265] [076] [937] [438] [129]

第二趟:[301] [] [129] [937 438] [742] [751] [863 265] [076] [] [694]

第三趟:[075] [129] [265] [301] [438] [] [694] [742 751] [863] [937] 

4.依题意,采用希尔排序法排序的各趟的结果如下: 

初始:503,17,512,908,170,7,275,653,426,154,509,612,677,765,703,94

第 1 趟(d1=8):426,17,509,612,170,765,275,94,503,154,512,908,677,7,703,653 

第 2 趟(d2=4):170,17,275,94,426,154,509,612,503,765,512,653,677,7,703,908 

第 3 趟(d3=2):170,17,275,94,426,154,503,612,509,653,512,765,677,7,703,908 

第 4 趟(d1=1):17,94,154,170,275,426,503,509,512,612,653,677,703,765,7,908

5.依题意,采用直接插入排序法排序的各趟的结果如下

初始:(35),61,135,78,29,50

第一趟:(35,,)6l,135,78,29,50

第二趟:(35,61,,)135,78,29,50

第三趟:(35,6l,,135)78,29,50

第四趟:(35,61,78,,135)29,50

第五趟:(29,35,61,78,.135)50

第六趟:(29,35,50,61,78,,135)

6.    依题意,采用归并排序法排序的各趟的结果如下: 

初始:11,18,4,3,6,15,1,9,18,8 

第 1 趟:[11,18] [3,4] [6,15] [1,9] [8,18] 

第 2 趟:[3,4,11,18] [1,6,9,15] [8,18] 

第 3 趟:[3,4,11,18] [1,6,8,9,15,18] 

第 4 趟:[1,3,4,6,8,9,11,12,18,18] 

第 4 趟归并完毕,则排序结束。下载本文

显示全文
专题