1、 院系:—————— 专业班级:——————— 姓名:——————— 学号:—————— 装 订 线 《数据结构》课程考试试卷A 适用专业: 考试日期: 闭卷 所需时间:120分钟 总分:100分 一、单项选择题(共15小题,每小题2分,总共 30分) 1. 一种抽象数据类型包括数据和( )两个部分。 A. 数据类型 B.
2、 操作 C. 数据抽象 D. 类型说明 2. 在一个长度为n的顺序表的表尾插入一个新元素的时间复杂度为( )。 A. O(1) B. O(n) C. O(n2) D. O(log2n) 3. 已知L是带表头结点的单链表, 删除第一个结点的语句是( )。 A. L = L->next; B. L-> next = L-> next -> next; C. L = L; D. L-> next = L; 4. 在线性表的
3、下列运算中,不改变数据元素之间结构关系的运算是( ) A.插入 B.删除 C.排序 D.查找 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( ) A.3,2,6,1,4,5 B.3,4,2,1,6,5 C.1,2,5,3,4,6 D.5,6,4,2,3,1 6. 设串sl="Data Structures with Java",s2="it",则子串定位函数index(s1,s2)的值为( )。 A.15 B.16 C.17 D.18 7. 在一个
4、n个结点有向图的邻接矩阵表示中,删除一条边
5、 C. n/m D. n*m 10. 若用邻接矩阵表示一个有向图,则其中每一列包含的1的个数为( ) A.图中每个顶点的入度 B.图中每个顶点的出度 C.图中弧的条数 D.图中连通分量的数目 11. 下列排序算法中,其时间复杂度和记录的初始排列无关的是( ) A.插入排序 B.堆排序 C.快速排序 D.冒泡排序 12. 若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在二分查找关键字b的过程中,先后进行比较的关键字依次为( ) A.f,c,b B.f,d,b C.g,c,b D.g,
6、d,b 13. 在一棵度为3的树中,度为3的结点个数为2,度为2 的结点个数为1,则度为0的结点个数为( ) A.4 B.5 C.6 D.7 14. 具有10个叶结点的二叉树中有( )个度为2的结点。 A.8 B.9 C.10 D.ll。 15. 已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为( )。 A.CBEFDA B. FEDCBA C. CBEDFA D.不定 二、填空题(共10小
7、题,每小题2分,共20分) 1. 数据的逻辑结构是从逻辑关系上描述数据,它与数据的 无关,是独立于计算机的。 2. 利用三元组表存放稀疏矩阵中的非零元素,则在三元组表中每个三元组元素对应一个非零元素的行号、列号和_ _。 3. 在单链表中逻辑上相邻的结点而在物理位置上 相邻。 4. 在有序表(12,24,36,48,60,72,84)中二分查找关键字72时所需进行的关键字比较次数为 。 5. 迷宫问题是一个回溯控制的问题,最好使用 的方法来解决。 6. 含n个顶点的无向连通图中
8、至少含有 条边。 7. 若对关键字序列(43,02,80,48,26,57,15,73,21,24,66)进行一趟增量为3的希尔排序,则得到的结果为 。 8. 已知一棵完全二叉树中共有768结点,则该树中共有 个叶子结点。 9. 在使用Kruskal算法构造连通网络的最小生成树时,只有当一条候选边的两个端点不在同一个 上,才会被加入到生成树中。 10. 在堆排序中,对n个记录建立初始堆需要调用 次调整算法。 三、运算题(5小题
9、每小题6分,共30分) 1. 一个一维数组a[10]中存储着有序表(15,26,34,39,45,56,58,63,74,76),根据折半搜索所对应的判定树,写出该判定树中度为1的结点个数,并求出在等概率情况下进行成功搜索时的平均搜索长度。 度为1的结点个数: 平均搜索长度: 2. 已知一个图的顶点集V和边集G分别为: V={1,2,3,4,5,6}; E={<1,2>,<1,3>,<2,4>,<2,5>,<3,4>,<4,5>,<4,6>,<5,1>,<5,3>,<6,5>}; 假定该
10、图采用邻接表表示,每个顶点邻接表中的边结点都是按照终点序号(即数值域的值)从小到大的次序链接的,试写出: (1) 从顶点1出发进行深度优先搜索所得到的顶点序列; (2) 从顶点1出发进行广度优先搜索所得到的顶点序列。 答: (1) (2) 3. 已知一个数据序列为{6,45,27,23,41,5,56,64},把它调整为大根堆的结果。 最大堆: 4. 已知带权图的邻接表如下所示,其中边表结点的结构为: 2 6 4 5 1 2 3 4 5 6 邻接点 权值 指针域 1 6 5 3
11、 1 1 2 5 4 7 6 4 3 1 ^ 3 5 ^ 5 5 ^ 1 5 6 2 3 7 ^ 2 3 6 6 3 5 ^ 4 2 5 6 3 4 ^ 依此邻接表存储的图,采用Prim算法画出其最小生成树的生成过程。 5. 绘制出叶子结点权值为 w={5, 29, 7, 8, 14, 23, 3, 11}对应的哈夫曼树。 四、算法分析题(2小题,每小题6分,共12分) 1. 该算法功能为:将十进制整数转换
12、成二进制数输出。阅读算法,按标号填写空缺的内容,要求统一填写在算法后面的标记处。 其中所用函数原型说明如下: void Pop(SeqStack *S,DataType *x);//出栈 void Push(SeqStack *S,DataType x);//进栈 int StackEmpty(SeqStack S);//判栈空 void StackInit(SeqStack *S);//栈初始化 typedef int DataType; #include"SeqStack.h" void conversion(int n,int r) { SeqStac
13、k s; DataType x; char ch; StackInit(&s); while (n>0) { (1) n=n/r; } while ( (2) ) { (3) printf(“%d”,x); } } (1) (2) (3) 2. 已知二叉树中的结点类型BinTreeNode定义为: typedef struct Node { Datatype data; struct Node *lchil
14、d, *rchild;
} BinTreeNode;
其中data为结点值域,lchild和rchild分别为指向左、右子女结点的指针域。下面递归函数完成的功能是从二叉排序树BST中查找值为X的结点,若查找成功则返回结点地址,否则返回空。按标号填写空缺的内容,要求统一填写在算法后面的标记处。
BinTreeNode *SearchBST(BiTreeNode *T,DataType x)
{
if(T==NULL||x==T->key)
return (1) ;
if(x
15、 return (2) ;
else
return (3) ;
}
(1)
(2)
(3)
五、算法设计题(1小题,每小题8分,共8分)
1. 阅读下列函数arrange()
int arrange(int a[],int 1,int h,int x)
{//1和h分别为数据区的下界和上界
int i,j,t;
i=1;j=h;
while(i 16、]>=x)j--;
while(i






