ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:272.98KB ,
资源ID:8183635      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8183635.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第1章数据结构与算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第1章数据结构与算法.docx

1、第1章数据结构与算法第1章 数据结构与算法1.1 算法1.1.1算法的基本概念 所谓算法是指解题方案的准确而完整的描述。 算法并不等于程序。54_5问题处理方案的正确而完整的描述称为 【5】 。算法1.算法的基本特征 作为一个算法,一般应具有以下几个基本特征。 (l)可行性(effectiveness)得到满意的结果 (2)确定性(definiteness)算法中的每一个步骤都必须是有明确定义的(3)有穷性(finiteness) 在有限的时间内做完 (4)拥有足够的信息一为算法所提供的信息是否足够(有输入输出)3.1.84_5)算法的有穷性是指 A 算法程序的运行时间是有限的 B 算法程序所

2、处理的数据量是有限的 C 算法程序的长度是有限的 D 算法只能被有限的用户使用 2.算法的基本要素 一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。 (1)算法中对数据的运算和操作 基本的运算和操作有以下四类: 算术运算:主要包括加、减、乘、除等运算。 逻辑运算:主要包括“与”、“或”、“非”等运算。 关系运算:主要包括“大于”、“小于”、“等于”、“不等于”等运算。 数据传输:主要包括赋值、输入、输出等操作。 (2)算法的控制结构 可以用顺序、选择、循环三种基本控制结构组合而成。 3.算法设计基本方法 (1)列举法 (2)归纳法 (3)递推 (4)递归 递归分

3、为直接递归与间接递归两种。如果一个算法P显式地调用自己则称为直接递归。如果算法P调用另一个算法Q,而算法Q又调用算法P,则称为间接递归调用。 (5)减半递推技术 (6)回溯法1.1.2算法的复杂度 算法的复杂度主要包括时间复杂度和空间复杂度。 1、算法的时间复杂度 所谓算法的时间复杂度,是指执行算法所需要的计算工作量。用基本运算的次数来度量算法工作量1.算法的时间复杂度是指 ( c ) A)执行算法程序所需要的时间 B)算法程序的长度 C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数103_2)算法的时间复杂度是指a)算法的执行时间b)算法所处理的数据量c)算法程序中的语句或指令

4、条数d)算法在执行过程中所需要的基本运算次数d算法所执行的基本运算次数还与问题的规模有关 算法的工作量 = f(n) 其中n是问题的规模 对于一个固定的规模,算法所执行的基本运算次数还可能与特定的输入有关。 在同一个问题规模下,如果算法执行所需的基本运算次数取决于某一特定输入时,可以用以下两种方法来分析算法的工作量。 (l)平均性态(Average Behavior) (2)最坏情况复杂性(Worst-Case Complexity) W(n)的计算要比A(n)的计算方便得多。由于W(n)实际上是给出了算法工作量的一个上界,因此,它比A(n)更具有实用价值。 2、算法的空间复杂度一个算法的空间

5、复杂度,一般是指执行这个算法所需要的内存空间。2算法的空间复杂度是指 ( d ) A)算法程序的长度 B)算法程序中的指令条数 C)算法程序所占的存储空间 D)算法执行过程中所需要的存储空间69_7)下列叙述中正确的是A)一个算法的空间复杂度大,则其时间复杂度也必定大B)一个算法的空间复杂度大,则其时间复杂度必定小C)一个算法的时间复杂度大,则其空间复杂度必定小D)上述三种说法都不对69_1算法复杂度主要包括时间复杂度和 【2】 复杂度。99_4. 算法的空间复杂度是指( )。A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量C.算法程序中的语句或指令条数D.算法在执行过程中所

6、需要的临时工作单元数答案 A解析:算法的空间复杂度是指执行算法所需要的内存空间,包括算法程序所占空间,输入的初始数据所占空间和执行过程中所需要的额外空间.1.2 数据结构的基本概念 数据结构作为计算机的一门学科,主要研究和讨论以下三个方面的问题: 数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构。 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。对各种数据结构进行的运算。(操作后应保持原有结构不被破坏)1.2.1 什么是数据结构3516788543293321544616212933354346547885 简单地说,数据结构是指相互有关联的数据元素的集合。 数

7、据元素具有广泛的含义。一般来说,现实世界中客观存在的一切个体都可以是数据元素。数据元素一般具有某种共同特征。在数据处理领域中,通常把数据元素之间这种固有的关系简单地用前后件关系(或直接前驱与直接后继关系)来描述。 1.数据的逻辑结构 一个数据结构应包含以下两方面的信息: 表示数据元素的信息; 表示各数据元素之间的前后件关系。 在以上所述的数据结构中,其中数据元素之间的前后件关系是指它们的逻辑关系,而与它们在计算机中的存储位置无关。因此,上面所述的数据结构实际上是数据的逻辑结构。 2.数据的存储结构数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。54_1数据的

8、存储结构是指A) 存储在外存中的数据 B) 数据所占的存储空间量C) 数据在计算机中的顺序存储方式D) 数据的逻辑结构在计算机中的表示4 数据的存储结构是指 (b ) A)数据所占的存储空间量 B)数据的逻辑结构在计算机中的表示 C)数据在计算机中的顺序存储方式 D)存储在外存中的数据红60_20数据结构中,与所用的计算机无关的是数据的A 存储结构 B 物理结构 C逻辑结构 D 物理和存储结构 62_14数据结构包括数据的 结构和数据的存储结构 由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息

9、。 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接。索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。因此,在进行数据处理时,选择合适的存储结构是很重要的。4.2.79_5下列叙述中正确的是A程序执行的效率与数据的存储结构密切相关B程序的执行效率只取决于程序的控制结构C程序执行的效率只取决于所处理的数据量D以上三种说法都不对 4.3.79_6下列叙述中正确的是A数据的逻辑结构与存储结构必定是一一对应的B由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构D以上

10、三种说法都不对红57_2下面的叙述正确的是A 算法的执行效率与数据的存储结构无关B 算法的空间复杂度是指算法程序中指令(或语句)的条数C算法的有穷性是指算法必须能在执行有限个步骤之后终止D以上三种描述都不对59_4下列叙述中正确的是A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率1.2.2 数据结构的图形表示在数据结构中,没有前件的结点称为根结点;没有后件的结点称为终端结点(也称为叶子结点)。数据结

11、构中除了根结点与终端结点外的其他结点一般称为内部结点。在对数据结构的处理过程中,不仅数据结构中的结点(即数据元素)个数在动态地变化,而且,各数据元素之间的关系也有可能在动态地变化。1.2.3 线性结构与非线性结构如果一个非空的数据结构满足下列两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。线性结构又称线性表。在一个线性结构中插入或删除任何一个结点后还应是线性结构。 如果一个数据结构不是线性结构,则称之为非线性结构。一个空的数据结构究竟是属于线性结构还是属于非线性结构,这要根据具体情况来确定。如果对该数据结构的运算是按线性结构的规则来处理的,则

12、属于线性结构;否则属于非线性结构。1.3 线性表及其顺序存储结构由若干数据项组成的数据元素称为记录(record)。可以表示为 (a1,a2,ai,,an)其中 (ai1,2,n)是属于数据对象的元素,通常也称其为线性表中的一个结点。 线性表中结点的个数n称为线性表的长度。当n0时,称为空表。1.3.2线性表的顺序存储结构 线性表的顺序存储结构具有以下两个基本特点: 线性表中所有元素所占的存储空间是连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。红62_22顺序存储方法是把相邻的结点存储在物理位置 的存储单元中. 相邻优点:便于查找元素缺点:做插入删除操作时需要移动元素1.3.3

13、 顺序表的插入运算 在一般情况下,要在第i(1 in)个元素之前插入一个新元素时,首先要从最后一个(即第n个)元素开始,直到第i个元素之间共n十l个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后将新元素插入到第i项。插入结束后,线性表的长度就增加了1。29 1856633524314729871856633524314729871856633524311447 l.3.4 顺序表的删除运算在一般情况下,要删除第i (1 in)个元素时,则要从第 i+1个元素开始,直到第n个元素之间共n-i个元素依次向前移动一个位置。删除结束后,线性表的长度就减小了1。2918566335244

14、7291856633524314718566335243147 6.1.89_4)下列叙述中正确的是( )。A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间109_1下列叙述中正确的是A) 线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B) 线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C) 线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D) 上述三种说法都不对B1.4 栈和队列

15、1.4.1 栈及其基本运算 1.什么是栈栈是一种特殊的线性表。其插入与删除运算都只在线性表的一端进行。栈(stack)是限定在一端进行插入与删除的线性表。 在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素:栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照先进后出(FILO-First In Last Out)或后进先出(LIFOLast In First Out)的原则组织数据的,因此,栈也被称为先进后出表或后进先出表。6 下列关于栈的叙述中正确的是 ( d ) A)在栈中只能插入数据 B)

16、在栈中只能删除数据 C)栈是先进先出的线性表 D)栈是先进后出的线性表59_3下列关于栈的描述正确的是A) 在栈中只能插入元素而不能删除元素B) 在栈中只能删除元素而不能插入元素C) 栈是特殊的线性表,只能在一端插入或删除元素D) 栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素样1下列关于栈的叙述正确的是A栈是非线性结构B栈是一种树状结构C栈具有先进先出的特征D栈具有后进先出的特征64_4)按照“后进先出”原则组织数据的数据结构是A)队列B)栈C)双向链表 D)二叉树99_2. 下列数据结构中,能够按照”先进后出”原则存取数据的是( )。A. 循环队列 B.栈 C.队列 D.二叉树答

17、案 B解析:栈是先进后出或后进先出的线性表9.2.69_4)按“先进后出”原则组织数据的数据结构是_。84_7)下列关于栈的叙述正确的是 A 栈按“先进先出”组织数据 B 栈按“先进后出”组织数据 C 只能在栈底插入数据 D 不能删除数据 通常用指针top来指示栈顶的位置,用指针bottom指向栈底。往栈中插入一个元素称为入栈运算,从栈中删除一个元素(即删除栈顶元素)称为退栈运算。栈的基本运算有三种:入栈、退栈与读栈顶元素。(l)入栈运算 入栈运算是指在栈顶位置插入一个新元素。这个运算有两个基本操作:首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。当栈顶指针已经指向存

18、储空间的最后一个位置时,说明栈空间己满,不可能再进行入栈操作。这种情况称为栈上溢错误。10987top6F5E4D3C2Bbotton1A1098top 7X6F5E4D3C2Bbotton1A109top 8Y7X6F5E4D3C2Bbotton1A (2)退栈运算 退栈运算是指取出栈顶元素并赋给一个指定的变量。这个运算有两个基本操作:首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针退一(即 top减 1)。 当栈顶指针为0时,说明栈空,不可能进行退栈操作。这种情况称为栈下溢错误。 (3)读栈顶元素 读栈顶元素是指将栈顶元素赋给一个指定的变量。必须注意,这个运算个删除栈

19、顶元素,只是将它的值赋给一个变量,因此,在这个运算中,栈顶指针不会改变。当栈顶指针为0时,说明栈空,读不到栈顶元素。109_2)下列叙述中正确的是A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D)上述三种说法都不对C8.1.89_1)一个栈的初始状态为空。现将元素 1、2、3、4、5、A、B、C、D、E 依次入栈,然后再依次出栈,则元素出栈的顺序是()。A)12345ABCDE B)EDCBA54321C)ABCDE12345 D)54321EDCBA109_1)一

20、个栈的初始状态为空。首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为【1】。1DCBA2345红60_21栈底至栈顶依次存放元素ABCD,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是A abced B dbcea C cdabe D dcbea93_2)支持子程序调用的数据结构是 A)栈B)树C)队列D)二叉树A93_1)假如用一个长度为50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如bottom=49,to

21、p=30(数组下标),则栈中具有_【1】个元素。201.4.2 队列及其基本运算1.什么是队列队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾,通常用一个称为尾指针(rear)的指针指向队尾元素,即尾指针总是指向最后被插入的元素;允许删除的一端称为排头(也称为队头),通常也用一个排头指针(front)指向排头元素的前一个位置。显然,在队列这种数据结构中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。因此,队列又称为先进先出(FIFOFirst In First Out)或后进后出(LILOLast In Last Out)的线

22、性表,它体现了先来先服务的原则。ABCDEFFront rear5 下列关于队列的叙述中正确的是 ( c ) A)在队列中只能插入数据 B)在队列中只能删除数据 C)队列是先进先出的线性表 D)队列是先进后出的线性表9.4.74_5)下列对队列的叙述正确的是 A)队列属于非线性表 B)队列按“先进后出”原则组织数据 C)队列在队尾删除数据 D)队列按“先进先出”原则组织数据 往队列的队尾插入一个元素称为入队运算,从队列的排头删除一个元素称为退队运算。在队列的末尾插入一个元素(入队运算)只涉及队尾指针rear的变化,而要删除队列中的排头元素(退队运算)只涉及排头指针front的变化。103_1)

23、一个队列的初始状态为空。现将元素a,b,c,d,e,f,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为 【1】 。a,b,c,d,e,f,5,4,3,2,162_17 栈和队列的共同点是A 都是先进后出B都是先进先出C只允许在端点处插入和删除元素D没有共同点2.循环队列及其运算所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。9.2.89_2)下列叙述中正确的是( )。A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B)在循环队列中,只需要队头指针就能反映队的中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反

24、映队的中元素的动态变化情况D)循环队列中元素的个数是由队头指针和队尾指针共同决定D99_3. 对于循环队列,下列叙述中正确的是( )。A.队头指针是固定不变的B.队头指针一定大于队尾指针C.队头指针一定小于队尾指针D.队头指针可以大于队尾指针,也可以小于队尾指针答案 D解析:如果队头指针大于队尾指针说明队列已经循环存放数据了,如果队头指针小于队尾指针说明没有进行循环存放59_5数据结构分为逻辑结构和存储结构,循环队列属于 【5】 结构。9.1.79_三线性表的存储结构主要分为顺序存储结构和链式存储结构.队列是一种特殊的线性表,循环队列是队列的顺序存储结构93_1)下面叙述中正确的是A)栈是“先

25、进先出”的线性表B)队列是“先进后出”的线性表C)循环队列是非线性结构D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构D5.在一个容量为15的循环队列中,若头指针front6,尾指针rear9,则该循环队列中共有 3 个元素。84_3)设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有_3_个元素。24103_2)设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有 【2】 个元素。15 循环队列主要有两种基本运算:入队

26、运算与退队运算。每进行一次入队运算,队尾指针就进一。当队尾指针rear=m+l时,则置rearl。 每进行一次退队运算,排头指针就进一。当排头指针frontm+l时,则置frontl。在循环队列中,当frontrear时,不能确定是队列满还是队列空。在实际使用循环队列时,为了能区分队列满还是队列空,通常还需增加一个标志S,S值的定义如下:由此可以得出队列空与队列满的条件如下: 队列空的条件为S0; 队列满的条件为s1且frontrear。 (1)入队运算 入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本操作:首先将队尾指针进一(即 rearrear+l),并当rear=m+l时置

27、rearl;然后将新元素插入到队尾指针指向的位置。 当循环队列非空(Sl)日队尾指针等于排头指针时,说明循环队列已满,不能进行入队运算,这种情况称为上溢。 (2)退队运算 退队运算是指在循环队列的排头位置退出一个元素并赋给指定的变量。这个运算有两个基本操作:首先将排头指针进一(即rontfront+l),并当frontm+l时置ontel;然后将排头指针指向的元素赋给指定的变量。 当循环队列为空(S0)时,不能进行退队运算,这种情况称为下溢。1.5 线性链表1.5.1线性链表的基本概念 由于线性表的顺序存储结构存在以上这些缺点,因此,对于大的线性表,特别是元素变动频繁的大线性表不宜采用顺序存储

28、结构,而是采用下面要介绍的链式存储结构。假设数据结构中的每一个数据结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 链式存储方式既可用于表示线性结构。也可用于表示非线性结构。在用链式结构表示较复杂的非线性结构时,其指针域的个数要多一些。 l.线性链表 线性表的链式存储结构称为线性链表。在线性链表中,用一个专门的指针HEAD指向线性链表中第一个数据元素的结点(即存放线性表中第一个数据元素的存储结点的序号)。线性表中最后一个元素没有后件,因此,线性链表中最后一个结点的指针域为空(用 NULL或 0表示),表示链表终止。存储序号 数据域 指针域V(i)Next(i)i对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。存储序号 数据域 指针域 Next(i)i1A2923A1145A4106789A35

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1