1、1线性链表不具有的特点是( ) 。A随机访问 B不必事先估计所需存储空间大小C插入与删除时不必移动元素 D所需空间与线性表长度成正比2设一个栈的输入序列为1,2,3,4,则输出序列不可能是( )。A1, 2, 3, 4 B4, 3, 2, 1 C1, 3, 2, 4 D4,1,2,33下列排序算法中,( )排序在每趟结束后不一定能选出一个元素放到其排好序的最终位置上。 A归并 B冒泡 C选择 D堆4下列序列中,( )是执行第一趟快速排序后得到的序列 (排序的关键字类型是字符串)。Ada, ax, eb, de, bb ff ha, gc Bcd, eb, ax, da ff ha, gc, b
2、bCgc, ax, eb, cd, bb ff da, ha Dax, bb, cd, da ff eb, gc, ha5设有一个 10 阶的对称矩阵 A1010,采用压缩存储方式按行将矩阵中下三角部分的元素存入一维数组 B 中,A00 存入 B0中,则 A85在 B 中( )位置。A32 B33 C41 D656. 下面哪一种图的邻接矩阵肯定是对称矩阵( )。A有向图 B无向图 CAOV 网 DAOE 网7具有 2008 个结点的二叉树,其深度至少为( )。A9 B10 C11 D128. 关键路径是边表示活动的网(AOE网)中的( )。A从源点到汇点的最长路径 B从源点到汇点的最短路径C最
3、长的回路 D最短的回路9 一个广义表为(a, (a,b), d, e, (i,j) ,k),则该广义表的长度为( )。A不确定 B8 C5 D610设循环队列中数组的下标范围是0n 1,其头尾指针分别为f和r ,则其元素个数为( )。Ar f Br f + 1 C( r f ) mod n + 1 D( r f + n ) mod n1算法具有的五个重要特性是:有穷性,确定性,_,输入和输出。2一组记录的关键字为(45,80,55,40,42,85) ,则利用堆排序的方法建立的初始堆为_。3对如下无向图G,从结点 V1出发,写出一个按深度优先遍历图的结点序列:_。 1 2 5 3 4第3题图
4、第4题图 64写出右上图中的一个拓扑有序序列_。 5对于顺序存储的线性表,访问结点和删除结点的时间复杂度分别为_。6平衡二叉树上所有结点的平衡因子只可能是_。7假定对线性表 R160进行分块查找,共分为 10 块,每块长度等于 6。若假定查找索引表和块均用顺序查找的方法,则查找每一个元素的平均查找长度为_。8将一棵有 100 个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为 1,则编号为 37 的双亲结点编号为_。 9设有一个字符串 s=science,其非空子串的数目是_。10有 n 个顶点的强连通有向图 G 至少有_条弧。1 一棵二叉树的先序序列和中序序
5、列分别如下, 先序序列: ABCDEFGHIJ中序序列: CBDEAGIHJF(1) 画出该二叉树。 (3 分)(2) 写出其后序序列。 (3 分)2给出用 Kruskal 算法构造下列带权图的最小生成树的过程。3 1 5 434 1 623. 已知一个长度为 12 的表(6,8,4,12,2,10,7,3,9,1,11,5) 。(1)将表中的元素依次插入到一个初始为空的二叉排序树中,画出该二叉排序树并求其在等概率下的平均查找长度。 (3 分)(2)若先对表中的记录排序,构成有序表后再对其进行折半查找,画出判定树并求其在等概率下的平均查找长度。 (3 分)4已知哈希表地址空间为 010,哈希函
6、数为 H(key) = key MOD 11,采用链地址法处理冲突,将下面数据序列依次插入该哈希表中,并求出在等概率下查找成功时的平均查找长度。12,24,1,34,38,44,27,22。5假定用于通信的电文仅由 8 个字母 a,b,c,d,e ,d ,f ,g,h 组成,各个字母在电文中出现的频率分别为 5,23,3,6,10,11,36,4。要求:(1)以这些频率作为叶子结点的权值构造 Huffman 树。 (2 分)(2)试为这 8 个字母设计不等长 Huffman 编码。 (2 分)A b c d e f g hV2V1V3 V6V4 V5V2V1V3 V4V5V6V7 V8(3)计
7、算出电文总长度。 (2 分) 1. 有两个不带头结点的单循环链表,链表头指针分别为 a 和 b。编写一个过程将链表 b 链到链表 a 之后,链接后的链表仍保持循环链表形式。2. 试编写一个计算二叉树的叶子结点数的算法。要求二叉树采用链式存储结构。3. 请写出监视哨设在高下标端的插入排序算法。06 21. 具有 n(n0)个结点的完全二叉树的深度为 ( )A. log2n B. log2n C. log2n +1 D. log2n+12. 一个栈的进栈序列是 a,b,c,d,e ,则栈的不可能的输出序列是 ( )A.abcde B.edcbaC.decba D.dceab3. 数据在计算机存储器
8、内表示时,物理地址与逻辑地址相同且连续,称之为 ( )A.存储结构 B. 逻辑结构 C.顺序存储结构 D. 链式存储结构4. 对二叉排序树的左子树中所有结点与右子树中所有结点的关键字大小关系是 ( )A.小于 B.大于 C.等于 D.不小于5. 按照二叉树的定义,具有 3 个节点的二叉树_种 ( )A.2 B.3 C.4 D. 56. 广义表(a) )的表尾是 ( )Aa B. (a) C () D. ((a ))7设有两个串 p 和 q,求在 q 在 p 中首次出现的位置的运算称为 ( )A.模式匹配 B.连接 C.求子串 D. 求串长8. 引入二叉线索树的目的是 ( )A加快查找结点的前驱
9、或后继的速度 B为了能在二叉树中方便的进行插入与删除C为了能方便的找到双亲 D使二叉树的遍历结果唯一9在有 n 个叶子结点的哈夫曼树中,其结点总数为 A.不确定 B.2n-1 C.2n D.2n+110与单链表相比,双向链表的优点之一是 A插入、删除更简单 B.可以进行随机访问C可以省略表头指针或表尾指针 D.访问前后相邻结点更方便1Prim 算法适合求 _的网的最小生成树,而 Kruskal 算法适用于求_的网的最小生成树。 2.循环单链表 L 为空的条件是_ 。 3.在对队列中,新插入的元素只能插入到_。 4平衡二叉树上所有结点的平衡因子只可能是_。5一个有序表1,3,9,12,32, 4
10、1,45,62,75,77,82,95,99 ,当采用折半查找法查找关键字为 82 的元素时,_次比较后查找成功。6设二维数组 A610,每个数组元素占 4 个存储单元,若按行优先顺序存放数组元素,A00的存储地址是 860,则 A35的存储地址是_。7可以进行拓扑排序的一定是_。8求单链表长度算法的时间复杂度是_。9.在直接插入排序、希尔排序、直接选择排序、快速排序、堆排序和归并排序中,平均比较次数最少的排序方法是_。1.已知一个二叉树的中序遍历序列为 DGBAECF, 后序遍历序列为 GDBEFCA, 请给出:(3) 画出该二叉树。 (3 分)(4) 写出其后序序列。 (3 分)对关键字序
11、列11,78,10,1,3,2,4,21构造哈希表,取散列地址为 HT010,散列函数为 H(K)K11,试用线性探查法冲突,画出相应的哈希表,并分别求查找成功和不成功时的平均查找长度。3. 已知关键字序列503,87,512,61,908,170,897,275,653,462,采用快速排序算法对该序列作升序排序时的每一趟的结果。4. 从一棵空树开始,逐个读入并插入下列关键字:40,28,6 ,72,100,3,54,1,80, 91,38请首先建立二叉排序树,然后删除节点 72,并给出删除节点 72 后的二叉树。5. 给定权集 W=2,3,4,7,8,9,试构造关于 W 的一棵哈夫曼树,并
12、求带权路径长度 WPL。1. 有一个有序单链表(从小到大排序) ,表头指针为 L,设计一个算法向该单链表中插入一个元素为 x 的结点,并使插入后链表仍然有序。2. 二叉树采用链式存储结构,试编写算法求二叉树的深度。3. .二叉树采用链式存储结构,试设计一个按层次顺序(同层自左向右)遍历二叉树的算法。答案A一、选择题(每小题 2 分,共 20 分)1.A 2.D 3.A 4.A 5.C 6.B 7.C 8.A 9.C 10.D二、填空题(每小题 2 分,共 20 分)1可行性 2 (85,80,55,40,42,45) 3V 1, V2, V3, V5 ,V4,V6, V7, V8 (答案不惟一
13、)41, 2, 3, 5, 6, 4 (答案不惟一 ) 5. O(1)和 O( n) 6. 1, 0, 1 7. 9 8. 18 9. 26 10n三、解答下列各题 (每小题 6 分,共 30 分)1该二叉树为(3 分): AB FC D GE HI J后序序列:CEDBIJHGFA ( 3 分)2 V1 V2 V1 V2 V1 V2 1 1 1V3 V6 V3 V6 V3 V6 1 1V4 V5 V5 V4 2 V5 (2 分) (1 分) (1 分) V1 3 V2 V1 3 V21 1 4V3 V6 V3 V61 1V4 2 V5 V4 2 V5(1 分) (1 分)3 (1)二叉排序树
14、为:64 82 5 7 121 3 109 11 ( 2 分)等概率下平均查找长度 ASL =(1+2*2+3*4+4*3+5*2 )/12 = 13/4 = 3.25 (1 分 )(2)排序后进行折半查找的判定树为:63 91 4 7 112 5 8 10 12 (2 分)等概率下平均查找长度 ASL =(1+2*2+3*4+4*5)/12 = 37/12 3.08 (1 分)第 1 页(共 3 页)4哈希函数值为:(1 分)H(12)=1 H(24)=2 H(1)=1 H(34)=1 H(38)=5 H(44)=0 H(27)=5 H(22)=0哈希表为:(3 分)0 22 44 1 1
15、12 34 2 24 3 4 5 27 38 6 7 8 9 10 平均查找长度 ASL = (14+23+31)/8 = 13/8=1.625 (2 分)5 (1)Huffman 树为:(2 分)9839 5917 22 23 367 10 11 113 4 5 6 (2) 其 huffman 编码为 (2 分)注:此题答案不唯一,只要满足哈夫曼编码的要求都可。a b c d E f g H0100 10 0000 0101 001 011 11 0001(3)电文总码数为 4*5+2*23+4*3+4*6+3*10+3*11+2*36+4*4=253 (2 分)四、算法设计(每小题 10
16、分,共 30 分 )说明:每小题中:1思路正确 3 分2算法正确 5 分3算法完整 2 分(1)typedef struct LNodeElemType data;struct LNode *next; LNode, *LinkList;void Connect( LinkList a, LinkList b ) /将循环链表 b 链在循环链表 a 之后的算法,链表 a 和 b 均不带头结点LinkList p;p=a; /先令指针 p 指向链表 a 的第一个结点while(p-nextnext; /找到链表 a 的最后一个结点p-next=b; /将链表 b 链到 a 的最后一个结点之后第
17、2 页(共 3 页)p=b; /令指针 p 指向链表 b 的第一个结点while(p-nextnext; /找到链表 b 的最后一个结点p-next=a; /令链表 b 的最后一个结点指向合并后的链表的表头(2)Typedef struct BiTNodeTelemType data;Struct BiTNode *lchild, *rchild;BiTNode, *BiTree;void leaf(BiTree T) /采用二叉链表存贮二叉树,n 为全局变量,用于累加二叉树的叶子结点/的个数。本算法在先序遍历二叉树的过程中,统计叶子结点的个数/第一 次被调用时,n=0if(T) /若二叉树为
18、空,结束返回 /若二叉树不为空,在先序遍历二叉树的过程中,统计叶子结点的个数 if(T-lchild=nullleaf(T-lchild);leaf(T-rchild);/if/leaf(3)typedef struct KeyType key;InfoType otherinfo;RedType;typedef struct RedType rMAXSIZE+1;int length;SqList;void Insert_Sort1(SqList for(i=k-1;i;-i) /从后向前逐个插入排序if(L.ri.keyL.ri+1.key)L.rk+1.key=L.ri.key; /监视
19、哨for(j=i+1;L.rk+1.keyL.rj.key;+j)L.rj-1=L.rj; /前移L.rj-1=L.rk+1; /插入/Insert_Sort1 B一、选择题(每小题 1 分,共 10 分)1-5 C D C B D 6-10 C A A D D 二、 填空题(每空 2 分,共 20 分)1. 边稠密,边稀疏2. L-next=L;3. 队尾4. -1,0,15. 46. 10007. 无环图8. O(n)9. 快速排序三、解答题(每小题 6 分,共 30 分)1. (1)二叉树是:AFEGDCB(4 分)(2)后序序列为:GDBEFCA (2 分)2. 解:首先求出散列地址,
20、据此得到哈希表见下图。0 1 2 3 4 5 6 7 8 9 1011 78 1 3 2 4 21 10查找成功的平均比较次数为:ASL(112132 8l)82.375查找不成功的平均查找长度为:ASLunsucc(87654 321119)114.2733.每趟快速排序的结果如下:462 87 275 61 170 503 897 908 653 512170 87 275 61 46261 87 170 27561 87512 653 897 908512 653排序后:61 87 170 275 462 503 512 653 897 908 4. 二叉排序树:4 01 0 05 43
21、67 22 83 819 18 0(4 分)删除 72 后:4 01 0 0365 42 83 819 18 0(2 分)5. 构造的哈夫曼树为:3 38591 51 892 347(4 分)加权路径长度 WPL=80 (2 分)四、算法设计题(每小题 10 分,共 30 分)1. void ListInsert(Linklist q=L;p=q-next;while(pp=p-next;s=(Linklist)malloc(sizeof(LNode);s-data=x;s-next=p;q-next=s;2.int BtDepth(Bitree T) int lchilddep,rchild
22、dep;if(T) return(0);else lchilddep= BtDepth(T- lchild);rchilddep= BtDepth(T- rchild);return(lchilddep rchilddep)? (lchilddep+1): (rchilddep+1);3. void LayerOrder(Bitree T)InitQueue(Q); EnQueue(Q,T); while( !QueueEmpty(Q) ) DeQueue(Q, visit(p); if(p-lchild) EnQueue(Q,p-lchild); if(p-rchild) EnQueue(Q
23、,p-rchild); 一、选择题(20 分)1组成数据的基本单位是( ) 。 (A) 数据项 (B) 数据类型 (C) 数据元素 (D) 数据变量2设数据结构 A=(D,R) ,其中 D=1,2,3,4,R=r,r=, ,则数据结构 A 是( ) 。(A) 线性结构 (B) 树型结构 (C) 图型结构 (D) 集合3数组的逻辑结构不同于下列( )的逻辑结构。(A) 线性表 (B) 栈 (C) 队列 (D) 树4二叉树中第 i(i1)层上的结点数最多有( )个。(A) 2i (B) 2i (C) 2i-1 (D) 2i-15设指针变量 p 指向单链表结点 A,则删除结点 A 的后继结点 B 需
24、要的操作为( ) 。(A) p-next=p-next-next (B) p=p-next(C) p=p-next-next (D) p-next=p6设栈 S 和队列 Q 的初始状态为空,元素 E1、E2、E3、E4 、E5 和 E6 依次通过栈 S,一个元素出栈后即进入队列 Q,若 6 个元素出列的顺序为E2、E4、E3 、 E6、E5 和 E1,则栈 S 的容量至少应该是( ) 。(A) 6 (B) 4 (C) 3 (D) 27将 10 阶对称矩阵压缩存储到一维数组 A 中,则数组 A 的长度最少为( ) 。(A) 100 (B) 40 (C) 55 (D) 808设结点 A 有 3 个
25、兄弟结点且结点 B 为结点 A 的双亲结点,则结点 B 的度数数为( ) 。(A) 3 (B) 4 (C) 5 (D) 19根据二叉树的定义可知二叉树共有( )种不同的形态。(A) 4 (B) 5 (C) 6 (D) 710.10. 设有以下四种排序方法,则( )的空间复杂度最大。(A) 冒泡排序 (B) 快速排序 (C) 堆排序 (D) 希尔排序二、填空题(30 分)1. 1. 设顺序循环队列 Q0:m-1的队头指针和队尾指针分别为 F 和 R,其中队头指针 F 指向当前队头元素的前一个位置,队尾指针 R 指向当前队尾元素所在的位置,则出队列的语句为 F =_;。2. 2. 设线性表中有 n
26、 个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为_,在链式存储结构上实现顺序查找的平均时间复杂度为_。3. 3. 设一棵二叉树中有 n 个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有_个指针域,_个空指针域。4. 4. 设指针变量 p 指向单链表中结点 A,指针变量 s 指向被插入的结点 B,则在结点 A 的后面插入结点 B 的操作序列为_。5. 5. 设无向图 G 中有 n 个顶点和 e 条边,则其对应的邻接表中有_个表头结点和_个表结点。6. 6. 设无向图 G 中有 n 个顶点 e 条边,所有顶点的度数之和为 m,则 e 和 m有_关系。7. 7. 设一棵二叉树的
27、前序遍历序列和中序遍历序列均为 ABC,则该二叉树的后序遍历序列为_。8. 8. 设一棵完全二叉树中有 21 个结点,如果按照从上到下、从左到右的顺序从 1 开始顺序编号,则编号为 8 的双亲结点的编号是_,编号为 8的左孩子结点的编号是_。9. 9. 下列程序段的功能实现子串 t 在主串 s 中位置的算法,要求在下划线处填上正确语句。int index(char s , char t )i=j=0;while(inext=p-next; s-next=s5. 5. n, 2e6. 6. m=2e7. 7. CBA8. 8. 4,169. 9. i-j+1,010. 10. n-1三、应用题1
28、. 1. 链式存储结构略,前序 ABDEC,中序 DBEAC,后序 DEBCA。2. 2. 哈夫曼树略,WPL=783. 3. (18,5,16,19,21,23),(5,16,21,19,18,23)4. 4. 线性探测: 68273510842链地址法: 2768351084320hh5. 5. 深度:125364,广度:123456,最小生成树 T 的边集为 E=(1,4),(1,3) ,(3 ,5),(5,6) ,(5,6)四、算法设计题1. 1. 设计判断单链表中结点是否关于中心对称算法。typedef struct int s100; int top; sqstack;int lk
29、listsymmetry(lklist *head)sqstack stack; stack.top= -1; lklist *p;for(p=head;p!=0;p=p-next) stack.top+; stack.sstack.top=p-data;for(p=head;p!=0;p=p-next) if (p-data=stack.sstack.top) stack.top=stack.top-1; else return(0);return(1);2. 2. 设计在链式存储结构上建立一棵二叉树的算法。typedef char datatype;typedef struct node
30、datatype data; struct node *lchild,*rchild; bitree;void createbitree(bitree * scanf(“%c“,if(ch=#) bt=0; return;bt=(bitree*)malloc(sizeof(bitree); bt-data=ch;createbitree(bt-lchild); createbitree(bt-rchild);3. 3. 设计判断一棵二叉树是否是二叉排序树的算法。int minnum=-32768,flag=1;typedef struct nodeint key; struct node *lchild,*rchild;bitree;void inorder(bitree *bt)if (bt!=0)inorder(bt-lchild); if(minnumbt-key)flag=0; minnum=bt-key; inorder(bt-rchild);