北京大学数据结构与算法信科数算2007秋期末考试题

合集下载

2007《数据结构》期末试卷_A_答案

2007《数据结构》期末试卷_A_答案

一、(本题10分)(1)简述线性表的两种存储结构的主要优缺点及各自适用的场合。

(2)在折半查找和表插入排序中,记录分别应使用哪种存储结构,并用一句话简述理由。

答:(1)顺序存储是按索引(如数组下标)来存取数据元素,优点是可以实现快速的随机存取,缺点是插入与删除操作将引起元素移动,降低效率。

对于链式存储,元素存储采取动态分配,利用率高。

缺点是须增设指针域,存储数据元素不如顺序存储方便。

优点是插入与删除操作简单,只须修改指针域。

(2)在折半查找中,记录使用顺序存储,可以快速实现中点的定位;在表插入排序中,记录使用静态链表,可以降少移动记录的操作。

二、(本题15分)在带头结点的非空线性链表中,试设计一算法,将链表中数据域值最小的那个结点移到链表的最前面,其余各结点的顺序保持不变。

要求:不得额外申请新的链结点。

解:程序如下:typedef struct node {int data;struct node * next;}Node,*LinkList;void MinFirst(LinkList L){Node *p,*q,*ptrmin;if(L->next == NULL) return; //空表ptrmin = L; //ptrmin指向当前最小结点的前一个结点p = L->next;//p指向当前结点的前一个结点while(p->next!=NULL) {if( p->next->data < ptrmin->next->data ) ptrmin = p;p = p->next;}//q指向最小结点,并从链表中删除q = ptrmin->next; ptrmin->next = q->next;q->next = L->next; L->next = q; //q指向的最小结点插入到链表头}三、(本题15分)编写函数判断一棵二叉树是否不含有度为1的结点,若任何结点的度都不为1,则返回TRUE,否则返回FALSE。

2007级算法与数据结构试题A

2007级算法与数据结构试题A

山西财经大学2008—2009学年第 2学期期末算法与数据结构课程试卷(A卷)1、本卷考试形式为闭卷,考试时间为两小时。

2、考生不得将装订成册的试卷拆散,不得将试卷或答题卡带出考场。

3、考生只允许在密封线以外答题,答在密封线以内的将不予评分。

4、考生答题时一律使用蓝色、黑色钢笔或圆珠笔(制图、制表等除外)。

5、考生禁止携带手机、耳麦等通讯器材。

否则,视为作弊。

一、单项选择题(共10小题,每题 1分,共计10 分)二、判断题(共10小题,每题1 分,共计10分)三、简答题(共4小题,每题5 分,共计20分)四、应用题(共8小题,1-6小题必做,7、8任选一,1-2每小题5 分,3-8每小题6分,共计40分)五、算法设计题(1、2小题任选一,3、4小题任选一,每题10分,共计20分)一、单项选择题(共10小题,每题 1分,共计10 分)1.若某线性表最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则下列的存储方式中最节省时间的是( )。

A.单链表B.仅有头指针的单循环链表C.双向链表D.仅有尾指针的单循环链表2. 下面给出的算法段是要把一个p所指新结点,插入到非空双向链表中,作为该双链中q所指结点的前驱结点,能正确完成要求的算法段是()。

A.p->llink=q->llink; B.q->llink=p;p->rlink=q; p->rlink=q;q->llink->rlink=p; q->llink->rlink=p;q->llink=p; p->llink=q->llink;C.p->rlink=q; D.p->rlink=q;p->llink=q->llink; p->llink=q->llink;q->llink=p; q->rlink=p;q->llink->rlink=p; q->llink->rlink=p;3.下列选项中,()是非线性数据结构。

数据结构与算法分析_六套期末复习题(含答案)

数据结构与算法分析_六套期末复习题(含答案)

试题一一、单项选择题(每小题2分,共20分)(1)以下数据结构中哪一个是线性结构?()A)有向图B)队列C)线索二叉树D)B树(2)在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下()语句序列。

A)p=q; p->next=q; B)p->next=q;q->next=p;C)p->next=q->next; p=q; D)q->next=p->next;p->next=q;(3)()不是队列的基本运算。

A)在队列第i个元素之后插入一个元素B)从队头删除一个元素C)判断一个队列是否为空D)读取队头元素的值(4)字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成()个不同的字符串。

A)14 B)5 C)6D)8(5)由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为()。

A)11 B)35 C)19 D)53 以下6-8题基于下图:(6)该二叉树结点的前序遍历的序列为()。

A)E、G、F、A、C、D、B B)E、A、G、C、F、B、DC)E、A、C、B、D、G、F D)E、G、A、C、D、F、B(7)该二叉树结点的中序遍历的序列为()。

A)A、B、C、D、E、G、F B)E、A、G、C、F、B、DC)E、A、C、B、D、G、F D)B、D、C、A、F、G、E(8)该二叉树的按层遍历的序列为()。

A)E、G、F、A、C、D、B B)E、A、C、B、D、G、FC)E、A、G、C、F、B、D D)E、G、A、C、D、F、B(9)下面关于图的存储的叙述中正确的是()。

A)用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关B)用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关C)用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关D)用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关(10)设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果?()A)a,g,h,m,n,p,q,x,z B)a,g,m,h,q,n,p,x,zC)g,m,q,a,n,p,x,h,z D)h,g,m,p,a,n,q,x,z二、(本题8分)对于序列{8,18,6,16,29,28},试写出堆顶元素最小的初始堆。

数据结构与算法 试题及答案

数据结构与算法 试题及答案

绪论一、填空题1、数据的逻辑结构是数据元素之间的逻辑关系,通常有下列4类:集合_、线性结构_、树型结构_、图状结构_。

2、数据的存储结构是数据在计算机存储器里的表示,主要有4种基本存储方法:顺序存储_、链式存储_、索引存储_、散列存储_。

二、选择题1、一个算法必须在执行有穷步之后结束,这是算法的(B )。

A、正确性B、有穷性C、确定性D、可行性2、算法的每一步必须有确切的定义,也就是说,对于每步需要执行的动作必须严格、清楚地给出规定,这是算法的(A)。

A、正确性B、有穷性C、确定性D、可行性3、算法原则上都是能够有机器或人所完成的。

整个算法好象是一个解决问题的“工作序列”,其中的每一步都是我们力所能及的一个动作,这是算法的(D)A、正确性B、有穷性C、确定性D、可行性三、简单题1、什么是数据结构?什么是算法?两者有什么关系?什么是数据结构?数据结构是按某种逻辑关系组织起来的一批数据(或称带结构的数据元素的集合)应用计算机语言并按一定的存储表示方式把它们存储在计算机的存储器中,并在其上定义了一个运算的集合。

什么是算法?广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”两者有什么关系?算法与数据结构关系密切。

选择的数据结构是否恰当直接影响算法的效率;而数据结构的优劣由算法的执行来体现。

2、什么是复杂度和空间复杂度?时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。

3、数据的逻辑结构分几种?存储结构又有哪几种?数据的逻辑结构:结构定义中的“关系”,描述的是数据元素之间的逻辑关系;包括线性结构(线性表、栈、队、串、数组)和非线性结构(图形结构、树形结构);数据的存储结构(物理结构):数据结构在计算机中的表示(又称映像),包括数据元素的表示和关系德表示。

有顺序存贮(向量存贮)、链式存贮、索引存贮、散列存贮。

线性表1、一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5 个元素的地址是( B)。

数据结构试卷期末试卷(2007年06级C)(信息)

数据结构试卷期末试卷(2007年06级C)(信息)

数据结构试题(C卷)学号:姓名:评分: . 一.单项选择题(30分)1.对二叉树从1开始进行连续编号,要求每个结点的编号大于其左右孩子的编号,同一个结点的左右孩子中,其左孩子的编号小于其右孩子的编号,则可采用_______次序的遍历实现编号。

a.先序 b.中序 c.后序 d.从根开始的层次遍历2.在有n个叶子结点的哈夫曼树中,其结点总数为_________。

a.不确定b. 2nc. 2n+1d. 2n-13.任何一个无向连通图的最小生成树_______。

a.只有一棵b. 有一棵或多棵c. 一定有多棵d. 可能不存在4.将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为_________。

a. 98b. 99c. 50d. 485.下列排序算法中,______算法可能会出现下面情况:初始数据有序时,花费的时间反而最多。

a.堆排序 b.冒泡排序 c.快速排序 d.SHELL排序6.下图为AOV网,其可能的拓扑有序序列为________。

a. CAEBDF;b. CABFED;c. CABEDFd. CEABFD7.将上图看作无向图,其从C 出发的广度优先遍历结果为_______:a. CABDEFb. CDFEBAc. CDEAFBd. CABFED则结点E在二叉树的第层。

a、1b、2c、3d、49.下列序列中,_______是执行第一趟快速排序后得到的序列(排序的关键字类型是字符串)。

a. [da,ax,eb,de,bb]ff[ha,gc]b. [cd,eb,ax,da]ff[ha,gc,bb]c. [gc,ax,eb,cd,bb]ff[da,ha]d. [ax,bb,cd,da]ff[eb,gc,ha]10.二分查找法要求查找表中各元素的键值必须是________排列。

a. 递增或递减b. 递增c. 递减d. 无序二.填空作图简答题(共70分):1.如下图已知哈希表为空,哈希函数为H(Key)= Key MOD 11, 冲突解决方法分别用线性探测再散列和二次探测再散列。

数据结构与算法分析—期末复习题及答案

数据结构与算法分析—期末复习题及答案

单选题(每题 2 分,共20分)1.对一个算法的评价,不包括如下(B )方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( A )。

A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3.对线性表,在下列哪种情况下应当采用链表表示?( B )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4.一个栈的输入序列为 1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 36.若需要利用形参直接访问实参时,应将形参变量说明为(D )参数。

A.值B.函数C.指针D.引用8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的( A )。

A.行号B.列号C.元素值D.非零元素个数10.从二叉搜索树中查找一个元素时,其时间复杂度大致为(C )。

A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题 6 分,共24分)1.数据结构是指数据及其相互之间的_联系。

当结点之间存在M对N(M:N)的联系时,称这种结构为__图__。

2.队列的插入操作是在队列的___尾_进行,删除操作是在队列的_首_进行。

3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是___top==0___(要超出才为满)_______________。

4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为___O(1)__,在表尾插入元素的时间复杂度为___ O(n)___。

北京大学数据结构与算法2016-2017数据结构与算法final-ans

北京大学信息科学技术学院考试试卷考试科目:数据结构与算法A 姓名:学号:考试时间: 2016 年 1 月 6 日任课教师:以下为试题和答题纸(答案写在答题纸上),包括本页共 6 页。

第一题填空题(每空1分,共8分)1.设无向图G = (V,E)中V={1, 2, 3, 4, 5, 6, 7},E={(1,2), (1,3), (2,3), (4,5), (3,6),(4,7), (5,7)}。

则图G包含的不同生成森林的个数为_____9____。

注释:其中若两个生成森林的边集不同,则认为它们是不同的生成森林。

2.若对下面的无向图以1为起点运行单源最短路径的Dijkstra算法,则在Dijkstra算法的过程中,每一步依次被选出的顶点依次是_1,2,4,3,7,5,6,8,9,10___。

若忽略边权,以6为起点进行一次广度优先周游,将得到一棵广度优先搜索的生成树。

设仅包含一个结点的树高度为1,则该生成树的高度为_3_,树的最深层结点集合为_1,5,7,10__。

第一空回答2,4,3,7,5,6,8,9,10也算对3.用某种排序方法对序列(25, 84, 21, 47, 15, 27, 68, 35, 20)进行排序时,若序列的变化情况如下,则所采用的排序方法为__快速排序__。

25, 84, 21, 47, 15, 27, 68, 35, 2020, 15, 21, 25, 47, 27, 68, 35, 8415, 20, 21, 25, 35, 27, 47, 68, 8415, 20, 21, 25, 27, 35, 47, 68, 844.假设Shell排序的增量序列是(2k, 2k-1, … , 2, 1),其中k=[log2 n]。

若待排序序列是正序的(已经排好)或逆序的,则Shell排序的时间复杂度分别是__O(nlogn)_、O(nlogn)_。

各0.5分5.设输入的关键码满足k1>k2>…>k n,缓冲区大小为m。

北京大学数据结构与算法2016-2017数据结构期末考试题试卷答案版

2. 已知一组关键码为(26,36,41,38,44,15,68,12,06,51,25),散 列表长度为 15,用线性探查法解决冲突构造这组关键码的散列表。散列函 数为:h(k)= k %13。请回答: 1) 构造顺序插入上述关键码集合后的散列表;
2) 下一记录放到第 11 个槽和第 7 个槽中的概率分别是多少? 下一条记录放在第 11 个槽中的概率是 2/13 放到第 7 个槽中的概率是 9/13
学校倡议所有考生以北京大学学生的荣誉与诚信答卷,共同维护北京大 学的学术声誉。
以下为试题和答题纸,共 页。
得分 一、选择填空题(每空 1 分,共 11 分)(答案写在答题纸上)
1. G 是一个非连通无向图,共有 21 条边,则图 G 至少有 8 个顶点。 2. 对于一个包含 N(N>1)个顶点的图,假定任意两点间最多只有一条边,
7. A[N][N]是对称矩阵,现将下三角矩阵按行存储到一维数组 T[N(N+1)/2]中
(包括对角线),则对任一上三角元素 A[i][j]其对应值(0 <= i <= j < N)在
T[k]中的下标 k 是 j(j+1)/2+i

8. 在一棵空 AVL 树中,顺序插入如下关键码:{5, 9, 4, 2, 1, 3, 8},请问全部 插入后,在等概率下查找成功的平均检索长度为 17/7 。
9. 已知广义表 C=(c, (d, A), B, e),则广义表 C 的深度为 2

tail(head(tail(C)))的运算结果为 (A) 。
得分 二、简答辨析题(每题 3 分,共 15 分)
1. 如果要找出一个具有 n 个元素集合中的第 k (1≤k≤n)个最小元素,所学过的 排序方法中哪种最适合?给出实现的基本思想。 答案:在具有 n 个元素的集合中找第 k 个最小元素,应使用快速排序算法。 其基本思想如下:设 n 个元素的集合用一维数组表示,其第一个元素的下 标为 1,最后一个元素下标为 n。以第一个元素为“枢轴”,经过快速排序的 一次划分,找到“枢轴”的位置 i,若 i = k,则该位置的元素下标为 n;若 i > k 则在 1 至 i-1 间继续进行快速排序的划分;若 i < k 则在 i+1 至 n 间继续 进行快速排序的划分。这种划分一直进行到 i = k 为止,第 i 位置上的元素 就是第 k 个最小元素。

数据结构与算法分析—期末复习题及答案

数据结构与算法分析—期末复习题及答案1. 简答题a) 什么是数据结构?数据结构是一种组织和存储数据的方法,它涉及到将数据元素以及它们之间的关系组织成一种特定的方式,以便于有效地访问和操作。

b) 数据结构的分类有哪些?数据结构可以分为线性结构和非线性结构。

线性结构包括数组、链表、栈和队列等;非线性结构包括树和图等。

c) 什么是算法?算法指的是完成特定任务或求解特定问题的一系列步骤或指令。

算法需要满足正确性、可读性、健壮性和高效性等特性。

d) 算法的时间复杂度和空间复杂度是什么?时间复杂度是指在算法执行过程中所需的时间资源,空间复杂度是在算法执行过程中所需的存储空间资源。

2. 选择题a) 在排序算法中,如果待排序序列已经基本有序,以下哪个算法的性能最优?选项:A. 快速排序B. 冒泡排序C. 插入排序D. 归并排序正确答案:C. 插入排序b) 以下哪个数据结构通常用于实现递归算法?选项:A. 数组B. 链表C. 栈D. 队列正确答案:C. 栈3. 填空题a) 计算以下给定二叉树的前序遍历结果:A/ \B C/ \ / \D E F G正确答案:A, B, D, E, C, F, Gb) 给出选择排序算法的伪代码:```for i in range(len(arr)):min_index = ifor j in range(i+1, len(arr)):if arr[j] < arr[min_index]:min_index = jarr[i], arr[min_index] = arr[min_index], arr[i]```4. 案例题假设有一个包含100个元素的整数数组arr,对该数组进行排序后返回结果。

请使用任意一种排序算法,并给出算法的时间复杂度。

解答示例:我们可以使用快速排序算法来对数组进行排序,时间复杂度为O(nlogn)。

下面是该算法的Python代码实现:```def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)arr = [5, 3, 2, 8, 1, 4, 7, 6, 9]sorted_arr = quick_sort(arr)print(sorted_arr)```运行结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]5. 解答题请描述并给出示例说明动态规划算法的应用场景。

数据结构期末考试题及答案

数据结构期末考试题及答案一、单项选择题(每题3分,共30分)1. 在数据结构中,最基本的数据结构是()。

A. 线性结构B. 树形结构C. 图形结构D. 非线性结构答案:A2. 栈是一种特殊的线性表,其特点是()。

A. 先进先出B. 先进后出C. 后进先出D. 后进后出答案:C3. 在二叉树中,度为2的结点数为n,度为1的结点数为m,度为0的结点数为p,则m的值为()。

A. n-1B. n+1C. p-1D. p+1答案:A4. 哈希表的构造方式是()。

A. 线性结构B. 树形结构C. 链式结构D. 索引结构答案:D5. 在图的遍历过程中,深度优先搜索算法采用的是()。

A. 队列B. 栈C. 链表D. 树答案:B6. 快速排序算法的时间复杂度在最坏情况下是()。

A. O(n)B. O(nlogn)C. O(n^2)D. O(2^n)答案:C7. 以下哪个排序算法是不稳定的排序算法()。

A. 冒泡排序B. 快速排序C. 归并排序D. 堆排序答案:B8. 在数据库中,索引通常采用哪种数据结构()。

A. 线性表B. 树形结构C. 图形结构D. 散列表答案:B9. 以下哪个不是二叉搜索树的性质()。

A. 左子树上所有结点的值都小于它的根结点的值B. 右子树上所有结点的值都大于它的根结点的值C. 左、右子树也分别为二叉搜索树D. 所有结点的值都相等答案:D10. 在图的表示方法中,邻接矩阵适用于表示()。

A. 稠密图B. 稀疏图C. 有向图D. 无向图答案:A二、填空题(每题4分,共20分)1. 在数据结构中,一个算法的空间复杂度是指算法在执行过程中需要的___________。

答案:存储空间2. 堆排序中,调整堆的过程称为___________。

答案:堆化3. 在图的遍历中,广度优先搜索使用的辅助数据结构是___________。

答案:队列4. 一个长度为n的链表,删除第i个元素的时间复杂度是___________。

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

北京大学信息科学技术学院考试试卷 考试科目:数据结构与算法A 姓名: 学号: 考试时间: 2008年 1 月 9 日 教师: 张铭、赵海燕、王腾蛟、宋国杰
以下为试题和答题纸,共 4 页。

题号 一 二 三 四 五六 七 八 总分 分数 阅卷人
第 1 页
一、(共30分,每空3分)填空
1. 1.无向图G=(V , E),其中:V={a, b, c, d, e, f}, E={(a, b), (a, e), (a, c), (b, e), (c,
f), (f, d), (e, d)},对该图进行深度优先遍历,得到的顶点序列正确的是____。

A .a,b,e,c,d,f
B .a,c,f,e,b,d
C .a,e,b,c,f,d
D .a,e,d,f,c,b
2. 下图中的强连通分量的个数为________个。

3. 设有向图G 如下:
写出所有拓扑序列:___________________________________________
添加一条弧________________________之后, 则仅有唯一的拓扑序列. 4. 请问下面哪些操作在已排序数据上实施比在无序的数据上快 ?
A .找最小值 B. 计算算术平均值 C. 找中位数 D. 找出现次数最多的值
5. 序列{15,142,51,68,121,46,57,575,60,89,185 }按最低位优先法进
行基数排序,进行一次分配和收集后得到的序列 。

6. 设输入的关键码满足k 1>k 2>…>k n ,缓冲区大小为m ,用最小值堆进行置换-选择
排序方法可产生____个初始归并段。

7. 在包含n 个关键码的线性表中进行顺序检索,若检索第i 个关键码的概率为p i , 且
分布如下:
n n n n p p p p 21,21,....,41,211121====−−
成功检索的平均检索长度是_______________。

8. 假设计算机系统有2048个字节的磁盘块,要存储的每一条记录中4个字节是关
键码,磁盘指针4个字节,64个字节是数据字段。

记录已经排序,顺序地存储
在磁盘文件中。

如果使用大小为4M的线性索引,那么最多有______个索引项,最多可以有____条记录.
二、(25分)辨析题
1.(6分)对于连通的无向图,采用Dijkstra最短路径算法,在Dist数组中能否给出足够形成一棵支撑树的信息?是否能给出一棵最小支撑树(MST)?请证明你的结论。

2.(6分)有8个顺串,每个顺串的第一个记录的关键码分别为14,22,24,15,16,11,100,18,而第二个记录的关键码分别为26,38,30,26,50,28,110,40。

请画出对顺串开始8路合并时的败者树。

从败者树输出—个全局优胜者(并有相应的一个记录进入败者树)后需对败者树进行重构,请画出输出第—个全局优胜者并进行重构后的败者树。

3.(7分)设散列表为HT[13],散列函数为h (key) = key%13。

用闭散列法解决冲突,对下列关键码序列12,23,45,57,20,03,78,32,15,33造表。

(1) 采用线性探查法寻找下一个空位,画出相应的散列表。

(2) 采用双散列法寻找下一个空位,再散列函数为rh (key) = (7*key) % 11 + 1,
寻找下一个空位的公式为hi = (h i-1 + rh (key)) % 13,h1 = h(key),画出相
应的散列表。

4.(6分)设有3阶B树如下图所示:
(1) 在该B树上插入关键码97,画出插入后的B树。

(2) 在(1)得到的B树基础上删除66,画出删除后的B树。

第 2 页
三、(共15分,每空3分)算法填空
设a 和b是两个分别包含n 个已排序数据的数组。

如果将a和b中的2n个数进行全体排序,此时处于整体排序后的序列中第n个位置上的数称为这2n个元素的中位数。

下面的代码片段用来计算数组a和b中的中位数,请在空白的位置填写合适的语句,以完成此功能。

int bigger(int a, int b) { // 函数返回a,b中较大者,相等则返回a if (a > b) return a; else return b;
}
int search(int a[],int b[], int s, int t, int n) { // 查找区间[s,t]
int i = (s + t) / 2;
int j = (n - i - 2);
_______________)
if
(_____________(1)
return bigger(b[j],a[i]); // 返回b[j],a[i] 中较大者if (a[i + 1] < b[j])
return ______(2)___________________;
else return ______(3)___________ ______;
}
int search_help(int a[],int b[], int n) {
if (_____________(4)_________________)
cout << b[n - 1];
____________(5)_________________)
else
if
cout << a[n - 1];
else cout << search(a, b, 0, n - 1, n) << endl;
}
四、(共30分,每题10分)算法设计
1.简单路径条数。

给出图的ADT如下:
Class Graph {
Public:
int VerticesNum();
int EdgesNum();
Edge FirstEdge(int oneVertex);
Edge NextEdge(Edge preEdge);
bool IsEdge(Edge onEdge);
int FromVertex(Edge oneEdge);
int ToVertex(Edge oneEdge);
第 3 页
第 4 页
};
设计算法过出图G 中从顶点i 到顶点j 之间长度为len 的简单路径条数:
int GetPathNum_Len(Graph& G , int i, int j, int len);
2. 编写考虑到墓碑(TOMB )问题的散列表插入算法,算法中不允许有重复关键
码插入。

下面是散列表的定义。

template <class Key, class Elem, class KEComp, class EEComp> class hashdict {
private:
Elem* HT; // 散列表
int M; // 散列表大小
int currcnt; // 现有元素数目
Elem EMPTY; // 空槽
int p(Key K, int i) // 探查函数
int h(Key K) const ; // 散列函数
Key getKey(Elem e); // 获取元素e 的关键码值
public:
hashdict(int sz, Elem e) { // 构造函数, e 用来定义空槽
M = sz; EMPTY = e;
currcnt = 0; HT = new Elem[sz];
for (int i=0; i<M; i++) HT[i] = EMPTY;
}
~hashdict() { delete []HT; }
bool hashSearch(const Key&, Elem&) const;
bool hashInsert(const Elem&);
Elem hashDelete(const Key& K);
int size() { return currcnt; } // 散列表中现有元素数
};
墓碑就用常量TOMB 表示。

插入函数的原型如下:
template <class Key, class Elem, class KEComp, class EEComp>
bool hashdict<Key, Elem, KEComp, EEComp>::hashInsert(const Elem &e)
3. 实验证明,Shell 排序的增量序列按下述条件
13h h 1
h i 1i 1+==+
直到h t (使得h t+2 ≥ n)选择时排序的效率较好。

例如,对于n =10000时的增量序列为1,4,13,40,121,364,1093,3280。

请给出按此增量序列实现的shell排序算法的代码。

第 5 页。

相关文档
最新文档