1、算法与数据结构习题 2一、单项选择题1算法的时间复杂度的表示方法是( ) 。A、实现算法的程序在指定机器上执行的时间B、标准程序在机器上的执行时间C、基本操作重复次数,即问题规模 n 的某个函数D、与刻画基本操作重复次数的函数同阶无穷大的函数 f(n)2在一个双向链表中,假设结点的域分别为 left, right,以及 data。其中 left、right分别为两个链域,data 是数据域。下一段程序是实现在 h 结点之后插入 p 结点的功能,其中 h 结点不空,h 的下一个结点亦不空。判断哪一段程序是正确的( ) 。A、p-right = h-right p-left = h h-right
2、 = p p-right-right = pB、p-right = h-right p-left = h h-right = p p-right-left = pC、h-right = p p-left = h p-right = h-right p-right-left = pD、p-right = h-right p-left = h h-right = p h-right-left = p3在树中,树的度与结点的度之间的关系是( ) 。A、树的度就是结点的度B、树的度为 2,结点的度可以是 0,1 和 2C、结点度中最大值为树的度D、树的度与结点的度无关4文件的基本组织方式有( ) 。A
3、、顺序组织、索引组织、散列组织和链接方式B、磁盘组织、磁带组织C、数据库组织D、关键字与非关键字5为了区别循环队列中队满与队空的条件,采用的方法是( ) 。A、不需要特别的方法B、牺牲一个存贮空间C、把队头永远放到队尾的前端D、每次出队后,移动数据6一个具有 n 个顶点的连通无向图的生成树中有( )条边。A、n-1B、nC、n/2D、n+17在待排序的元素序列基本有序的前提下,效率最高的排序算法是( ) 。A、选择排序B、插入排序C、快速排序D、归并排序8关键路径是事件结点网络中( ) 。A、最长的回路B、最短的回路C、从开始结点到完成结点的最长路径D、从开始结点到完成结点的最短路径9下面说法
4、错误的是( ) 。A、算法原地工作的含义是指不需要任何额外的辅助空间B、在相同的规模 n 下,复杂度 O(n)的算法在时间上总是优于复杂度 O(2n)的算法C、所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界D、同一个算法,实现语言的级别越高,执行效率就越高10由 3 个结点可以构造出( )种不同的有向树。A、2B、3C、4D、511如果只想得到 1000 个元素组成的序列中第 5 个最小元素之前的部分排序的序列,用( )方法最快。A、冒泡排序B、快速排序C、希尔排序D、堆排序12最大容量为 n 的循环队列,队尾指针是 rear,队头指针是 front,则队空的条件是( ) 。A、 (
5、rear+1)MOD n=front B、rear=frontC、rear+1=frontD、 (rear-1)MOD n=front134 个圆盘的 Hanoi 塔,总的移动次数为( ) 。A、7B、-8C、15D、1614一棵二叉树的前序遍历序列为 ABCDEFG,它的中序遍历序列可能是( ) 。A、CABDEFGB、ABCDEFGC、DACEFBGD、ADCFEG15动态存储管理系统中,通常可有( )种不同的分配策略。A、1B、2C、3D、416. 若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用( )存储方式最节省运算时间。 A单链表 B给出表头指针的单循环
6、链表 C双链表 D带头结点的双循环链表 17. 在循环双链表的 p 所指的结点之前插入 s 所指结点的操作是( ) 。 Ap-prior = s;s-next = p;p-prior-next = s;s-prior = p-prior Bp-prior = s;p-prior-next = s;s-next = p;s-prior = p-prior Cs-next = p;s-prior = p-prior;p-prior = s;p-prior-next = s Ds-next = p;s-prior = p-prior;p-prior-next = s;p-prior = s 18.
7、如果最常用的操作是取第 i 个结点及其前驱,则采用( )存储方式最节省时间。 A单链表 B双链表 C顺序表 D单循环链表 19. 与单链表相比,双链表的优点之一是( ) 。 A顺序访问相邻结点更灵活 B可以进行随机访问 C可以省略表头指针或表尾指针 D插入、删除操作更简单 20. 单链表中,增加一个头结点的目的是为了( ) 。 A使单链表至少有一个结点 B标识表结点中首结点的位置 C方面运算的实现 D说明单链表是线性表的链式存储 二、判断题1. 在单向链表中,在 X 指向的结点后插入结点,对应的方法与 X 是否是头指针无关。 ( )2. 在求最短路径的 Dijkstra 算法和 Floyd 算
8、法中,Dijkstra 算法只能求从一点到其他各点的最短路径,而 Floyd 算法可以求图中两点之间的最短路径。 ( )3.线性结构中,每个点至多有一个前趋和一个后继,树中一个结点至多有一个前趋和多个后继,图中的结点可以有多个前趋和多个后继。 ( )4.拓扑排序是图的另一种遍历。 ( )5.如果入队与出队的操作顺序不同,其输出元素的顺序可以与输入元素的顺序不同。 ( )6.快速排序是稳定的。 ( )7.动态查找的概念是指查找中指定关键字不断发生变化的查找。 ( )8对于任意一个图,从它的某个结点进行一次深度或广度优先遍历可以访问到该图的每个顶点。 ( ) 9在待排序的记录集中,存在多个具有相同
9、键值的记录,若经过排序,这些记录的相对次序仍然保持不变,称这种排序为稳定排序。 ( )10在平衡二叉树中,任意结点左右子树的高度差(绝对值)不超过 1。 ( )11拓扑排序是按 AOE 网中每个结点事件的最早发生时间对结点进行排序。 ( ) 12冒泡排序算法关键字比较的次数与记录的初始排列次序无关。 ( ) 三、简答题1. 算法与程序有什么区别?2.什么是线性表?3.什么是队列?什么叫队列的头?什么叫队列的尾?4.给出栈的最常用的至少 4 种操作,并说明它们的功能。5.二度树与二叉树有什么区别?6.对线性表进行二分检索的先决条件是什么?请简述二分检索的基本过程。7.什么是最佳二叉排序树?在各结
10、点等权的情况下,什么样的二叉排序树是最佳的?8.用数组结构实现堆栈时,由于数组结构的特点,我们完全可以访问数组中的任何一个元素,为什么只是从栈顶访问元素?9.试写出求循环队列长度的算法。10. 描述快速排序的处理过程。11. 假设有如下的结构定义:struct node char data; struct node * link; * p, *pre; 而且 pre 指向链表中非空元素,写一段程序生成构造 p 结点,并将其链入到 pre之后。12. 假设某棵树为三叉树,树结点中 data 为数据域,first,second, third 分别表示三叉树的三个链域。设计算法,对以 t 为根结点的
11、三叉树进行前序遍历。13. 简述顺序表和链表存储方式的特点。 算法与数据结构习题 2 参考答案一、单项选择题题号 1 2 3 4 5 6 7 8 9 10答案 D B C A B A A C A A题号 11 12 13 14 15 16 17 18 19 20答案 D B C B C D D C A C二、判断题题号 1 2 3 4 5 6 7 8 9 10 11 12答案 F F T T F F F T T T F F三、简答题1.答:算法与程序的关系十分密切,但并不等同。一般来说,一个程序并不需要满足算法的有穷性等条件,例如操作系统的程序,只要整个系统不遭到破坏,操作系统程序就永不结束。
12、另外,程序是用机器可执行的语言书写的,而算法通常没有这种限制。2.答:线性表是一个有穷元素的序列。在线性表中,有且仅有一个开始结点和一个终端结点。开始结点有一个后继但是没有前驱,终端结点有一个前驱但是没有后继。其他所有结点都有且仅有一个前驱和后继。3. 答:队列是一种线性表,特点是所有的插入都在表的一端进行,所有的删除都在表的另一端进行。可进行插入的一端称为队列的头,可进行删除的一端称为队列的尾。4. 答:Void push(ST,x) 将元素 x 插入栈 ST 的顶端Void pop(ST) 从栈 ST 顶端删除一个元素Data Type top(ST) 读 ST 栈顶端的元素Int isE
13、mpty(ST) 判断栈 ST 是否为空栈pStack createEmptyStack() 创建一个空栈5.答:二度树的两个子树没有左右区别,而二叉树的两个子树是有区别的,分别称作左子树和右子树。另外,二度树中至少有一个结点的度数为 2,而二叉树中没有这个限制。6.答:先决条件是该线性表采用顺序表表示,并按照关键码排序。二分检索的基本过程是:首先用要检索的关键码值与中间位置的结点的关键码值相比较,这个中间结点把线性表分成了两个子表,若比较结果相等,则检索完成;若不等,再根据要检索的关键码比中间结点关键码大还是小,确定下一步检索哪个子表。如此递归下去,直到找到满足条件的结点,或者确定表里没有这
14、样的结点。 7. 答:检索中平均比较次数最少的二叉排序树称为最佳二叉排序树。在各结点等权的情况下,内部路径长度最小的二叉排序树称为最佳二叉排序树。完全的二叉排序树就是其中之一。8. 答案:由于数组结构的固有特点,我们完全可以访问数组中的任何一个元素,但是,用数组结构实现堆栈时,面对的是堆栈,数组只是堆栈的物理结构,椎栈限定所有的插入与删除操作只能在一端进行,如果是任意访问数组的元素,则破坏了堆栈的结构。9. 答案:/ 是存贮空间的长度,队头指针为 front, 队尾指针为 rear int QueueLen(Q) int l = 0, f = front ; while ( f != rear
15、) f = (f + 1 ) mod n; l+; return l; 10. 答案:快速排序其处理过程是:取出某一记录,以该记录所对应的关键字为基准,将待排序的记录分成两部分,便得基准位置前所有记录的关键字均小于或等于基准位置记录的关键字,基准位置后面的记录的关键字将大于或等于基准位置记录的关键字,然后再分别对基准位置前后的记录序列作为待排序的子序列,重复上述过程,直到所有记录全部排序好为止。11. 答案:ch=getchar(); /取一个数据元素/ p=(struct node *)malloc(sizeof(struct node); /申请一个新结点/ p-data=ch; p-link = pre-link; pre-link = p;12. 答案:void tran( t) if (t = NULL) return ; printf(t-data); tran( t-first); tran( t-second); tran( t-third); 13. 答案:顺序表的优点是可以随机访问数据元素,缺点是大小固定,不利于增减结点(增减结点操作需要移动元素) 。链表的优点是采用指针方式增减结点,非常方便(只需改变指针指向,不移动结点) 。其缺点是不能进行随机访问,只能顺序访问。另外,每个结点上增加指针域,造出额外存储空间增大。