第一章概论 自测题答案
一、填空题
. 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科。 . 数据结构被形式地定义为(, ),其中是数据元素的有限集合,是上的关系有限集合。 . 数据结构包括数据的 逻辑结构、数据的存储结构和数据的运算这三个方面的内容。 . 数据结构按逻辑结构可分为两大类,它们分别是线性结构和非线性结构。 . 线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。 . 在线性结构中,第一个结点 没有前驱结点,其余每个结点有且只有 个前驱结点;最后一个结点没有后续结点,其余每个结点有且只有个后续结点。 . 在树形结构中,树根结点没有前驱 结点,其余每个结点有且只有个前驱结点;叶子结点没有后续 结点,其余每个结点的后续结点数可以任意多个。
. 在图形结构中,每个结点的前驱结点数和后续结点数可以任意多个。
.数据的存储结构可用四种基本的存储方法表示,它们分别是顺序 、 链式 、 索引 和 散列 。 . 数据的运算最常用的有种,它们分别是插入 、 删除、修改、 查找 、排序。 . 一个算法的效率可分为时间效率和空间效率。
二、单项选择题
( ). 非线性结构是数据元素之间存在一种:
)一对多关系 )多对多关系 )多对一关系 )一对一关系
( ). 数据结构中,与所使用的计算机无关的是数据的结构;
) 存储 ) 物理 )逻辑) 物理和存储
( ). 算法分析的目的是:
) 找出数据结构的合理性 ) 研究算法中的输入和输出的关系 ) 分析算法的效率以求改进) 分析算法的易懂性和文档性
( ). 算法分析的两个主要方面是:
) 空间复杂性和时间复杂性) 正确性和简明性
) 可读性和文档性 ) 数据复杂性和程序复杂性
( ). 计算机算法指的是:
) 计算方法 ) 排序方法 ) 解决问题的有限运算序列) 调度方法
( ). 计算机算法必须具备输入、输出和等个特性。
) 可行性、可移植性和可扩充性 )可行性、确定性和有穷性 ) 确定性、有穷性和稳定性 ) 易读性、稳定性和安全性
三、简答题
.【严题集②】数据结构和数据类型两个概念之间有区别吗?
答:简单地说,数据结构定义了一组按某些关系结合在一起的数组元素。数据类型不仅定义了一组带结构的数据元素,而且还在其上定义了一组操作。
. 简述线性结构与非线性结构的不同点。
答:线性结构反映结点间的逻辑关系是 一对一的,非线性结构反映结点间的逻辑关系是多对多的。
四、【严题集④】分析下面各程序段的时间复杂度
. (; <; ) (; <; ) [][]; 答:(*) . ; (; <; ) (; <; ) ; 解:因为共执行了……+ (),所以执行时间为() . ;
; <; )
(; <; ) [][]; ;
答:()
1 / 18
个人整理精品文档,仅供个人学习使用
. ; (<)
*; 答:()
五、设有数据逻辑结构(),试按各小题所给条件画出这些逻辑结构的图示,并确定相对于关
系,哪些结点是开始结点,哪些结点是终端结点?
. 【严蔚敏习题集 ②】 {} {(),(),() }
答: →→→—无直接前驱,是首结点 —无直接后继是尾结点
。{,…}
{(),(),(),(),(),(), (),() }
答: 此图为树形结构 —无直接前驱,是根结点 —无直接后继是叶子结点
.{,…}
{(),(),(),(),(),(), (),(),(), (),()}
答: 此图为图形结构 ,—无直接前驱,是开始结点 —无直接后继是终端结点
() ()
第章自测卷答案
一、填空
. 【严题集①】在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。
. 线性表中结点的集合是有限的,结点间的关系是一对一的。
. 向一个长度为的向量的第个元素(≤≤)之前插入一个元素时,需向后移动个元素。
. 向一个长度为的向量中删除第个元素(≤≤)时,需向前移动个元素。
. 在顺序表中访问任意一结点的时间复杂度均为(),因此,顺序表也称为随机存取的数据结构。
. 【严题集①】顺序表中逻辑上相邻的元素的物理位置必定相邻。单链表中逻辑上相邻的元素的物理位置不一定 相邻。 2 / 18
个人整理精品文档,仅供个人学习使用
. 【严题集①】在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。
. 在个结点的单链表中要删除已知结点*,需找到它的前驱结点的地址,其时间复杂度为()。
二、判断正误(在正确的说法后面打勾,反之打叉)
( × ). 链表的每个结点中都恰好包含一个指针。
答:错误。链表中的结点可含多个指针域,分别存放多个指针。例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。
( × ). 链表的物理存储结构具有同链表一样的顺序。错,链表的存储结构特点是无序,而链表的示意图有序。 ( × ). 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前
移动。错,链表的结点不会移动,只是指针内容改变。
( × ). 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。
( × ). 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
错,正好说反了。顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”
( × ). 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
错,前一半正确,但后一半说法错误,那是链式存储的优点。顺序存储方式插入、删除运算效率较低,在表长为的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。
( × ). 线性表在物理存储空间中也一定是连续的。
错,线性表有两种存储方式,顺序存储和链式存储。后者不要求连续存放。
( × ). 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
错误。线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。
( × ). 顺序存储方式只能用于存储线性结构。
错误。顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。(后一节介绍) ( × ). 线性表的逻辑顺序与存储顺序总是一致的。
错,理由同。链式存储就无需一致。
三、单项选择题
( ).数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:
()存储结构 ()逻辑结构 ()顺序存储结构 ()链式存储结构
( ).一个向量第一个元素的存储地址是,每个元素的长度为,则第个元素的地址是
() () () ()
( ). 在个结点的顺序表中,算法的时间复杂度是()的操作是:
(A) 访问第个结点(≤≤)和求第个结点的直接前驱(≤≤) (B) 在第个结点后插入一个新结点(≤≤) (C) 删除第个结点(≤≤) (D) 将个结点从小到大排序
( ). 向一个有个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素
() () () ()
( ). 链接存储的存储结构所占存储空间:
(A) 分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 (B) 只有一部分,存放结点值
3 / 18
个人整理精品文档,仅供个人学习使用
() 只有一部分,存储表示结点间关系的指针
() 分两部分,一部分存放结点值,另一部分存放结点所占单元数
( ). 链表是一种采用存储结构存储的线性表;
()顺序 ()链式 ()星式 ()网状
( ). 线性表若采用链式存储结构时,要求内存中可用存储单元的地址:
()必须是连续的 ()部分地址必须是连续的 ()一定是不连续的 ()连续或不连续都可以
( ). 线性表L在情况下适用于使用链式结构实现。
(A)需经常修改L中的结点值 (B)需不断对L进行删除插入 (C)L中含有大量的结点 (D)L中结点结构复杂
( ). 单链表的存储密度
(A)大于; (B)等于; (C)小于; (D)不能确定
( ). 设、、为个结点,整数,,代表地址,则如下的链式存储结构称为
(A)循环链表 (B)单链表 (C)双向循环链表 (D)双向链表
四、简答题
. 【严题集②】试比较顺序存储结构和链式存储结构的优缺点。在什么情况下用顺序表比链表好? 答:① 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大(=?),存储空间利用率高。缺点:插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
优点:插入或删除元素时很方便,使用灵活。缺点:存储密度小(<),存储空间利用率低。 顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。 若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;
若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
.【严题集①】描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。在单链表中设置头结点的作用是什么?
答:首元结点是指链表中存储线性表中第一个数据元素的结点。为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。若链表中附设头结点,则不管线性表是否为空表,头指针均不为空。否则表示空表的链表的头指针为空。这三个概念对单链表、双向链表和循环链表均适用。是否设置头结点,是不同的存储结构表示同一逻辑结构的问题。
头结点 头指针 首元结点 简而言之,
头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针; 头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息(内放头指针?那还得另配一个头指针!!!)
4 / 18
个人整理精品文档,仅供个人学习使用
首元素结点是指链表中存储线性表中第一个数据元素的结点。
第章 栈和队列 自测卷答案
一、填空题(每空分,共分)
. 【李春葆】向量、栈和队列都是 线性 结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。
. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。不允许插入和删除运算的一端称为栈底。 . 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。 . 在一个循环队列中,队首指针指向队首元素的前一个位置。 . 在具有个单元的循环队列中,队满时共有个元素。
. 向栈中压入元素的操作是先 移动栈顶指针 ,后 存入元素 。
. 从循环队列中删除一个元素时,其操作是 先 移动队首指针 ,后 取出元素 。 . 〖年统考题〗带表头结点的空循环双向链表的长度等于。 解:
二、判断正误(判断下列概念的正确性,并作出简要的说明。)(每小题分,共分)
( ×). 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。
( × ). 在表结构中最常用的是线性表,栈和队列不太常用。
错,不一定吧?调用子程序或函数常用,中也用队列。 ( √ ). 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。 ( √ ). 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
( × ). 栈和链表是两种不同的数据结构。 错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
( × ). 栈和队列是一种非线性数据结构。 错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
( √ ). 栈和队列的存储方式既可是顺序方式,也可是链接方式。
( √ ). 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
( × ). 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。 错,后半句不对。
( × ). 一个栈的输入序列是,则栈的输出序列不可能是。
错,有可能。
三、单项选择题(每小题分,共分)
( ).〖年元月统考题〗栈中元素的进出原则是
A.先进先出 B.后进先出 C.栈空则进 D.栈满则出
( ).〖李春葆〗若已知一个栈的入栈序列是,,,…,,其输出序列为,,,…,,若,则为
A. B. C. D.不确定
解释:当,即是最先出栈的,根据栈的原理,必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是,,,…,,则出栈的序列是,…,,,。 (若不要求顺序出栈,则输出序列不确定)
5 / 18
个人整理精品文档,仅供个人学习使用
( ).〖李春葆〗判定一个栈(最多元素为)为空的条件是
A.><> B.> C.><> D.>
( ).〖李春葆〗判定一个队列(最多元素为)为满队列的条件是
A.> - > B.> - > - C.> >D.> >
解:队满条件是元素个数为。由于约定满队时队首指针与队尾指针相差,所以不必再减了,应当选。当然,更正确的答案应该取模,即:> (>)
( ).数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位
置,假定队列中元素的个数小于n,计算队列中元素的公式为 (A)-; (B)(+-) ; (C)+-; (D)(+-)
. 【初程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
设有个数据元素、、和,对他们分别进行栈操作或队操作。在进栈或进队操作时,按、、、次序每次进入一个元素。假设栈或队的初始状态都是空。
现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是,第二次出栈得到的元素是是;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是,第二次出队得到的元素是。经操作后,最后在栈中或队中的元素还有个。 供选择的答案: ~:①②③④ : ①②③④
答:=, , , ,
. 【初程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
栈是一种线性表,它的特点是。设用一维数组[,…]来表示一个栈,[]为栈底,用整型变量指示当前栈顶位置,[]为栈顶元素。往栈中推入()一个新元素时,变量的值;从栈中弹出()一个元素时,变量的值。设栈空时,有输入序列,,,经过,,,,操作后,从栈中弹出的元素的序列是,变量的值是。 供选择的答案:
: ① 先进先出 ②后进先出 ③进优于出 ④出优于进 ⑤ 随机进出 ,: ① 加 ②减 ③不变 ④清 ⑤ 加 ⑥减 :①②③④⑤⑥ :①②③④⑤ 答案:,,,,
注意,向地址的高端生长,称为向上生成堆栈;向地址低端生长叫向下生成堆栈,本题中底部为,向地址的低端递减生成,称为向下生成堆栈。
. 【初程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
在做进栈运算时,应先判别栈是否;在做退栈运算时,应先判别栈是否。当栈中元素为个,做进栈运算时发生上溢,则说明该栈的最大容量为。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的分别设在这片内存空间的两端,这样,只有当时,才产生上溢。 供选择的答案: ,:①空 ② 满 ③ 上溢 ④ 下溢
6 / 18
个人整理精品文档,仅供个人学习使用
: ①②③④
: ① 长度 ②深度 ③ 栈顶 ④ 栈底
:①两个栈的栈顶同时到达栈空间的中心点 ②其中一个栈的栈顶到达栈空间的中心点 ③两个栈的栈顶在达栈空间的某一位置相遇 ④两个栈均不空,且一个栈的栈顶到达另一个栈的栈底 答案:=, , , ,
四、简答题(每小题分,共分)
. 【严题集①和①】说明线性表、栈与队的异同点。
刘答:相同点:都是线性结构,都是逻辑结构的概念。都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表,只是对插入、删除运算加以限制。
不同点:①运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入、删除运算,因而是后进先出表;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表。
② 用途不同,堆栈用于子程调用和保护现场,队列用于多道作业处理、指令寄存及其他运算等等。
. 【统考书 ,难于严题集①】设有编号为,,,的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序。
刘答:至少有种。
① 全进之后再出情况,只有种:,,, ② 进个之后再出的情况,有种,
③ 进个之后再出的情况,有种, , ④ 进个之后再出的情况,有种, ,
. 【刘自编】假设正读和反读都相同的字符序列为“回文”,例如,‘’和‘’是回文,‘’ 和‘’则不是回文。假设一字符序列已存入计算机,请分析用线性表、堆栈和队列等方式正确输出其回文的可能性? 答:线性表是随机存储,可以实现,靠循环变量()从表尾开始打印输出;
堆栈是后进先出,也可以实现,靠正序入栈、逆序出栈即可; 队列是先进先出,不易实现。
哪种方式最好,要具体情况具体分析。若正文在机内已是顺序存储,则直接用线性表从后往前读取即可,或将堆栈栈顶开到数组末尾,然后直接用动作实现。(但堆栈是先减后压还是……)
若正文是单链表形式存储,则等同于队列,需开辅助空间,可以从链首开始入栈,全部压入后再依次输出。
. 【统考书 】顺序队的“假溢出”是怎样产生的?如何知道循环队列是空还是满?
答:一般的一维数组队列的尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。 采用循环队列是解决假溢出的途径。 另外,解决队满队空的办法有三:
① 设置一个布尔变量以区别队满还是队空;
② 浪费一个元素的空间,用于区别队满还是队空。 ③ 使用一个计数器记录队列中元素个数(即队列长度)。
我们常采用法②,即队头指针、队尾指针中有一个指向实元素,而另一个指向空闲元素。 判断循环队列队空标志是: 队满标志是:()
. 【统考书 】设循环队列的容量为(序号从到),现经过一系列的入队和出队运算后,有 ① ,; ② ,;问在这两种情况下,循环队列中各有元素多少个? 答:用队列长度计算公式: (+-)
① (+-) ② (+-)
第~章 串和数组 自测卷答案
7 / 18
个人整理精品文档,仅供个人学习使用
一、填空题(每空分,共分)
. 不包含任何字符(长度为)的串称为空串; 由一个或多个空格(仅由空格符)组成的串称为空白串。 (对应严题集①,简答题:简述空串和空格串的区别)
. 设“”,则(), “”的字符定位的位置为。
. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
. 设目标””,模式“”,则第次匹配成功。
. 若为主串长,为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为()*。
. 假设有二维数组×,每个元素用相邻的个字节存储,存储器按字节编址。已知的起始存储位置(基地址)为,则数组的体积(存储量)为;末尾元素的第一个字节地址为;若按行存储时,元素的第一个字节地址为()×;若按列存储时,元素的第一个字节地址为(×+)×+)= 。
.〖年计算机系考研题〗设数组[…, …]的基地址为,每个元素占个存储单元,若以列序为主序顺序存储,则元素[]的存储地址为。 答:考虑行列,(列×行+行)×字节+基址??
. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素 的行下标、列下标和元素值 。 .求下列广义表操作的结果:
() 【((),())】(, ); 头元素不必加括号 () 【【((),())】】(); () 【【【((),())】】】; () 【【【((),())】】】 () ;
二、单选题(每小题分,共分)
( ).〖李〗串是一种特殊的线性表,其特殊性体现在:
A.可以顺序存储 B.数据元素是一个字符 C.可以链式存储 D.数据元素可以是多个字符
( ).〖李〗设有两个串和,求在中首次出现的位置的运算称作:
A.连接 B.模式匹配 C.求子串 D.求串长
( ).〖李〗设串’’,’’,函数()返回和串的连接串,(,,)返回串的从序号开始的个字符组成的子串,()返回串的长度,则((,,()),(,(),))的结果串是:
A. B. C. D.
解:()返回和串的连接串,即 ()=‘’;
(,,)返回串的从序号开始的个字符组成的子串,则 (,,())=(,,)’ ’; (,(),)=(,, )’ ’;
所以((,,()),(,(),))=(’ ’, ’ ’)之连接,即
( ).〖年计算机系考研题〗假设有行列的二维数组[…, …]以列序为主序顺序存储,其基地址为,每个元素占个存储单元,那么第行第列的元素[]的存储地址为。(无第行第列元素)
A. B. C. D.答案, , 均不对
答:(列×行+行)×字节+()
8 / 18
个人整理精品文档,仅供个人学习使用
( ). 设矩阵是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组[ , () ]中,对下三角部分中任一元素(≤), 在一维数组中下标的值是:
A.() B.() C.() D.()
解:注意的下标要求从开始。 先用第一个元素去套用,可能有和; 再用第二个元素去套用和,而=(不符); 所以选
a1,1a2,1Aan,1a2,2an,2 an,n. 【初程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组,行下标的范围是到,列下标的范围是到,每个数组元素用相邻的个字节存储。存储器按字节编址。假设存储数组元素[]的第一个字节的地址是。
存储数组的最后一个元素的第一个字节的地址是。若按行存储,则[]和[]的第一个字节的地址分别是和。若按列存储,则[]和[]的第一个字节的地址分别是和。 供选择的答案 ~:①②③④⑤
⑥⑦⑧⑨⑩ 答案:, , , ,
.【程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
有一个二维数组,行下标的范围是到,列下标的范围是到,每个数组元素用相邻的个字节存储,存储器按字节编址。那么,这个数组的体积是个字节。假设存储数组元素[]的第一个字节的地址是,则存储数组的最后一个元素的第一个字节的地址是。若按行存储,则[]的第一个字节的地址是。若按列存储,则[]的第一个字节的地址是。 供选择的答案 ~:①②③④⑤⑥
⑦⑧⑨⑩ () () 答案:, , ,
三、简答题(每小题分,共分)
. 算法的设计思想是什么?它有什么优点?
. (软件技术?)已知二维数组采用按行优先顺序存放,每个元素占个存储单元,并且第一个元素的存储地址为(),请写出求()的计算公式。如果采用列优先顺序存放呢? 解:公式教材已给出,此处虽是方阵,但行列公式仍不相同; 按行存储的元素地址公式是: ()()[ ()*() ] * 按列存储的元素地址公式是: ()()[ ()*() ] *
.【全国专升本资格考试】递归算法比非递归算法花费更多的时间,对吗?为什么?
答:不一定。时间复杂度与样本个数有关,是指最深层的执行语句耗费时间,而递归算法与非递归算法在最深层的语句执行上是没有区别的,循环的次数也没有太大差异。仅仅是确定循环是否继续的方式不同,递归用栈隐含循环次数,非递归用循环变量来显示循环次数而已。
9 / 18
个人整理精品文档,仅供个人学习使用
四、计算题(每题分,共分) 1. 设’ ’, ’’, ’’, 求(,’’) 和 ((), (()))。
解:①(,’’)=’ ’ ② 因为 ()=‘’;()=‘’ (())=’’
所以((), (()))=‘’
. 【严题集②】 已知主串’’,模式串’’。写出模式串的函数值,并由此画出算法匹配的全过程。 解:(由演示程序得知)函数值为 在第个字符处发现匹配! ’’ ’’
. ( )用三元组表表示下列稀疏矩阵:
00000000000000000000020000900300080000000000000000(2)(1)
00060000005000000000000000000000000500003020000000解:参见填空题. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、 列下标 和 元素值 。 所以()可列表为: ()可列表为:
. ( )下列各三元组表分别表示一个稀疏矩阵,试写出它们的稀疏矩阵。
6464551221111?212249(1)313(2)
3284443565364376116解:()为×矩阵,非零元素有个,但其中一数下标有误?()为×矩阵,非零元素有个
改为 10 / 18 个人整理精品文档,仅供个人学习使用
第章 树和二叉树 自测卷解答
一、下面是有关二叉树的叙述,请判断正误(每小题分,共分)
( √ ). 若二叉树用二叉链表作存贮结构,则在个结点的二叉树链表中只有—个非空指针域。 ( × ).二叉树中每个结点的两棵子树的高度差等于。 ( √ ).二叉树中每个结点的两棵子树是有序的。
( × ).二叉树中每个结点有两棵非空子树或有两棵空子树。
( × ).二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于
其右非空子树(若存在的话)所有结点的关键字值。 (应当是二叉排序树的特点)
( × ).二叉树中所有结点个数是,其中是树的深度。
( × ).二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。
( × ).对于一棵非空二叉树,它的根结点作为第一层,则它的第层上最多能有—个结点。(应) ( √ ).用二叉链表法()存储包含个结点的二叉树,结点的个指针区域中有个为空指针。
(正确。用二叉链表存储包含个结点的二叉树,结点共有个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有个结点的链域存放指向非空子女结点的指针,还有个空指针。)即有后继链接的指针仅个。
(√ ).〖年计算机系研题〗具有个结点的完全二叉树有个度为的结点。
最快方法:用叶子数=[]=,再求
二、填空(每空分,共分)
. 由3个结点所构成的二叉树有种形态。
. 【计算机研】 一棵深度为的满二叉树有个分支结点和个叶子。 注:满二叉树没有度为的结点,所以分支结点数就是二度结点数。
. 一棵具有257个结点的完全二叉树,它的深度为。 ( 注:用[](≤)
4. 【全国专升本统考题】设一棵完全二叉树有个结点,则共有个叶子结点。
答:最快方法:用叶子数=[]=
. 设一棵完全二叉树具有个结点,则此完全二叉树有个叶子结点,有个度为的结点,有个结点只有非空左子树,有个结点只有非空右子树。 答:最快方法:用叶子数=[]= ,。 另外,最后一结点为属于左叶子,右叶子是空的,所以有个非空左子树。完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数=.
.【严题集③】 一棵含有个结点的叉树,可能达到的最大深度为,最小深度为。 答:当(单叉树)时应该最深,深度=(层);当(叉树)时应该最浅,深度=(层). (不可能只层,那是只有根结点的情况。教材说是“完全叉树”,指的是≥的情况。)
11 / 18
个人整理精品文档,仅供个人学习使用
. 【程试题】二叉树的基本组成部分是:根()、左子树()和右子树()。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按 次序),后序法(即按次序)和中序法(也称对称序法,即按 次序)。这三种方法相互之间有关联。若已知一棵二叉树的前序序列是,中序序列是,则它的后序序列必是。 解:求之法:画图(见右图),由前序先确定,由中序先确定左边的叶子,再慢慢推导),由图知,后序序列为……。。
求之法:其实不画图也能快速得出后序序列,只要找到根的位置特征。请看,前序遍历中,根结点在最前面,是;则后序遍历中一定在最后面。
小结:方法:由前序先确定,由中序先确定左子树
方法:递归计算。如在前序序列中第一,中序中在中间(可知左右子树上有哪些元素),则在后序中必为最后。如法对的左右子树同样处理,则问题得解。
.【全国专升本统考题】中序遍历的递归算法平均空间复杂度为 (树的
深度)或()。
. 【计算机研】 用个权值{, , , , }构造的哈夫曼()树的带权路径长度是。
解:先构造哈夫曼树,得到各叶子的路径长度之后便可求出=(++)×+(+)× () () () ()
(注:原题为选择题:A. B. C. D.)
三、单项选择题(每小题分,共分)
( ). 不含任何结点的空树。
(A)是一棵树; (B)是一棵二叉树;
(C)是一棵树也是一棵二叉树; (D)既不是树也不是二叉树
( ).二叉树是非线性数据结构,所以。
(A)它不能用顺序存储结构存储; (B)它不能用链式存储结构存储;
(C)顺序存储结构和链式存储结构都能存储; (D)顺序存储结构和链式存储结构都不能使
用
( 、 ). 〖年计算机研题〗 具有(>)个结点的完全二叉树的深度为。
(A) ()(B) ()(C) () (D) ()
注:表示不小于的最小整数;表示不大于的最大整数,它们与[ ]含义不同!
( ).把一棵树转换为二叉树后,这棵二叉树的形态是。
(A)唯一的 (B)有多种
(C)有多种,但根结点都没有左孩子 (D)有多种,但根结点都没有右孩子
. 【程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
树是结点的有限集合,它 根结点,记为。其余的结点分成为(≥)个 的集合,,…,,每个集合又都是树,此时结点称为的父结点,称为的子结点(≤≤)。一个结点的子结点
12 / 18
个人整理精品文档,仅供个人学习使用
个数为该结点的。 供选择的答案
: ①有个或个 ②有个或多个 ③有且只有个 ④有个或个以上 : ①互不相交 ② 允许相交 ③ 允许叶结点相交 ④ 允许树枝结点相交 : ①权 ② 维数 ③ 次数 ④ 序 答案:=,,
. 【程】 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。
二叉树 。在完全的二叉树中,若一个结点没有,则它必定是叶结点。每棵树都能惟一地转换成与它对应的二叉树。由树转换成的二叉树里,一个结点的左子女是在原树里对应结点的,而的右子女是它在原树里对应结点的。 供选择的答案
: ①是特殊的树 ②不是树的特殊形式 ③是两棵树的总称 ④有是只有二个根结点的树形结构 : ①左子结点 ② 右子结点 ③ 左子结点或者没有右子结点 ④ 兄弟
~: ①最左子结点 ② 最右子结点 ③ 最邻近的右兄弟 ④ 最邻近的左兄弟 ⑤ 最左的兄弟 ⑥ 最右的兄弟 答案: = 答案:=,,,
四、简答题(每小题分,共分)
1. 【严题集①】一棵度为的树与一棵二叉树有何区别?
答:度为的树从形式上看与二叉树很相似,但它的子树是无序的,而二叉树是有序的。即,在一般树中若某结点只有一个孩子,就无需区分其左右次序,而在二叉树中即使是一个孩子也有左右之分。
五、阅读分析题(每题分,共分)
. ( )试写出如图所示的二叉树分别按先序、中序、后序遍历时得到的结点序列。 答:: : :
. ( )把如图所示的树转化成二叉树。
答:注意全部兄弟之间都要连线(包括度=的兄弟),并注意原有连线结点一律归入左子树,新添连线结
点一律归入右子树。
13 / 18
个人整理精品文档,仅供个人学习使用
.【严题集②】画出和下列二叉树相应的森林。
答案:注意根右边的子树肯定是森林, 而孩子结点的右子树均为兄弟。
. ( )已知一棵具有个结点的完全二叉树被顺序存储于一维数组中,试编写一个算法打印出编号为的结点的双亲和所有的孩子。
答:结点的左孩子为,右孩子为; 用循环算法打印即可。 由于是完全二叉树,不必担心中途会出现孩子为的情况。
6. 【严题集③】假设用于通信的电文仅由个字母组成,字母在电文中出现的频率分别为,,,,,,,。试为这
个字母设计哈夫曼编码。使用~的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。
解:方案;哈夫曼编码
先将概率放大倍,以方便构造哈夫曼树。 {},按哈夫曼规则:【[(),], ()】,……,,
()
() ()
()
19 (17) () 0 () 7 0
方案比较:
字母编号 对应编码 出现频率 字母编号 对应编码 出现频率 方案的=()()() 方案的=() 结论:哈夫曼编码优于等长二进制编码
14 / 18
个人整理精品文档,仅供个人学习使用
第章 图 自测卷解答
一、单选题(每题分,共分)前两大题全部来自于全国自考参考书!
( ). 在一个图中,所有顶点的度数之和等于图的边数的倍。
. . . .
( ). 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。 . . . . ( ). 有个结点的无向图最多有 条边。
. . . . ( ). 有个结点的无向连通图最少有条边。
. . . . ( ). 有个结点的有向完全图有条边。
. . . . ( ). 用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。
.栈 . 队列 . 树 . 图 ( ). 用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。
.栈 . 队列 . 树 . 图
( ). 已知图的邻接矩阵,根据算法思想,则从顶点出发按深度优先遍历的结点序列是
0111101111101001001000100100110011010001101100010.
. . .
( ). 已知图的邻接矩阵同上题,根据算法,则从顶点出发,按深度优先遍历的结点序列是
. . . . ( ).已知图的邻接矩阵同上题,根据算法,则从顶点出发,按广度优先遍历的结点序列是
. . . . ( ). 已知图的邻接矩阵同上题,根据算法,则从顶点出发,按广度优先遍历的结点序列是
. . . . ( ). 已知图的邻接表如下所示,根据算法,则从顶点出发按深度优先遍历的结点序列是
. . . .
15 / 18
个人整理精品文档,仅供个人学习使用
( ). 已知图的邻接表如下所示,根据算法,则从顶点出发按广度优先遍历的结点序列是
. . . .
( ). 深度优先遍历类似于二叉树的
.先序遍历 . 中序遍历 . 后序遍历 . 层次遍历 ( ). 广度优先遍历类似于二叉树的
.先序遍历 . 中序遍历 . 后序遍历 . 层次遍历
( ). 任何一个无向连通图的最小生成树
.只有一棵 . 一棵或多棵 . 一定有多棵 . 可能不存在
(注,生成树不唯一,但最小生成树唯一,即边权之和或树权最小的情况唯一)
二、填空题(每空分,共分)
. 图有邻接矩阵、邻接表等存储结构,遍历图有深度优先遍历、广度优先遍历等方法。
. 有向图用邻接表矩阵存储,其第行的所有元素之和等于顶点的出度。
. 如果个顶点的图是一个环,则它有棵生成树。
. 个顶点条边的图,若采用邻接矩阵存储,则空间复杂度为()。
. 个顶点条边的图,若采用邻接表存储,则空间复杂度为()。
. 设有一稀疏图,则采用邻接表存储较省空间。
. 设有一稠密图,则采用邻接矩阵存储较省空间。
. 图的逆邻接表存储结构只适用于有向图。
. 已知一个图的邻接矩阵表示,删除所有从第个顶点出发的方法是将邻接矩阵的第行全部置。
. 图的深度优先遍历序列不是惟一的。
. 个顶点条边的图采用邻接矩阵存储,深度优先遍历算法的时间复杂度为();若采用邻接表存储时,该算
法的时间复杂度为()。
. 个顶点条边的图采用邻接矩阵存储,广度优先遍历算法的时间复杂度为();若采用邻接表存储,该算法
的时间复杂度为()。
. 图的生成树的树高比生成树的树高小或相等 。
. 用普里姆()算法求具有个顶点条边的图的最小生成树的时间复杂度为();用克鲁斯卡尔()算法的时间复杂
度是()。
16 / 18
个人整理精品文档,仅供个人学习使用
. 若要求一个稀疏图的最小生成树,最好用克鲁斯卡尔()算法来求解。
. 若要求一个稠密图的最小生成树,最好用普里姆()算法来求解。
. 用算法求某一顶点到其余各顶点间的最短路径是按路径长度递增的次序来得到最短路径的。
. 拓扑排序算法是通过重复选择具有个前驱顶点的过程来完成的。
三、简答题(每题分,共分)
. 【严题集①】已知如图所示的有向图,请给出该图的: (1) 每个顶点的入出度; (2) 邻接矩阵; (3) 邻接表; (4) 逆邻接表。 答案:
带权
. 【严题集②】请对下图的无向图:
(1) 写出它的邻接矩阵,并按
普里姆算法求其最小生成树;
(2) 写出它的邻接表,并按克
鲁斯卡尔算法求其最小生成树。
最小生成树:
. 【严题集②】已知二维数组表示的图的邻接矩阵如下图所示。试分别画出自顶点出发进行遍历所得的深度优先生成树和广度优先生成树。
17 / 18
个人整理精品文档,仅供个人学习使用
. 【严题集②】试利用算法求图中从顶点到其他各顶点间的最短路径,写出执行算法过程中各步的状态。
答案暂未提供。
四、 【年计考研题】给定下列网: (分)
试着找出网的最小生成树,画出其逻辑结构图; 用两种不同的表示法画出网的存储结构图;
用语言(或其他算法语言)定义其中一种表示法(存储结构)的数据类型。
18 / 18
因篇幅问题不能全部显示,请点此查看更多更全内容