1、考 试 试 卷1题号 一 二 三 四 五 六 七 八 九 十 总 分得分一、 请判断下列说法的是否正确:(10 分)(1)若某堆栈的输入序列为 1,2,3,4,则 4,3,1,2 不可能是堆栈的输出序列之一。( )(2)队列逻辑上是一个表头和表尾既能插入又能删除的线性表。 ( )(3)若一个叶子结点是某子树的中序遍历序列的最后一个结点,则它必是该子树的先序遍历中的最后一个结点。 ( )(4)在索引顺序表上实现分块查找,在等概率查找情况下,其查找长度只与表中元素个数有关,而与每块中元素个数无关。 ( )(5)二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值,小于其右孩子的值。
2、( )(6)在 10 万个随机排列的数据中,要选出 5 个最小的数,采用快速排序比采用 Shell 排序、堆排序及各种直接排序法都快。 ( )(7)用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小与图中的结点的个数有关,而与图的边数无关。 ( ) 。- (8)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和。 ( )(9)二分查找法不仅适用于顺序存储的有序表,而且适合于链接表。 ( )(10)按中序遍历一棵二叉排序树所得到的遍历序列是一个递增序列。 ( )二、填空(20 分)(1)数据结构有如下四种基本结构:、 、 、 。 (2)在一个算法中的语句频度之和为 T
3、(n)=3720n+4nlogn,则算法的时间复杂度为 。(3) 已知某二叉树的叶子结点的个数为 10 个,度为 1 的结点个数为 8 个,则该二叉树的结点总数为: 个。(4) 已知一个有序表为(13,18,24,35,47,50,62, 83,90,115,134) ,当二分检索值考 试 试 卷2为 90 的元素时,需_ _次比较可检索成功。(5)、图的遍历方法主要有两个,一个是 ,另一个是 。(6) 在哈希造表过程中,处理冲突的方法主要有: , , 。(7)在一个单链表中 p 所指结点(p 所指不是最后结点) 之后插入一个由指针 s 所指结点,应执行 s-next=_ _;和 p-next
4、=_ _的操作。(8).已知一棵二叉树的先序序列为 ABCD,中序序列为 BCAD,则它的后序序列为_ _。 (9)有 N 个顶点组成的无向连通图,最多可以 _条边。(10) 、若某序列的初始状态为49,13,42,8,65,55,79,若以 49 为枢轴,则经过一趟快速排序之后的序列为: 。三、单项选择题(每小题 2 分,共 20 分)1 从一个长度为 n 的顺序表中删除第 i 个元素(1i n)时,需向前移动( )个元素。A). n-i B). n-i+1 C). n-i-1 D). i2) 、队列操作的原则是:( )A)先进先出 B)后进先出 C)只能进行插入 D)只能进行删除 3)下列
5、算法中,( )算法用来求图中每对顶点之间的最短路径。A) Dijkstra B) Floyed C) Prim D) Kruskal4、下面关于线性表的叙述中,错误的是 ( )A)线性表采用顺序存储,必顺占用一片连续的存储单元。 B)线性表采用顺序存储,便于进行插入和删除操作。 C)线性表采用链接存储,不必占用一片连续的存储单元 D)线性表采用链接存储,便于插入和删除操作 。5、对下面的有向图进行拓扑排序,其排序结果不正确的是:( ) 。考 试 试 卷3A) 1、4、2、6、5、3 B )1、2、4、6、3、5 C) 1、4、2、5、6、36、带头结点的单链表 head 为空的判定条件是:(
6、)A) head= =NULL B.) head-next= =NULL C) 、.head-next= =head D).head!=NULL7、在所有排序方法中,关键字的比较次数与记录的初始排列无关的是_。A) Shell 排序 B) 冒泡排序 C.) 直接插入排序 D) 直接选择排序8、设有两个串 p 和 q,求 q 在 p 中首次出现的位置的运算叫_。A). 模式匹配 B). 求子串 C.) 定位 D). 查找9、将长度为 n 的单链表链接到长度为 m 的单链表之后的算法的时间复杂度为( )A.) O(m) B.) O(1) C.) O(n) D ). O(m+n) 10、用线性探测法
7、查找散列表,可能要探测多个散列地址,这些位置上的关键值( ) A.) 一定都是同义词 B). 一定都不是同义词 C). 都相同 D)不一定都是同义词四、解答题 (3分)、对于给定的一组权值, 画出Huffman 树(要求结点左小右大) ,并给出每个结点的 Huffman 编码,计算该树的WPL。 (6 分)14 3256考 试 试 卷42、考虑下图:(0 分) 从顶点出发,求它的深度优先生成树。) 从顶点出发,求它的广度优先生成树。) 根据普里姆(rim)算法,求它的最小生成树。 (从顶点 A 出发,要求给出计算过程) 考 试 试 卷53、已知待散列的线性表为(36,15,40,63,22)
8、,散列用的一维地址空间为06,假定选用的散列函数是 H(K)=K % 7,若发生冲突采用线性探查法处理,试:(1)计算出每一个元素的散列地址并在下图中填写出散列表;(2)求出在查找每一个元素概率相等情况下的平均查找长度。 (6 分)0 1 2 3 4 5 64、对关键字序列(49,38,65,97,76,13,27, 49)进行堆排序,使之按关键字非递增次序排列。请写出排序过程中得到的初始堆和前二趟的序列状态。 (8 分)考 试 试 卷6初始堆:_ 第 1 趟:_ _ 第 2 趟:_ _ 五、算法填空与设计(20 分)1、此为向以 T 为树根指针的二叉排序树上插入值为 item 的结点的递归算
9、法。(6 分)void Insert(BiTree p-data=item; _; T=p;else if(item.keydata.key) _; else _; 其中:二叉树的存储结构为:typedef struct BiTNodeElemType data;Struct BiTNode *lchild, *rchild;BiTNode, *Bitree;2、以下运算实现在循环队上的入队列,请在_处用适当句子予以填充。(6 分)status EnQueue(SqQueue return(ERROR);else _;_;return(OK);其中循环队列存储结构为:#define MAXQS
10、IZE 100 typedef struct QelemType *base;int front;int rear; SqQueue;3、已知一个线性表中的元素按元素值非递减有序排列,编写一个程序删除线性表中多余的值相同的元素,并返回删除后线性表的长度(8 分)考 试 试 卷8一( 每小题 1 分:)1 正确 2、错误 3、正确 4、错误 5、错误 6、错误 7 正确、8、正确9、错误 10、正确二、每小题 2 分1、 集合、线性结构、图结构、树结构2、 O(nlogn)3、 274、 2 次5、 深度优先搜索,广度优先搜索6、 1、开放地址法 2、再哈希法 3、链地址法 4、建立一个公共的溢
11、出区7、 s-next=p-next p-next=s;8、 CBDA9、 1/2N*(N-1)10、 8 13 42 49 65 55 79三、每小题 2 分A A B B C B D A A D四、1 )考 试 试 卷919:00 9:010 3:0110 6:0111 11:100 13:10115:110 17:111;WPL=(19*2+9*3+3*4+6*4+11*3+13*3+15*3+17*3 )=2692、1) (有多种答案)2) (有多种答案)3) (计算过程略)考 试 试 卷103、 (1) H(36)=36 % 7=1H(15)=15 % 7=1 冲突 H 1(15)=
12、(15+1) % 7=2H(40)=40 % 7=5H(63)=63 %7=0H(22)=22 % 7=1 冲突 H1(22)=(22+1)% 7=2 冲突 H2(22)=(22+2)%7=30 1 2 3 4 5 663 36 15 22 40(2)平均查找长度=(1+2+1+1+3)/5=1.64、 初始堆:13,38,27,49,76 ,65,49,97第一趟:27,38,49,49 ,76,65,97 , 13第二趟;38,49,49,97 ,76,65,27 , 13五、1) p-lchild=NULL;p-rchild=NULL;2) Insert(T-lchild,item); 3) Insert(T-rchild,item)4 ) =Q.front 5) Q.baseQ.rear=e; 6) Q.rear=(Q.rear+1)%MAXQSIZE;typedef struct ElemType *elem;int length;int listsize; SqList;int del(SqList while (i=A.length-1)if (A.elemi!=A.elemi+1) i+;else考 试 试 卷11for (j=i; jA.length; j+) A.elemj=A.elemj+1;A.length-;return A.length;