数据结构与算法.docx
- 文档编号:11218770
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:28
- 大小:43.99KB
数据结构与算法.docx
《数据结构与算法.docx》由会员分享,可在线阅读,更多相关《数据结构与算法.docx(28页珍藏版)》请在冰豆网上搜索。
数据结构与算法
第1章数据结构与算法
考点1算法★★
考点点拨:
主要考查算法的基本概念、算法的时间复杂度和空间复杂度。
【试题1】问题处理方案的正确而完整的描述称为。
(2005年4月)
答案:
算法
分析:
算法给出了问题处理方案的准确而完整的描述。
【试题2】算法具有4个特性,以下选项中不属于算法特性的是______。
A)有穷性B)简洁性C)可行性D)确定性
答案:
B
分析:
算法的4个特性是:
确定性,可行性,有穷性,拥有足够的情报。
【试题3】算法的复杂度主要包括时间复杂度和_______复杂度。
(2005年9月)
答案:
空间
分析:
算法复杂度主要包括时间复杂度和空间复杂度。
时间复杂度用来描述执行算法所需要的计算工作量,空间复杂度用来描述执行算法所需要的内存空间。
【试题4】算法的时间复杂度是指 。
A)执行算法程序所需要的时间
B)算法程序的长度
C)算法执行过程中所需要的基本运算次数
D)算法程序中的指令条数
答案:
C
分析:
所谓算法的时间复杂度,是指执行算法所需要的计算工作量。
算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数,即:
算法的工作量=f(n)。
其中n是问题的规模。
理论链接:
算法时间复杂度
在具体分析一个算法的工作量时,还会存在这样的问题:
对于一个固定的规模,算法所执行的基本运算次数还可能与特定的输入有关,而实际上又不可能将所有可能情况下算法所执行的基本运算次数都列举出来。
例如,“在长度为n的一维数组中查找值为x的元素”,若采用顺序搜索法,即从数组的第一个元素开始,逐个与被查值x进行比较。
显然,如果第一个元素恰为x,则只需要比较1次。
但如果x为数组的最后一个元素,或者x不在数组中,则需要比较n次才能得到结果。
因此,在这个问题的算法中,其基本运算(即比较)的次数与具体的被查值x有关。
【试题5】算法的空间复杂度是指 。
A)算法程序的长度
B)算法程序中的指令条数
C)算法程序所占的存储空间
D)算法执行过程中所需要的存储空间
答案:
D
分析:
一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。
一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。
其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间(例如,在链式结构中,除了要存储数据本身外,还需要存储链接信息)。
如果额外空间量相对于问题规模来说是常数,则称该算法是原地(inplace)工作的。
在许多实际问题中,为了减少算法所占的存储空间,通常都会采用压缩存储技术,以尽量减少不必要的额外空间。
【试题6】一个算法通常由两种基本要素组成:
一是对数据对象的运算和操作,二是算法的 。
答案:
控制结构
分析:
一个算法通常由两种基本要素组成:
一是对数据对象的运算和操作,二是算法的控制结构。
理论链接:
(1)算法中对数据的运算和操作
每个算法实际上是按解题要求,从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。
因此,计算机算法就是计算机能处理的操作所组成的指令序列。
通常,计算机可以执行的基本操作是以指令的形式描述的。
一个计算机系统能执行的所有指令的集合,称为该计算机系统的指令系统。
计算机程序就是按解题要求从计算机指令系统中选择合适的指令所组成的指令序列。
在一般的计算机系统中,基本的运算和操作有以下4类。
①算术运算:
主要包括加、减、乘、除等运算。
②逻辑运算:
主要包括“与”、“或”、“非”等运算。
③关系运算:
主要包括“大于”、“小于”、“等于”、“不等于”等运算。
④数据传输:
主要包括赋值、输入、输出等操作。
(2)算法的控制结构
一个算法的功能不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。
算法中各操作之间的执行顺序即称为算法的控制结构。
算法的控制结构给出了算法的基本框架,它不仅决定了算法中各操作的执行顺序,而且还直接反映了算法的设计是否符合结构化原则。
描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。
一个算法一般可以用顺序、选择、循环3种基本控制结构组合而成。
【试题7】在同一个问题规模下,如果算法执行所需的基本运算次数取决于某一特定输入时,可以用平均性态和 两种方法来分析算法的工作量。
答案:
最坏情况复杂性
分析:
所谓平均性态分析,是指用各种特定输入下的基本运算次数的加权平均值来度量算法的工作量。
设x是所有可能输入中的某个特定输入,p(x)是x出现的概率(即输入为x的概率),t(x)是算法在输入为x时所执行的基本运算次数,则算法的平均性态定义为:
A(n)=
其中Dn表示当规模为n时,算法执行时所有可能输入的集合。
这个式子中的t(x)可以通过分析算法来加以确定;而p(x)必须通过经验或用算法中有关的一些特定信息来确定,通常是不能解析地加以计算的。
如果确定p(x)比较困难,则会给平均性态的分析带来困难。
所谓最坏情况分析,是指在规模为n时,算法所执行的基本运算的最大次数。
它定义为
W(n)=
{t(x)}
显然,W(n)的计算要比A(n)的计算方便得多。
由于W(n)实际上是给出了算法工作量的一个上界,因此,它比A(n)更具有实用价值。
【试题8】算法设计基本方法主要有 、归纳法、递推、递归和减半递推技术。
答案:
列举法
分析:
算法设计基本方法主要包括有列举法、归纳法、递推、递归和减半递推技术。
理论链接:
(1)列举法
列举法的基本思想是,根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。
列举法的特点是算法比较简单。
但当列举的可能情况较多时,执行列举算法的工作量将会很大。
列举原理是计算机应用领域中十分重要的原理。
列举算法是一种比较笨拙而原始的方法,其运算量比较大,但在有些实际问题中(如寻找路径、查找、搜索等问题),局部使用列举法却是很有效的,因此,列举算法是计算机算法中的一个基础算法。
(2)归纳法
归纳法的基本思想是,通过列举少量的特殊情况,经过分析,最后找出一般的关系。
显然,归纳法要比列举法更能反映问题的本质,并且可以解决列举量为无限的问题。
从本质上讲,归纳就是通过观察一些简单而特殊的情况,最后总结出一般性的结论。
归纳是一种抽象,即从特殊现象中找出一般关系。
(3)递推
所谓递推,是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。
其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简而确定。
递推本质上也属于归纳法,工程上许多递推关系式实际上是通过对实际问题的分析与归纳而得到的,因此,递推关系式往往是归纳的结果。
递推算法在数值计算中是极为常见的。
但是,对于数值型的递推算法必须要注意数值计算的稳定性问题。
(4)递归
递归的基础也是归纳。
在工程实际中,有许多问题就是用递归来定义的,数学中的许多函数也是用递归来定义的。
递归在可计算性理论和算法设计中占有很重要的地位。
递归分为直接递归与间接递归两种。
如果一个算法P显式地调用自己则称为直接递归。
如果算法P调用另一个算法Q,而算法Q又调用算法P,则称为间接递归调用。
递归过程能将一个复杂的问题归结为若干个较简单的问题,然后将这些较简单的问题再归结为更简单的问题,这个过程可以一直做下去,直到最简单的问题为止。
(5)减半递推技术
实际问题的复杂程度往往与问题的规模有着密切的联系。
因此,利用分治法解决这类实际问题是有效的。
所谓分治法,就是对问题分而治之。
工程上常用的分治法是减半递推技术。
所谓“减半”,是指将问题的规模减半,而问题的性质不变;所谓“递推”,是指重复“减半”的过程。
考点2数据结构的基本概念★★
考点点拨:
主要考查数据结构的定义、数据结构的图形表示、线性结构与非线性结构的基本概念。
【试题1】数据的存储结构是指________。
(2005年4月)
A)存储在外存中的数据B)数据所占的存储空间量
C)数据在计算机中的顺序存储方式D)数据的逻辑结构在计算机中的表示
答案:
D
分析:
数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。
【试题2】所谓 ,是指对数据集合中的各元素以各种方式进行运算,包括插入、删除、查找、更改等运算,也包括对数据元素进行分析。
答案:
数据处理
分析:
所谓数据处理,是指对数据集合中的各元素以各种方式进行运算。
在数据处理领域中,建立数学模型有时并不十分重要,事实上,许多实际问题是无法用数学模型来表示的。
人们最感兴趣的是知道数据集合中各数据元素之间存在什么关系,应如何组织它们,即如何表示所需要处理的数据元素。
【试题3】数据结构是指相互有关联的 的集合。
答案:
数据元素
分析:
数据结构是指相互有关联的数据元素的集合。
例如,向量和矩阵就是数据结构,在这两个数据结构中,数据元素之间有着位置上的关系。
又如,图书馆中的图书卡片目录,则是一个较为复杂的数据结构,对于列在各卡片上的各种书之间,可能在主题、作者等问题上相互关联,甚至一本书本身也有不同的相关成分。
数据元素具有广泛的含义。
一般来说,现实世界中客观存在的一切个体都可以是数据元素。
在数据处理领域中,每一个需要处理的对象都可以抽象成数据元素。
数据元素一般也简称为元素。
【试题4】数据元素之间的任何关系都可以用 关系来描述。
答案:
前驱和后继
分析:
前驱和后继关系是数据元素之间的一个基本关系,但前驱和后继关系所表示的实际意义随具体对象的不同而不同。
一般来说,数据元素之间的任何关系都可以用前驱和后继关系来描述。
【试题5】常用的存储结构有顺序、链接、 等存储结构。
答案:
索引
分析:
一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。
而采用不同的存储结构,其数据处理的效率是不同的。
因此,在进行数据处理时,选择合适的存储结构是很重要的。
【试题6】下列叙述中正确的是________。
(2005年9月)
A)一个逻辑数据结构只能有一种存储结构
B)数据的逻辑结构属于线性结构,存储结构属于非线性结构
C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理效率
D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理效率
答案:
D
分析:
逻辑结构是反映了元素之间的逻辑关系的数据结构,存储结构是逻辑结构在计算机中的存放形式,它们都具有线性结构和非线性结构。
逻辑结构有顺序、链接、索引等存储结构,采用不同的存储结构,数据处理的效率不同。
【试题7】数据结构分为逻辑结构和存储结构,循环队列属于____结构。
(2005年9月)
答案:
存储
分析:
循环队列是在队列的基础上,将队列的头和尾接到一起形成一个环状,它给出了数据的逻辑结构在计算机空间的存储形式,因此是一种存储结构。
【试题8】在数据结构中,没有前驱的结点称为 。
A)终端结点B)根结点C)叶子结点D)内部结点
答案:
B
分析:
在数据结构中,没有前驱的结点称为根结点;没有后继的结点称为终端结点(也称为叶子结点)。
数据结构中除了根结点与终端结点外的其他结点一般称为内部结点。
【试题9】在数据结构中,结点及结点间的相互关系是数据的逻辑结构,数据结构按逻辑关系的不同,通常可分为 两类。
A)动态结构和静态结构B)紧凑结构和非紧凑结构
C)线性结构和非线性结构D)内部结构和外部结构
答案:
C
分析:
在数据结构中,结点及结点间的相互关系有线性结构和非线性结构。
如线性表是线性结构;树和图是非线性结构。
理论链接:
线性结构、非线性结构
如果一个非空的数据结构满足:
(1)有且只有一个根结点。
(2)每一个结点最多有一个前驱,也最多有一个后继。
则称该数据结构为线性结构。
线性结构又称线性表。
线性结构中,各数据元素之间的前驱后继关系是很简单的。
在一个线性结构中插入或删除任何一个结点后还应是线性结构。
如果一个数据结构满足上述两个条件,但当在此数据结构中插入或删除任何一个结点后就不满足这两个条件了,则该数据结构不能称为线性结构。
如果一个数据结构不是线性结构,则称之为非线性结构。
在非线性结构中,各数据元素之间的前驱后继关系要比线性结构复杂,因此,对非线性结构的存储与处理比线性结构要复杂得多。
线性结构与非线性结构都可以是空的数据结构。
一个空的数据结构究竟是属于线性结构还是属于非线性结构,这要根据具体情况来确定。
如果对该数据结构的运算是按线性结构的规则来处理的,则属于线性结构;否则属于非线性结构。
考点3线性表及其顺序存储结构★★★
考点点拨:
主要考查线性表的基本概念、线性表的顺序存储结构、顺序表的插入与删除运算。
【试题1】在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成,在这种情况下,常把数据元素称为 。
A)数据单元B)记录C)记录项D)数据项
答案:
B
分析:
线性表是最简单、最常用的一种数据结构。
由一组数据元素构成。
至于每个数据元素的具体含义,在不同的情况下各有不同,它可以是一个数,或一个符号,也可以是一页书,甚至是更复杂的信息。
在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成,在这种情况下,常把数据元素称为记录(record),含有大量记录的线性表就称作文件(file)。
理论链接:
线性表结构特征
线性表是一种线性结构。
数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的。
非空线性表有如下一些结构特征:
(1)有且只有一个根结点a1,它无前驱。
(2)有且只有一个终端结点an,它无后继。
(3)除根结点与终端结点外,其他所有结点有且只有一个前驱,也有且只有一个后继。
线性表中结点的个数n称为线性表的长度。
当n=0时,称其为空表。
【试题2】在计算机中存放线性表,一种最简单的方法是 。
答案:
顺序存储
分析:
在计算机中存放线性表,一种最简单的方法是顺序存储,也称为顺序分配。
线性表的顺序存储结构具有以下两个基本特点:
(1)线性表中所有元素所占的存储空间是连续的。
(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
可以看出,在线性表的顺序存储结构中,其前驱后继两个元素在存储空间中是紧邻的,且前驱元素一定存储在后继元素的前面。
在线性表的顺序存储结构中,如果线性表中各数据元素所占的存储空间(字节数)相等,则要在该线性表中查找某一个元素是很方便的。
假设线性表中的第一个数据元素的存储地址(指第一个字节的地址,即首地址)为ADR(a1),每一个数据元素占K个字节,则线性表中第i个元素ai在计算机存储空间中的存储地址为
ADR(ai)=ADR(a1)+(i–1)K
即在顺序存储结构中,线性表中每一个数据元素在计算机存储空间中的存储地址由该元素在线性表中的位置序号惟一确定。
【试题3】在程序设计语言中,通常定义一个 来表示线性表的顺序存储空间。
答案:
一维数组
分析:
在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储空间。
因为程序设计语言中的一维数组与计算机中实际的存储空间结构是类似的,这就便于用程序设计语言对线性表进行各种运算处理。
在用一维数组存放线性表时,该一维数组的长度通常要定义得比线性表的实际长度大一些,以便对线性表进行各种运算,特别是插入运算。
在一般情况下,如果线性表的长度在处理过程中是动态变化的,则在开辟线性表的存储空间时要考虑到线性表在动态变化过程中可能达到的最大长度。
如果开始时所开辟的存储空间太小,则在线性表动态增长时可能会出现存储空间不够,而导致无法再插入新的元素;但如果开始时所开辟的存储空间太大,而实际上又用不着那么大的存储空间,则会造成存储空间的浪费。
在实际应用中,可以根据线性表动态变化过程中的一般规模来决定开辟的存储空间量。
考点4栈和队列★★★★
考点点拨:
主要考查栈及其基本运算、队列及其基本运算。
【试题1】下列关于栈的描述中错误的是_______。
(2005年4月)
A)栈是先进后出的线性表
B)栈只能顺序存储
C)栈具有记忆作用
D)对栈的插入和删除操作中,不需要改变栈底指针
答案:
B
分析:
栈是一种特殊的线性表,插入和删除操作只能在线性表的一端进行,不需要改变栈底指针。
栈是先进后出的线性表,由此可以看出,栈具有记忆作用。
栈还可以用链式存储。
【试题2】下列关于栈的描述正确的是______。
(2005年9月)
A)在栈中只能插入元素而不能删除元素
B)在栈中只能删除元素而不能插入元素
C)栈是特殊的线性表,只能在一端插入或删除元素
D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素
答案:
C
分析:
栈是特殊的线性表,它的一端封闭,在另一端进行插入和删除操作。
【试题3】栈的基本运算有三种:
入栈、退栈与 。
答案:
读栈顶元素
分析:
栈的基本运算有三种:
入栈、退栈与读栈顶元素。
(1)入栈运算
入栈运算是指在栈顶位置插入一个新元素。
这个运算有两个基本操作:
首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。
当栈顶指针已经指向存储空间的最后一个位置时,说明栈空间已满,不可能再进行入栈操作。
这种情况称为栈“上溢”错误。
(2)退栈运算
退栈运算是指取出栈顶元素并赋给一个指定的变量。
这个运算有两个基本操作:
首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针退一(即top减1)。
当栈顶指针为0时,说明栈空,不可能进行退栈操作。
这种情况称为栈“下溢”错误。
(3)读栈顶元素
读栈顶元素是指将栈顶元素赋给一个指定的变量。
必须注意,这个运算不删除栈顶元素,只是将它的值赋给一个变量,因此,在这个运算中,栈顶指针不会改变。
当栈顶指针为0时,说明栈空,读不到栈顶元素。
【试题4】下列关于队列的叙述中正确的是 。
A)在队列中只能插入数据B)在队列中只能删除数据
C)队列是先进先出的线性表D)队列是先进后出的线性表
答案:
C
分析:
队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。
允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为排头(也称为队头),通常也用一个排头指针(front)指向排头元素的前一个位置。
显然,在队列这种数据结构中,最先插入的元素将最先能够被删除,最后插入的元素最后才能被删除。
因此,队列又称为“先进先出”(FirstInFirstOut,FIFO)或“后进后出”(LastInLastOut,LILO)的线性表,它体现了“先来先服务”的原则。
在队列中,队尾指针rear与排头指针front共同反映了队列中元素动态变化的情况。
往队列的队尾插入一个元素称为入队运算,从队列的排头删除一个元素称为退队运算。
与栈类似,在程序设计语言中,用一维数组作为队列的顺序存储空间。
【试题5】循环队列主要有两种基本运算:
入队运算与退队运算。
每进行一次入队运算,队尾指针就 。
答案:
进一
分析:
循环队列主要有两种基本运算:
入队运算与退队运算。
每进行一次入队运算,队尾指针就进一。
当队尾指针rear=m+1时,则置rear=1。
每进行一次退队运算,排头指针就进一。
当排头指针front=m+1时,则置front=1。
理论链接:
循环队列的两种基本运算
(1)入队运算
入队运算是指在循环队列的队尾加入一个新元素。
这个运算有两个基本操作:
首先将队尾指针进一(即rear=rear+1),并当rear=m+1时置rear=l;然后将新元素插入到队尾指针指向的位置。
当循环队列非空(s=1)且队尾指针等于排头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。
(2)退队运算
退队运算是指在循环队列的排头位置退出一个元素并赋给指定的变量。
这个运算有两个基本操作:
首先将排头指针进一(即front=front+1),并当front=m+l时置front=1;然后将排头指针指向的元素赋给指定的变量。
当循环队列为空(s=0)时,不能进行退队运算,这种情况称为“下溢”。
【试题6】应用程序在执行过程中,需要通过打印机输出数据时,一般先形成一个打印作业,将其存放在硬盘中的一个指定 中。
当打印机空闲时,就会按先来先服务的方式从中取出待打印的作业进行打印。
A)栈B)队列C)数组D)字符串
答案:
B
分析:
根据数据结构对队列先进先出的定义,打印作业应该存放在队列中。
【试题7】递归算法一般需要利用 实现。
A)栈B)队列C)循环链表D)双向链表
答案:
A
分析:
递归是指一个过程直接或间接地调用自己。
在递归算法运行的过程中,需要利用栈保存递归过程的运算结果、各种参数和返回地址等工作记录,从而使递归过程得以顺利进行。
【试题8】对长度为n的线性表进行插入一个新元素或删除一个元素时,在最坏情况下所需要的比较次数为 。
A)n+lB)nC)(n+1)/2D)n/2
答案:
B
分析:
在一般情况下,要在顺序存储的线性表中插入一个新元素或删除一个元素时,为了保证插入或删除后的线性表仍然为顺序存储,则在插入或删除过程中需要移动大量的数据元素。
在平均情况下,为了在顺序存储的线性表中插入或删除一个元素,需要移动线性表中约一半的元素;在最坏情况下,则需要移动线性表中所有的元素。
因此,对于大的线性表,特别是元素的插入或删除很频繁的情况下,采用顺序存储结构是很不方便的,插入与删除运算的效率都很低。
考点5线性链表★★★★★
考点点拨:
主要考查线性链表的基本概念、线性链表的基本运算、循环链表及其基本运算。
【试题1】下列对于线性链表的描述中正确的是______。
(2005年4月)
A)存储空间不一定是连续,且各元素的存储顺序是任意的
B)存储空间不一定是连续,且前件元素一定存储在后件元素的前面
C)存储空间必须连续,且各前件元素一定存储在后件元素的前面
D)存储空间必须连续,且各元素的存储顺序是任意的
答案:
A
分析:
线性链表属于链式存储结构,在链式存储结构中,存储空间可以不连续,各元素的存储顺序是任意的,元素之间的逻辑关系是由指针域来决定的。
【试题2】在链式存储方式中,要求每个结点由两部分组成:
一部分用于存放数据元素值,称为 ;另一部分用于存放指针,称为 。
答案:
数据域指针域
分析:
在链式存储方式中,要求每个结点由两部分组成:
一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。
其中指针用于指向该结点的前一个或后一个结点(即前驱或后继)。
理论链接:
线性表的链式存储结构
线性表的链式存储结构称为线性链表。
为了适应线性表的链式存储结构,计算机存储空间被划分为一个个小块,每一小块占若干字节,通常称这些小块为存储结点。
为了存储线性表中的每一个元素,一方面要存储数据元素的值,另一方面要存储各数据元素之间的前后继关系。
为此目的,将存储空间中的每一个存储结点分为两部分:
一部分用于存储数据元素的值,称为数据域;另一部分用于存放下一个数据元素的存储序号(即存储结点的地址),即指向后继结点,称为指针域。
由此可知,在线性链表中,存储空间的结构如图1.1所示。
存储序号
数据域
指针域
1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法