湖南大学数据结构试卷

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

5、当待排序的记录数较大,排序码较随机且对稳定性不作要求时,宜采用 6、一棵结点数为 N 的二叉树,其所有结点的度的总和是 。
名:
7 、设一棵二叉树的前序遍历序列和中序遍历序列均为 ABC ,则该二叉树的后序遍历序列 为 。

8、散列法存储的基本思想是由 9、对不带权图进行
决定数据的存储地址。 遍历可求得单源最短路径。 条边。
ቤተ መጻሕፍቲ ባይዱ
bool enqueue(const Elem& it) { if (rear==NULL) front=rear=new Link(it, NULL); else { rear->next = new Link(it, NULL); rear = rear->next; } size++; return true; } bool dequeue(Elem& it) { if (size==0) return false; it=front->element; Link *ltemp=front; front = front->next; delete ltemp; if (front == NULL) rear = NULL; size--; return true; }
bool push(const Elem& item) { if (top == size) return false; else { listArray[top++] = item; return true; } } bool pop(Elem& it) { if (top == 0) return false; else { it = listArray[--top]; return true; } } 队列的数据结构(链表实现) template class Queue { private: Link *front; Link *rear; int size; }
个元素。 。
2、假设在有序线性表 a[20]上进行折半查找,则比较 3 次查找成功的结点数为
学号:
装 订 线 ( 答 题 不 得 超 过 此 线 )
3、对有序数组进行二分查找的时间复杂度为

4、设栈 S 和队列 Q 的初始状态为空,元素 E1、E2、E3、E4、E5 和 E6 依次通过栈 S,一个元 素出栈后即进入队列 Q,若 6 个元素出列的顺序为 E2、E4、E3、E6、E5 和 E1,则栈 S 的容量 至少应该是 。 排序。
; // 不在数组中
3.假设队列中存储了 n 个整数,请利用堆栈以及堆栈的基本操作(出栈和入栈) ,把队列中的 n 个 数进行逆置后仍然存储在同一个队列中。 (10 分)
4.编写求二叉树的叶结点数目的算法。 (10 分)
第 4 页(共 4 页)
2008 年数据结构期末考试参考答案
一、填空题(每空 1 分,共 10 分) 1、 n-1 2、 4 3、 O(logn) 4、 3 5、 快速 6、 N-1 7、 CBA 8、 关键字的值 9、 广度优先 10、 n-1 二、选择题(每小题 1 分,共 10 分) 1~5 C D A C C 6~10 B A C A D
得 分
五、算法设计题(共 30 分)
1.请根据函数 f(n)的 C 语言代码,写出 f(n)的值和推导过程,并给出算法的阶 O(?): (5 分) int f(int n) { int i, j, k, sum=0; for (i=1; i<n+1; i++) { for(j=n; j>i-1; j--) for (k=1; k<j+1; k++) sum++; printf("sum=%d\n", sum) } return (sum); } 2.已知数组存储了 n 个整数。下面给出了顺序查找算法,如果数组中存在某个整数等于 K,返回 K 在数组的下标位置;否则返回-1 表示数组中没有整数 K。请在算法的空缺处填入适当内容,使
3.已知一有向图的邻接表(如图) ,试写出: 1) 从顶点 A 出发进行广度优先搜索所得到的 0 1 广度优先生成树; 2 2) 请对其进行拓扑排序,输出其拓扑排序序列。
3 4 5 A B C D E F ∧ 4 ∧ 1 2 5 4 ∧ 5 ∧ 3 4 ∧ ∧
4. 排序的排序码序列为{ 12, 16, 30, 28, 10, 18} , 试分别写出使用以下排序方法按从小到大排列,每趟 排序后的结果。 (1) 快速排序 (2) 冒泡排序
之能够正常工作。 (5 分)
//值 K 如果在数组 array 中返回存储的下标位置,否则返回 -1 表示没有查找到。 int binary(int R[ ], int n, int K) { int i; ① while ( { ; ② ) ③ ; // 在数组中
if (K == R[i]) ④ ; } ⑤ }
三、应用题(每小题 10 分,共 50 分) 1.二叉树:5 分
前序遍历结果为:EBAFDCGIHJ (5 分) 2.(10 分)
3: (1) 广度优先搜索生成树为:(5 分)
(2) 拓扑排序序列(有三个,答出一个给满分):(5 分) 1:A,B,C,D,F,E 2:A,B,D,C,F,E 3:A,D,B,C,F,E 4: (1) 快速排序: (5 分) 第一趟,(10)12 (30,28,16,18) 第二趟:(10)12 (18,28,16)30 第三趟:(10)12 16 (18,28)30 (2) 冒泡排序:,(5 分) 第一趟:12,16,28,10,18,30
)是不稳定的? (B)冒泡排序 (D)基数排序
10、散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址。因为散列函数不是一对 一的关系,所以选择好的( )方法是散列文件的关键。
(A)散列函数 (C) 冲突处理 得 分 1.
(B) 除余法中的质数 (D) 散列函数和冲突处理
四、应用题(每小题 1 0 分,共 50 分)
10、设一个连通图 G 中有 n 个顶点 e 条边,则其最小生成树上有
第 1 页(共 4 页)
得 分
二、单选题(每小题 1 分,共 10 分,本题所给四个答案中只有一个是正确的)
1、若已知一个栈的入栈序列是 1,2,3,…,n,其输出序列为 p1,p2,p3,…,pn,若 p1=n,则 pi 为( (A)i ) (B)n=i (C)n-i+1 (D)不确定 )
已知一棵二叉树的后序遍历的结果是 ACDBHJIGFE, 中序遍历的结果是 ABECDFGHIJ, 试画出 这棵二叉树,并给出前序遍历的结果。
2.
假设某 AVL 树的输入关键码的顺序为 16, 3, 7, 11, 9, 26, 18, 14, 15,请给画出这棵 A VL 树, (要求 画出插入和调整过程) 。
j=2 2 2 j=1 1 (1+2+…+n)+(2+3+…+n)+…+n=n*n(n+1)/2-n(n*n-1)/6 算法的阶为 O(n3) 2、(5 分) (1): i = 0; (2): i < n (或 i <= n-1) (3): return i (4): i++ (5): return –1 3、(10 分) 堆栈的数据结构(顺序表实现) template class Stack { private: // Maximum size of stack int size; // Index for top element int top; // Array holding stack elements Elem *listArray; }
5. 设散列表为 HT[13], 散列函数为 H (key) = key %13。用闭散列法解决冲突, 对下列关键码序列 12, 23, 45, 57, 20, 03, 78, 31, 15, 36 造表。 (1) 采用线性探查法寻找下一个空位, 画出相应的散列表, (2) 计算等概率下搜索成功的平均搜索长度。
2、线性表若采用链式存储结构时,要求内存中可用存储单元的地址: ( (A)必须是连续的 (C)一定是不连续的 (B)部分地址必须是连续的 (D)连续或不连续都可以
3. 在 n 个结点的顺序表中,算法的时间复杂度是 O(1)的操作是: ( ) (A) 访问第 i 个结点(1≤i≤n)和求第 i 个结点的直接前驱(2≤i≤n) (B) 在第 i 个结点后插入一个新结点(1≤i≤n) (C) 删除第 i 个结点(1≤i≤n) (D) 将 n 个结点从小到大排序 4、具有 n(n>0)个结点的完全二叉树的深度为( (A) log2 (n) (B) log2 (n) ) 。 (D) log2 (n)+1 ) 。
(C) log2 (n)+1
5、有 n 个顶点 e 条边的无向图 G,它的邻接表中的表结点总数是( (A) 2n (B)n (C) 2e (D) e
6、静态查找表与动态查找表二者的根本差别在于( ) (A) 它们的逻辑结构不一样 (B) 施加在其上的操作不同 (C) 所包含的数据元素的类型不一样(D) 存储实现不一样 7、连通图 G 中有 n 个顶点,G 的生成树是( (A)包含 G 的所有顶点 (C)不必包含 G 的所有顶点 )连通子图.
void reverse(Queue& Q, Stack& S) { ELEM X; while (!Q.isEmpty()) { X = Q.dequeue(); S.push(X); } while (!S.isEmpty()) { X = S.pop(); Q.enqueue(X); } } 4、(10 分) int leafnodenumber (bitree *root) { if (root = = NULL) return 0; if ((root->lchild = = NULL)&&( root-> rchild = = NULL)) return 1; return (leafnodenumber (root->lchild) + leafnodenumber (root->rchild)); }
第二趟:12,16,10,18,28 第三趟:12,10,16,18 第四趟:10,12,16 第五趟:10,12 5: (1) 哈希表为:(5 分) 0 78 1 2 15 3 03 4 5 57 6 45 7 20 8 31 9 10 23 11 36 12 12
(2) 等概率下平均查找成功长度=(8*1+1*2+1*4)/10=1.4 (5 分) 四、算法设计题(30 分) 1、(5 分) 第一层 FOR 循环判断 n+1 次,往下执行 n 次, 第二层 FOR 执行次数为(n+(n-1)+(n-2)+…+1), 第三层循环受第一层循环和第二层循环的控制, 其执行次数如下表: i = 1 2 3 … n j=n n n n … n j=n-1 n-1 n-1 n-1 … … … … … j=3 3 3
(B)包含 G 的所有边 (D)必须包含 G 的所有顶点和所有的边 )
8、 设有 5000 个无序的元素, 希望用最快的速度挑选出其中前 50 个最大的元素, 最好选用 ( 法。 (A) 冒泡排序 9、下面的排序算法中, ( (A)希尔排序 (C)直接插入排序 (B)快速排序 (C)堆排序 (D)基数排序
考试中心填写: 年 考 月 试 日 用 课程名称:
湖南大学课程考试试卷
数据结构 ;试卷编号: A ;考试时间:120 分钟


一 10
二 10
三 50
四 30






总 分 100 评分:
应得分 实得分 评卷人
得 分 专业班级:
一、填空题(每空 1 分,共 10 分)
1、在具有 n 个单元的循环队列中,队满时共有
相关文档
最新文档