搜档网
当前位置:搜档网 › 第一章 数据结构与算法

第一章 数据结构与算法

第一章 数据结构与算法
第一章 数据结构与算法

第一章数据结构与算法

1.1 算法

算法:是指解题方案的准确而完整的描述。

算法的基本特征:

(1)可行性:算法原则上可以精确执行,而且人们用纸和笔做有限次运算后即可完成。(2)确定性:算法中每一步骤都必须有明确定义,不允许有模棱两可和多义性的解释。(3)有穷性:算法必须能在有限的时间内做完,即能在执行有限个步骤后终止,包括合理的执行时间的含义;

(4)拥有足够的情报:通常是指输入和输出。

算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。

对数据对象的基本运算包括:算术运算、逻辑运算、关系运算、数据传输。

算法的控制结构包括:顺序结构、选择结构、循环结构。

算法基本设计方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。

算法复杂度:算法时间复杂度和算法空间复杂度。

算法时间复杂度是指执行算法所需要的计算工作量。

算法空间复杂度是指执行这个算法所需要的内存空间。

1.2 数据结构的基本概念

数据结构研究的三个方面:

(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;

(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;

(3)对各种数据结构进行的运算。

数据结构是指相互有关联的数据元素的集合。

数据的逻辑结构包含:

(1)表示数据元素的信息;

(2)表示各数据元素之间的前后件关系。

数据的逻辑结构是对数据元素之间逻辑关系的描述。

常用的数据的存储结构有顺序、链接、索引等。

线性结构条件:

(1)有且只有一个根结点;

(2)每一个结点最多有一个前件,也最多有一个后件。

非线性结构:不满足线性结构条件的数据结构。

1.3 线性表及其顺序存储结构

线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。

在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。

非空线性表的结构特征:

(1)有且只有一个根结点,且其无前件;

(2)有且只有一个终端结点,且其无后件;

(3)除根结点与_____终端结点以外,其他所有结点有且只有一个前件,也有且只有一个后件。

结点个数n 称为线性表的长度,当n=0 时,称为空表。

线性表的顺序存储结构具有以下两个基本特点:

(1)线性表中所有元素的所占的存储空间是连续的;

(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。

顺序表的常见操作是插入和删除。

1.4 栈和队列

栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为

栈底。

栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top 表示栈顶位置,用bottom

表示栈底。

栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给

一个指定的变量,此时指针无变化。

队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear 指针指向队尾,front

指针指向队头。

队列是“先进先出”(FIFO)或“后进后出”(LILO)的线性表。

队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:s=0 表示队列空,s=1 且front=rear表示队列满

1.5 线性链表

数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。

结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一一个指定的变量,此时指针无变化。

队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear 指针指向队尾,front

指针指向队头。

队列是“先进先出”(FIFO)或“后进后出”(LILO)的线性表。

队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。循环队列:s=0 表示队列空,s=1 且front=rear表示队列满

1.5 线性链表

数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。

结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针

域,用于指向前一

个或后一个结点。

在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系

可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。

链式存储方式即可用于表示线性结构,也可用于表示非线性结构。

线性链表,HEAD 称为头指针,HEAD=NULL(或0)称为空表,如果是两指针:左指针(Llink)指向前件

结点,右指针(Rlink)指向后件结点。

线性链表的基本运算:查找、插入、删除。

1.6 树与二叉树

树是一种简单的非线性结构,所有元素之间具有明显的层次特性。

在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的

根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。

在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。树的最大层次

称为树的深度。

二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子

树与右子树。

二叉树的基本性质:

(1)在二叉树的第k 层上,最多有2k-1(k≥1)个结点;

(2)深度为m 的二叉树最多有2m-1 个结点;

(3)度为0 的结点(即叶子结点)总是比度为2 的结点多一个;

(4)具有n 个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n 的整数部分;

(5)具有n 个结点的完全二叉树的深度为[log2n]+1;

(6)设完全二叉树共有n 个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n 给结

点进行编号(k=1,2….n),有以下结论:

①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);

②若2k≤n,则编号为k 的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);

③若2k+1≤n,则编号为k 的结点的右子结点编号为2k+1;否则该结点无右子结点。

满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k 层上有2k-1个结点。深度为m 的满二叉树共有2m-1 个结点。

完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的

若干结点。

二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。二叉树的遍历:

(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;

(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;

(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。

1.7 查找技术

顺序查找的使用情况:

(1)线性表为无序表;

(2)表采用链式存储结构。

二分法查找只适用于顺序存储的有序表,对于长度为n 的有序线性表,最坏情况只需比较

log2n次。

1.8 排序技术

排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。

交换类排序法:(1)冒泡排序法,需要比较的次数为n(n-1)/2;(2)快速排序法。

插入类排序法:(1 )简单插入排序法,最坏情况需要n(n-1)/2次比较;(2 )希尔排序法,最坏情况需要O(n1.5)

次比较。

选择类排序法:(1 )简单选择排序法, 最坏情况需要n(n-1)/2次比较;(2 )堆排序法,最坏情况需要O(nlog2n)

次比较。

第二章程序设计基础

2.1 程序设计设计方法和风格

如何形成良好的程序设计风格

1、源程序文档化;

2、数据说明的方法;

3、语句的结构;

4、输入和输出。

注释分序言性注释和功能性注释,语句结构清晰第一、效率第二。

2.2 结构化程序设计

结构化程序设计方法的四条原则是:1. 自顶向下;2. 逐步求精;3.模块化;4.限制使用goto语句。

结构化程序的基本结构和特点:

(1)顺序结构:一种简单的程序设计,最基本、最常用的结构;

(2)选择结构:又称分支结构,包括简单选择和多分支选择结构,可根据条件,判断应该选择哪一条分支来执

行相应的语句序列;

(3)循环结构:可根据给定条件,判断是否需要重复执行某一相同程序段。

2.3 面向对象的程序设计

面向对象的程序设计:以60 年代末挪威奥斯陆大学和挪威计算机中心研制的SIMULA 语言为标志。

面向对象方法的优点:

(1)与人类习惯的思维方法一致;

(2)稳定性好;

(3)可重用性好;

(4)易于开发大型软件产品;

(5)可维护性好。

对象是面向对象方法中最基本的概念,可以用来表示客观世界中的任何实体,对象是实体的抽象。

面向对象的程序设计方法中的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一

组表示其静态特征的属性和它可执行的一组操作组成。

属性即对象所包含的信息,操作描述了对象执行的功能,操作也称为方法或服务。

对象的基本特点:

(1)标识惟一性;

(2)分类性;

(3)多态性;

(4)封装性;

(5)模块独立性好。

类是指具有共同属性、共同方法的对象的集合。所以类是对象的抽象,对象是对应类的一个实例。

消息是一个实例与另一个实例之间传递的信息。

消息的组成包括(1)接收消息的对象的名称;(2)消息标识符,也称消息名;(3)零个或多个参数。

继承是指能够直接获得已有的性质和特征,而不必重复定义他们。

继承分单继承和多重继承。单继承指一个类只允许有一个父类,多重继承指一个类允许有多个父类。

多态性是指同样的消息被不同的对象接受时可导致完全不同的行动的现象

第三章软件工程基础

3.1 软件工程基本概念

计算机软件是包括程序、数据及相关文档的完整集合。

软件的特点包括:

(1)软件是一种逻辑实体;

(2)软件的生产与硬件不同,它没有明显的制作过程;

(3)软件在运行、使用期间不存在磨损、老化问题;

(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植

的问题;

(5)软件复杂性高,成本昂贵;

(6)软件开发涉及诸多的社会因素。

软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。

软件危机主要表现在成本、质量、生产率等问题。

软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。

软件工程包括3 个要素:方法、工具和过程。

软件工程过程是把软件转化为输出的一组彼此相关的资源和活动,包含4 种基本活动:

(1)P——软件规格说明;

(2)D——软件开发;

(3)C——软件确认;

(4)A——软件演进。

软件周期:软件产品从提出、实现、使用维护到停止使用退役的过程。

软件生命周期三个阶段:软件定义、软件开发、运行维护,主要活动阶段是:

(1)可行性研究与计划制定;

(2)需求分析;

(3)软件设计;

(4)软件实现;

(5)软件测试;

(6)运行和维护。

软件工程的目标和与原则:

目标:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、

可移植性、可追踪性和可互操作性且满足用户需求的产品。

基本目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发软件易于移植;需要较低

的费用;能按时完成开发,及时交付使用。

基本原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。

软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。

软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境。

软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。

软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。

软件工程原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。3.2 结构化分析方法

结构化方法的核心和基础是结构化程序设计理论。

需求分析方法有(1)结构化需求分析方法;(2)面向对象的分析的方法。

从需求分析建立的模型的特性来分:静态分析和动态分析。

结构化分析方法的实质:着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典

为主要工具,建立系统的逻辑模型。

结构化分析的常用工具

(1)数据流图;(2)数据字典;(3)判定树;(4)判定表。

数据流图:描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。

数据字典:对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分

析员对于输入、输出、存储成分和中间计算结果有共同的理解。

判定树:从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出

判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。

判定表:与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于

某一组条件取值的组合而引发的,使用判定表描述比较适宜。

数据字典是结构化分析的核心。

软件需求规格说明书的特点:

(1)正确性;

(2)无岐义性;

(3)完整性;

(4)可验证性;

(5)一致性;

(6)可理解性;

(7)可追踪性。

3.3 结构化设计方法

软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理

模型。

软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。

从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。

结构设计:定义软件系统各主要部件之间的关系。

数据设计:将分析时创建的模型转化为数据结构的定义。

接口设计:描述软件内部、软件和协作系统之间以及软件与人之间如何通信。

过程设计:把系统结构部件转换成软件的过程描述。

从工程管理角度来看:概要设计和详细设计。

软件设计的一般过程:软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次

的过程设计;穿

插进行数据设计和接口设计。

衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准。

在程序结构中各模块的内聚性越强,则耦合性越弱。优秀软件应高内聚,低耦合。

软件概要设计的基本任务是:

(1)设计软件系统结构;(2)数据结构及数据库设计;

(3)编写概要设计文档;(4)概要设计文档评审。

模块用一个矩形表示,箭头表示模块间的调用关系。

在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。还可用带实心圆的箭头表示传递的是控制信息,空心圆箭心表示传递的是数据。

结构图的基本形式:基本形式、顺序形式、重复形式、选择形式。

结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。

典型的数据流类型有两种:变换型和事务型。

变换型系统结构图由输入、中心变换、输出三部分组成。

事务型数据流的特点是:接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给

出结果。

详细设计:是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和

数据结构的细节。

常见的过程设计工具有:图形工具(程序流程图)、表格工具(判定表)、语言工具(PDL)。

3.4 软件测试

软件测试定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或

是弄清预期结果与实际结果之间的差别。

软件测试的目的:发现错误而执行程序的过程。

软件测试方法:静态测试和动态测试。

静态测试包括代码检查、静态结构分析、代码质量度量。不实际运行软件主要通过人工进行。动态测试:是基本计算机的测试,主要包括白盒测试方法和黑盒测试方法。

白盒测试:在程序内部进行,主要用于完成软件内部CAO作的验证。主要方法有逻辑覆盖、基本基路径测试。

黑盒测试:主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、_____初始化和终止

条件错,用于软件确认。主要方法有等价类划分法、边界值分析法、错误推测法、因果图等。软件测试过程一般按4 个步骤进行:单元测试、集成测试、验收测试(确认测试)和系统测试。

3.5 程序的调试

程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行。

程序调试的基本步骤:

(1)错误定位;

(2)修改设计和代码,以排除错误;

(3)进行回归测试,防止引进新的错误。

软件调试可分表静态调试和动态调试。静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的设计手段,而动态调试是辅助静态调试。主要调试方法有:

(1)强行排错法;

(2)回溯法;

(3)原因排除法。

第四章数据库设计基础

4.1 数据库系统的基本概念

数据:实际上就是描述事物的符号记录。

数据的特点:有一定的结构,有型与值之分,如整型、实型、字符型等。而数据的值给出了符合定型的值,如

整型值15。

数据库:是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各

个应用程序共享。

数据库存放数据是按数据所提供的数据模式存放的,具有集成与共享的特点。

数据库管理系统:一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,

是数据库的核心。

数据库管理系统功能:

(1)数据模式定义:即为数据库构建其数据框架;

(2)数据存取的物理构建:为数据模式的物理存取与构建提供有效的存取方法与手段;(3)数据操纵:为用户使用数据库的数据提供方便,如查询、插入、修改、删除等以及简单的算术运算及统计;

(4)数据的完整性、安生性定义与检查;

(5)数据库的并发控制与故障恢复;

(6)数据的服务:如拷贝、转存、重组、性能监测、分析等。

为完成以上六个功能,数据库管理系统提供以下的数据语言:

(1)数据定义语言:负责数据的模式定义与数据的物理存取构建;

(2)数据操纵语言:负责数据的操纵,如查询与增、删、改等;

(3)数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等。

数据语言按其使用方式具有两种结构形式:交互式命令(又称自含型或自主型语言)宿主型语言(一般可嵌入某些宿主语言中)。

数据库管理员:对数据库进行规划、设计、维护、监视等的专业管理人员。

数据库系统:由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平

台(软件)五个部分构成的运行实体。

数据库应用系统:由数据库系统、应用软件及应用界面三者组成。

文件系统阶段:提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的

能力。

层次数据库与网状数据库系统阶段:为统一与共享数据提供了有力支撑。

关系数据库系统阶段

数据库系统的基本特点:数据的集成性、数据的高共享性与低冗余性、数据独立性(物理独立性与逻辑独立

性)、数据统一管理与控制。

数据库系统的三级模式:

(1)概念模式:数据库系统中全局数据逻辑结构的描述,全体用户公共数据视图;

(2)外模式:也称子模式与用户模式。是用户的数据视图,也就是用户所见到的数据模式;(3)内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。

数据库系统的两级映射:

(1)概念模式到内模式的映射;

(2)外模式到概念模式的映射。

4.2 数据模型

数据模型的概念:是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库

系统的信息表与操作提供一个抽象的框架。描述了数据结构、数据操作及数据约束。

E-R 模型的基本概念

(1)实体:现实世界中的事物;

(2)属性:事物的特性;

(3)联系:现实世界中事物间的关系。实体集的关系有一对一、一对多、多对多的联系。

E-R 模型三个基本概念之间的联接关系:实体是概念世界中的基本单位,属性有属性域,每个实体可取属性域

内的值。一个实体的所有属性值叫元组。

E-R 模型的图示法:(1)实体集表示法;(2)属性表法;(3)联系表示法。

层次模型的基本结构是树形结构,具有以下特点:

(1)每棵树有且仅有一个无双亲结点,称为根;

(2)树中除根外所有结点有且仅有一个双亲。

从图论上看,网状模型是一个不加任何条件限制的无向图。

关系模型采用二维表来表示,简称表,由表框架及表的元组组成。一个二维表就是一个关系。在二维表中凡能唯一标识元组的最小属性称为键或码。从所有侯选健中选取一个作为用户使用

的键称主键。表

A 中的某属性是某表

B 的键,则称该属性集为A 的外键或外码。

关系中的数据约束:

(1)实体完整性约束:约束关系的主键中属性值不能为空值;

(2)参照完全性约束:是关系之间的基本约束;

(3)用户定义的完整性约束:它反映了具体应用中数据的语义要求。

4.3 关系代数

关系数据库系统的特点之一是它建立在数据理论的基础之上,有很多数据理论可以表示关系模型的数据操作,

其中最为著名的是关系代数与关系演算。

关系模型的基本运算:

(1)插入(2)删除(3)修改(4)查询(包括投影、选择、笛卡尔积运算)

4.4 数据库设计与管理

数据库设计是数据应用的核心。

数据库设计的两种方法:

(1)面向数据:以信息需求为主,兼顾处理需求;

(2)面向过程:以处理需求为主,兼顾信息需求。

数据库的生命周期:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运

行阶段、进一步修改阶段。

需求分析常用结构析方法和面向对象的方法。结构化分析(简称SA)方法用自顶向下、逐层分解的方式分析

系统。用数据流图表达数据和处理过程的关系。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。

数据字典是各类数据描述的集合,包括5 个部分:数据项、数据结构、数据流(可以是数据项,也可以是数据

结构)、数据存储、处理过程。

数据库概念设计的目的是分析数据内在语义关系。设计的方法有两种

(1)集中式模式设计法(适用于小型或并不复杂的单位或部门);

(2)视图集成设计法。

设计方法:E-R 模型与视图集成。

视图设计一般有三种设计次序:自顶向下、由底向上、由内向外。

视图集成的几种冲突:命名冲突、概念冲突、域冲突、约束冲突。

关系视图设计:关系视图的设计又称外模式设计。

关系视图的主要作用:

(1)提供数据逻辑独立性;

(2)能适应用户对数据的不同需求;

(3)有一定数据保密功能。

数据库的物理设计主要目标是对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度有效利用存储空间。一般RDBMS 中留给用户参与物理设计的内容大致有索引设计、集成簇设计和分区设计。

数据库管理的内容:

(1)数据库的建立;

(2)数据库的调整;

(3)数据库的重组;

(4)数据库安全性与完整性控制;

(5)数据库的故障恢复;

(6)数据库监控。

数据结构 习题 第一章 绪论

第1章绪论 一、选择题 1. 算法的计算量的大小称为计算的()。 A.效率 B. 复杂性 C. 现实性 D. 难度 2. 算法的时间复杂度取决于() A.问题的规模 B. 待处理数据的初态 C. A和B 3.计算机算法指的是(1),它必须具备(2)这三个特性。 (1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法 (2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性 C. 确定性、有穷性、稳定性 D. 易读性、稳定性、安全性 4.一个算法应该是() A.程序 B.问题求解步骤的描述 C.要满足五个基本特性 D.A和C. 5. 下面关于算法说法错误的是() A.算法最终必须由计算机程序实现 B.为解决某问题的算法同为该问题编写的程序含义是相同的 C. 算法的可行性是指指令不能有二义性 D. 以上几个都是错误的 6. 下面说法错误的是()【南京理工大学 2000 一、2 (1.5分)】 (1)算法原地工作的含义是指不需要任何额外的辅助空间 (2)在相同的规模n下,复杂度O(n)的算法在时间上总是优于复杂度O(2n)的算法 (3)所谓时间复杂度是指最坏情况下,估算算法执行时间的一个上界 (4)同一个算法,实现语言的级别越高,执行效率就越低 A.(1) B.(1),(2) C.(1),(4) D.(3) 7.从逻辑上可以把数据结构分为()两大类。【武汉交通科技大学 1996 一、4(2分)】A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 8.以下与数据的存储结构无关的术语是()。【北方交通大学 2000 二、1(2分)】A.循环队列 B. 链表 C. 哈希表 D. 栈 9.以下数据结构中,哪一个是线性结构()?【北方交通大学 2001 一、1(2分)】A.广义表 B. 二叉树 C. 稀疏矩阵 D. 串 10.以下那一个术语与数据的存储结构无关?()【北方交通大学 2001 一、2(2分)】A.栈 B. 哈希表 C. 线索树 D. 双向链表 11.在下面的程序段中,对x的赋值语句的频度为()【北京工商大学 2001 一、10(3分)】 FOR i:=1 TO n DO FOR j:=1 TO n DO x:=x+1; A. O(2n) B.O(n) C.O(n2) D.O(log2n) 12.程序段 FOR i:=n-1 DOWNTO 1 DO FOR j:=1 TO i DO IF A[j]>A[j+1] THEN A[j]与A[j+1]对换; 其中 n为正整数,则最后一行的语句频度在最坏情况下是()

数据结构与算法第1章参考答案

习题参考答案 一.选择题 1.从逻辑上可以把数据结构分为(C)两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2.在下面的程序段中,对x的斌值语句的频度为(C)。 for( t=1;k<=n;k++) for(j=1;j<=n; j++) x=x十1; A. O(2n) B. O (n) C. O (n2). D. O(1og2n) 3.采用链式存储结构表示数据时,相邻的数据元素的存储地址(C)。 A.一定连续B.一定不连续 C.不一定连续 D.部分连续,部分不连续 4.下面关于算法说法正确的是(D)。 A.算法的时间复杂度一般与算法的空间复杂度成正比 B.解决某问题的算法可能有多种,但肯定采用相同的数据结构 C.算法的可行性是指算法的指令不能有二义性 D.同一个算法,实现语言的级别越高,执行效率就越低 5.在发生非法操作时,算法能够作出适当处理的特性称为(B)。 A.正确性 B.健壮性 C.可读性 D.可移植性 二、判断题 1.数据的逻辑结构是指数据的各数据项之间的逻辑关系。(√) 2.顺序存储方式的优点是存储密度大,且插人、删除运算效率高。(×) 3.数据的逻辑结构说明数据元素之间的次序关系,它依赖于数据的存储结构。(×) 4.算法的优劣与描述算法的语言无关,但与所用计算机的性能有关。(×) 5.算法必须有输出,但可以没有输人。(√) 三、筒答题 1.常见的逻辑结构有哪几种,各自的特点是什么?常用的存储结构有哪几种,各自的特点是什么? 【答】常见的四种逻辑结构: ①集合结构:数据元素之间是“属于同一个集合” ②线性结构:数据元素之间存在着一对一的关系 ③树结构:数据元素之间存在着一对多的关系 ④结构:数据元素之间存在着多对多的关系。 常见的四种存储结构有: ①顺序存储:把逻辑上相邻的元素存储在物理位置相邻的存储单元中。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。 ②链接存储:对逻辑上相邻的元素不要求物理位置相邻的存储单元,元素间的逻辑关系通过附设的指针域来表示。 ③索引存储:通过建立索引表存储结点信息的方法,其中索引表一般存储结点关键字和一个地点信息,可通过该地址找到结点的其他信息。 ④散列存储:根据结点的关键字直接计算出该结点的存储地址的方法。 2.简述算法和程序的区别。 【解答】一个算法若用程序设计语言来描述,则它就是一个程序。算法的含义与程序十分相

《数据结构与算法 Python精品课程》第二章:算法分析

?.算法分析 2.1.?标 ·了解为何算法分析的重要性 ·能够??“O ”表?法来描述算法执?时间 ·了解在Python 列表和字典类型中通?操作??“O ”表?法表?的执?时间 ·了解Python 数据类型的具体实现对算法分析的影响 ·了解如何对简单的Python 程序进?执?时间检测 2.2.什么是算法分析 计算机初学者经常将??的程序与他?的?较。你也可能注意到了电脑程序常常看起来很相似,尤其是那些简单的程序。?个有趣的问题出现了,当两个看起来不同的程序解决相同的问题时,?个程序会优于另?个吗? 为了回答这个问题,我们需要记住的是,程序和它所代表的基本算法有着重要差别。在第?章中我们说到,算法是问题解决的通?的分步的指令的聚合。这是?种能解决任何问题实例的?法,?如给定?个特定的输?,算法能产?期望的结果。从另???看,?个程序是?某种编程语?编码后的算法。同?算法通过不同的程序员采?不同的编程语?能产?很多程序。 为进?步探究这种差异,请阅读接下来展?的函数。这个函数解决了?个我们熟知的问题,计算前n 个整数的和。其中的算法使?了?个初始值为0的累加变量的概念。解决?案是遍历这n 个整数,逐个累加到累加变量。 代码2.1前n 个正整数求和(active1 )

现在看下?的foo函数。可能第?眼看上去?较奇怪,但是进?步观察你会发现,这个函数所实现的功能与之前代码2.1中的函数基本相同。看不太懂的原因是糟糕的编码。我们没有使?好的变量命名来增加可读性,并且在累加过程中使?了多余的赋值语句。 回到前?我们提出的问题:是否?个程序会优于另?个?答案取决于你??的标准。如果你关?可读性,那么sum_of_n函数肯定?foo函数更好。实际上,在你的编程?门课程上你可能见过很多这样的例?,因为这些课程的?标之?就是帮助你编写更具可读性的程 代码2.2 另?种前n个正整数求和(ac ve2) def foo(tom): fred=0 for bill in range(1,tom+1): barney = bill fred = fred + barney return fred print (foo(10)) 序。然?,在这门课程中,我们主要感兴趣的是算法本?的特性。(我们当然希望你可以继续努?写出更具可读性的代码。) 算法分析主要就是从计算资源的消耗的?度来评判和?较算法。我们想要分析两种算法并且指出哪种更好,主要考虑的是哪?种可以更?效地利?计算资源。或者占?更少的资源。从这个?度,上述两个函数实际上是基本相同的,它们都采?了?样的算法来解决累加求和问题。

全国计算机二级考试 数据结构与算法

全国计算机二级考试 第一章数据结构与算法 1.一个算法一般都可以用_____、_____ 、 _____三种控制结构组合完成。 [解析]顺序、选择(分支)、循环(重复) 一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是________。 [解析]算法的控制结构 在一般的计算机系统中,有算术运算、逻辑运算、关系运算和________四类基本的操作和运算。 [解析]数据传输 2.常用于解决“是否存在”或“有多少种可能”等类型的问题(例如求解不定方程的问题)的算法涉及基本方法是() A.列举法 B.归纳法 C.递归法 D.减半递推法 [解析]列举就是列举出所有可能性,将所有可能性统统列举出来,然后解决问题的方法。所以A 3.根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的,这是算法设计基本方法中的____。 [解析]列举法

4.通过列举少量的特殊情况,经过分析,最后找出一般的关系的算法设计思想是() A.列举法 B.归纳法 C.递归法 D.减半递推法 [解析]B 5.在用二分法求解方程在一个闭区间的实根时,采用的算法设计技术是() A.列举法 B.归纳法 C.递归法 D.减半递推法 [解析]二分法就是从一半处比较,减半递推技术也称分治法,将问题减半。所以D 6.将一个复杂的问题归结为若干个简单的问题,然后将这些较简单的问题再归结为更简单的问题,这个过程可以一直做下去,直到最简单的问题为止,这是算法设计基本方法中的___。如果一个算法P显式地调用自己则称为___。如果算法P调用另一个算法Q,而算法Q又调用算法P,则称为_____. [解析]递归法直接递归间接递归调用 7.算法中各操作之间的执行顺序称为_____。描述算法的工具通常有_____、_____ 、 _____。 [解析]控制结构传统流程图、N-S结构化流程图、算法描述语言 8.从已知的初始条件出发,逐步推出所要求的各中间结果和最后结果,这

大数据结构与算法设计知识点

数据结构与算法设计知识点 试题类型: 本课程为考试科目(闭卷笔试),试题类型包括:概念填空题(10 %),是非判断题(10 %),单项选择题(40 %),算法填空题(10%),算法应用题(20 %),算法设计题(10 %)。 第一章绪论 重点容及要求: 1、了解与数据结构相关的概念(集合、数据、数据元素、数据项、关键字、元 素之间的关系等)。 数据:所有能被输入到计算机中,且能被计算机处理的符号的 集合。是计算机操作的对象的总称。是计算机处理的信息的某种特定 的符号表示形式。 数据元素:是数据(集合)中的一个“个体”,数据结构中的基 本单位,在计算机程序常作为一个整体来考虑和处理。 数据项:是数据结构中讨论的最小单位,数据元素可以是一个或 多个数据项的组合 关键码:也叫关键字(Key),是数据元素中能起标识作用的数据 项。 其中能起到唯一标识作用的关键码称为主关键码(简称主码); 否则称为次关键码。通常,一个数据元素只有一个主码,但可以有多 个次码。 关系:指一个数据集合中数据元素之间的某种相关性。 数据结构:带“结构”的数据元素的集合。这里的结构指元素之 间存在的关系。 数据类型:是一个值的集合和定义在此集合上的一组操作的总

称。 2、掌握数据结构的基本概念、数据的逻辑结构(四种)和物理结构(数据元素 的表示与关系的表示、两类存储结构:顺序存储结构和链式存储结构)。 数据结构包括逻辑结构和物理结构两个层次。 数据的逻辑结构:是对数据元素之间存在的逻辑关系的一种抽象的描述,可以用一个数据元素的集合和定义在此集合上的若干关系来表示 逻辑结构有四种:线性结构、树形结构、图状结构、集合结构数据的物理结构:是其逻辑结构在计算机中的表示或实现,因此又称其为存储结构。 存储结构:顺序存储结构和链式存储结构 顺序存储结构:利用数据元素在存储器中相对位置之间的某种特定的关系来表示数据元素之间的逻辑关系; 链式存储结构:除数据元素本身外,采用附加的“指针”表示数据元素之间的逻辑关系。 3、了解算法分析的基本方法,掌握算法时间复杂度相关的概念。 算法:是为了解决某类问题而规定的一个有限长的操作序列 或处理问题的策略 一个算法必须满足以下五个重要特性:1.有穷性2.确定性3.可行性4.有输入 5.有输出 设计算法时,通常还应考虑满足以下目标: 1.正确性, 2.可读性, 3.健壮性 4.高效率与低存储量需求

数据结构与算法习题库(考前必备)

第一章绪论 一.选择题 1.数据结构被形式地定义为(K,R),其中K是①_B_的有限集合,R是K上的②_D_的有限集合。 ①A.算法B.数据元素C.数据操作D.逻辑结构 ②A.操作B.映象C.存储D.关系 2.算法分析的目的是①C,算法分析的两个主要方面是②A。 ①A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 ②A.空间复杂性和时间复杂性 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 3.在计算机存储器内表示时,物理地址和逻辑地址相同并且是连续的,称之为(B) A.逻辑结构B.顺序存储结构 C.链表存储结构D.以上都不对 4.数据结构中,在逻辑上可以把数据结构分成:( C )。 A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构5.以下属于顺序存储结构优点的是(A )。 A.存储密度大B.插入运算方便 C.删除运算方便D.可方便地用于各种逻辑结构的存储表示 6.数据结构研究的内容是(D )。 A.数据的逻辑结构B.数据的存储结构 C.建立在相应逻辑结构和存储结构上的算法D.包括以上三个方面

7.链式存储的存储结构所占存储空间(A )。 A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B.只有一部分,存放结点值 C.只有一部分,存储表示结点间关系的指针 D.分两部分,一部分存放结点值,另一部分存放结点所占单元数 8.一个正确的算法应该具有5 个特性,除输入、输出特性外,另外3 个特性是(A )。 A.确定性、可行性、有穷性B.易读性、确定性、有效性C.有穷性、稳定性、确定性D.可行性、易读性、有穷性9.以下关于数据的逻辑结构的叙述中正确的是(A)。 A.数据的逻辑结构是数据间关系的描述 B.数据的逻辑结构反映了数据在计算机中的存储方式 C.数据的逻辑结构分为顺序结构和链式结构 D.数据的逻辑结构分为静态结构和动态结构 10.算法分析的主要任务是(C )。 A.探讨算法的正确性和可读性B.探讨数据组织方式的合理性C.为给定问题寻找一种性能良好的解决方案D.研究数据之间的逻辑关系 二.解答 设有一数据的逻辑结构为:B=(D, S),其中: D={d1, d2, …, d9} S={, , , , , , , , , , }画出这个逻辑结构示意图。

智慧树知道网课《数据结构与算法》课后章节测试满分答案

绪论单元测试 1 【判断题】(2分) 数据结构主要研究内存中数据组织和数据处理方法。 A. 错 B. 对 正确 本题总得分2分 2 【多选题】(2分) 数据结构与算法课程的学习目标是()。 A. 理解并掌握典型数据结构及七本运算的实现算法。 B. 提高计算思维能力 C. 能利用所学数据结构和算法知识解决实际问题。 D. 具备基本的算法设计与分析能力。 3 【多选题】(2分) 数据结构课程的学习重点是()

A. 掌握各种数据结构的逻辑特性 B. 掌握基本的算法分析方法。 C. 掌握各种数据结构的存储结构的设计与实现。 D. 掌握基本的算法设计方法 第一章测试 1 【多选题】(3分) 算法分析主要分析的是算法的() A. 空间复杂性 B. 时间复杂性 C. 正确性 D. 可读性 2 【判断题】(2分)

数据结构是数据对象与对象中数据元素之间关系的集合。 A. 错 B. 对 3 【判断题】(2分) 数据元素是数据的最小单位。 A. 错 B. 对 4 【判断题】(2分) 数据的逻辑结构是指各数据元素之间的逻辑关系,是用户按使用需要而建立的。 A. 对 B. 错

5 【判断题】(3分) 算法和程序没有区别,所以在数据结构中二者是通用的。 A. 错 B. 对 6 【单选题】(3分) 数据结构中,与所使用的计算机无关的是数据的()结构 A. 存储 B. 物理与存储 C. 逻辑 D. 物理 7 【单选题】(3分) 算法分析的目的是() A. 找出数据结构的合理性

B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 8 【单选题】(3分) 设x,y,n为正整数,下列程序片段的渐进时间复杂度是()x=1;y=1; while(x+y<=n){ if(x>y)y++; elsex++;} A. O(n2) B. O(log2n) C. O(n) D. O((2/3)n) 9 【多选题】(3分) 在数据结构中,从逻辑上可以把数据结构分成()

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

第1章绪论 习题 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现? 5.选择题 (1)在数据结构中,从逻辑上可以把数据结构分成()。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.部结构和外部结构 (2)与数据元素本身的形式、容、相对位置、个数无关的是数据的()。 A.存储结构 B.存储实现 C.逻辑结构 D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点 B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样 D.数据元素所包含的数据项的个数要相等 (4)以下说确的是()。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位 C.数据结构是带有结构的各数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 (5)以下与数据的存储结构无关的术语是()。 A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构 A.树 B.字符串 C.队 D.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90; y=100; while(y>0) if(x>100) {x=x-10;y--;} else x++; (2)for (i=0; i

数据结构与算法习题:选择题、判断题

1. 从逻辑上可以把数据结构分为( C )两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2. 在下面的程序段中,对x的赋值语句的频度为( C )。 For(k=1;k<=n;k++) For(j=1;j<=n;j++) x=x+1; n) A.O(2n) B.O(n) C.O(n2) D.O(log 2 3. 采用顺序存储结构表示数据时,相邻的数据元素的存储地址( A )。 A.一定连续 B.一定不连续 C.不一定连续 D.部分连续、部分不连续 4. 下面关于算法的说法,正确的是( D )。 A.算法的时间复杂度一般与算法的空间复杂度成正比 B.解决某问题的算法可能有多种,但肯定采用相同的数据结构 C.算法的可行性是指算法的指令不能有二义性 D.同一个算法,实现语言的级别越高,执行效率就越低 5. 在发生非法操作时,算法能够作出适当处理的特性称为( B )。 A.正确性 B.健壮性 C.可读性 D.可移植性 第二章线性表 1. 线性表是( A )。 A.一个有限序列,可以为空 B.一个有限序列,不能为空 C.一个无限序列,可以为空 D.一个无限序列,不能为空 2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的( A )个元素。 A.n/2 B.(n+1)/2 C.(n-1)/2 D.n 3.线性表采用链式存储时,其地址( D )。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续与否均可以 4.用链表表示线性表的优点是( C )。 A.便于随机存取 B.花费的存储空间较顺序存储少 C.便于插入和删除 D.数据元素的物理顺序与逻辑顺序相同 5.链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( C )存储方式最节省运算时间。 A.单链表 B.双链表 C.单循环链表 D.带头结点的双向循环链表6.下面关于线性表的叙述,错误的是( B )。

数据结构习题汇编01 第一章 绪论 试题

《数据结构与算法设计》习题册 第一章绪论 一、单项选择题 1.数据结构是一门研究非数值计算的程序设计问题中计算机的①以及它们之间的②和运 算等的学科。 ①A. 数据元素 B. 计算方法 C. 逻辑存储 D. 数据映象 ②A. 结构 B. 关系 C. 运算 D. 算法 2.数据结构被形式地定义为(K,R),其中K是①的有限集,R是K上的②有限集。 ①A. 算法 B. 数据元素 C. 逻辑结构 D. 数据操作 ②A. 操作 B. 存储 C. 映象 D. 关系 3.在数据结构中,从逻辑上可以把数据结构分成。 A. 动态结构和静态结构 B. 紧凑结构和非紧凑结构 C. 线性结构和非线性结构 D. 内部结构和外部结构 4.数据结构在计算机内存中的表示是指。 A. 数据的存储结构 B. 数据结构 C. 数据的逻辑结构 D. 数据元素之间的关系 5.在数据结构中,与所使用的计算机无关的是数据的结构。 A. 逻辑 B. 存储 C. 逻辑和存储 D. 物理 6.算法分析的目的是①,算法分析的两个主要方面是②。 ①A. 找出数据结构的合理性 B. 研究算法中的输入和输出的关系 C. 分析算法的效率以求改进 D. 分析算法的易懂性和文档性 ②A. 空间复杂度和时间复杂度 B. 正确性和简明性 C. 可读性和文档性 D. 数据复杂性和程序复杂性 7.计算机算法指的是①,它必须具备输入、输出和②等5个特性。 ①A. 计算方法 B. 排序方法 C. 解决问题的有限运算序列 D. 调度方法 ②A. 可行性、可移植性和可扩充性 B. 可行性、确定性和有穷性 C. 确定性、有穷性和稳定性 D. 易读性、稳定性和安全性 8.在以下叙述中,正确的是。 A. 线性表的线性存储结构优于链表存储结构 B. 二维数组是其数据元素为线性表的线性表 C. 栈的操作方式是先进先出 D. 队列的操作方式是先进后出 9.在决定选取何种存储结构时,一般不考虑。 A. 各结点的值如何 B. 结点个数的多少 C. 对数据有哪些运算 D. 所用编程语言实现这种结构是否方便 10.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储。

《数据结构与算法》廖明宏课后答案

《数据结构与算法》廖明宏课后答案第一次作业(第2章) 4.List Combine(List &L1,List &L2) { LNode *ap1,*ap2,*p; ap1=L1->next; ap2=L2->next; if(ap1->elementelement) { while(ap1-next!=NULL) ap1=ap1->next; ap1=L2; return L1; } else { while(ap2->next!=NULL) ap2=ap2->next; ap2=L1; return L2; } } 8.XSXXXSSSXXSXXSXXSSSS 15.节点只有一个链域的环形链表只能是一个单向环形链表,但为了能逆时针方向查找,可

以在链表的每个节点中增加一个代表链表元素总数的整型num。该环形链表的每个节点可说 明为: struct celltype{ Elementtype element; celltype *next; int num; }List; 顺时针方向查找就按照普通单向链表的查找;逆时针方向查找不是直接一步就达到,逆时针 查找当前节点的下一个节点可以通过顺时针转一圈来达到,代表元素总数的整型num就决 定了p=p->next(p为当前节点)所需循环的次数,最终达到逆时针查找的目的。顺时针访问表的每个节点的算法为: void TravelList(List la) { List p=la->next; int i=0; while(inum) { i++; p=p->next; } }

18.void R(List la,elementtype x) { LNode* p=la->next; LNode* q=la->next; int n=1; while(p-next!=NULL && p->data!=x) { p=p->next; n++; } if(p==NULL) { LNode *s; int j=0; while(q && jnext; j++; } s->element=x; s->next=q->next; q->next=s; cout<<"已将x插在表尾。" }else{

计算机-数据结构与算法

第一章 数据结构与算法 1.1 算法 1 描述。 算法规定了解决某类问题所需的操作语句以及执行顺序,使其能通过有限的指令语句,在一定时间内解决问题。 算法是一个操作序列、有限长度,目的是解决某类问题。 *:算法不等于程序,也不等于计算方法。程序的编制不可能优于算法的设计。 2、算法的基本特征 (1)可行性。针对实际问题而设计的算法,执行后能够得到满意的结果。 (2)确定性。每一条指令的含义明确,无二义性。并且在任何条件下,算法只有唯一的一条执行路径,即相同的输入只能得出相同的输出。 (3)有穷性。算法必须在有限的时间内完成。有两重含义,一是算法中的操作步骤为有限个,二是每个步骤都能在有限时间内完成。 (4)拥有足够的情报。指的是有足够的输入和输出。 *:综上所述,所谓算法,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。 3、算法的基本要素 一个算法通常由两种基本要素组成:一是对数据对象的运算和操作;二是算法的控制结构。 (1)算法中对数据的运算和操作 每个算法实际上市按解题要求从环境能进行的所有操作中选择合适的操作所组成的一组指令序列。因此,计算机算法就是计算机能处理的操作所组成的指令序列。 在一般的计算机系统中,基本的运算和操作有以下四类: ①算术运算:主要包括加、减、乘、除等运算; ②逻辑运算:主要包括与(AND)、或(OR)、非(NOT) 等运算; ③关系运算:主要包括大于、小于、等于、不等于等运算 ④数据传输:主要包括赋值、输入、输出等操作。 (2)算法的控制结构 顺序、选择和循环。

4、算法的基本方法(计算机解题的过程实际上是在实施某种算法) (1)列举法(列举所有解决方案) 根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。 (2)归纳法(特殊->一般)适合于列举量为无限的情况 通过列举少量的特殊情况,经过分析,最后找出一般的关系。 (3)递推法(已知->未知) 从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。 (4)递归法(逐层分解) 将一个复杂的问题归结为若干个较简单的问题,然后将这些较简单的每一个问题再归结为更简单的问题 (5)减半递推法 “减半”是指将问题的规模减半,而问题的性质不变,所谓“递推”是指重复“减半”的过程。 (6)回溯法 复杂应用,找出解决问题的线索,然后沿着这个线索逐步多次“探”、“试”。 5、算法复杂度主要包括时间复杂度和空间复杂度。 算法的复杂度是衡量算法好坏的量度。 (1)算法时间复杂度是指执行算法所需要的计算工作量,可以用执行算法的过程中所需基本运算的执行次数来度量。 影响计算机工作量的主要因素: 第一:基本运算次数;第二:问题规模。 下面的方法不能用来度量算法的时间复杂度: 第一:算法程序的长度或算法程序中的语句(指令)条数; 第二:算法程序所执行的语句条数; 第三:算法程序执行的具体时间 (2 一个算法所用的内存空间包括: 1)算法程序所占用的存储空间; 2)输入的初始数据所占的存储空间;3)算法执行过程中的额外空间。 6、考题练习: 1)下列叙述正确的是() (A)算法就是程序 (B)算法强调的是利用技巧提高程序执行效率 (C)设计算法时只需考虑结果的可靠性 (D)以上三种说法都不对 2)下面叙述正确的是() (A)算法的执行效率与数据的存储结构无关 (B)算法的空间复杂度是指算法程序中指令(或语句)的条数 (C)算法的有穷性是指算法必须能在执行有限个步骤之后终止 (D)以上三种描述都不对 3)下列叙述中正确的是() (A)一个算法的空间复杂度大,则其时间复杂度也必定大 (B)一个算法空间复杂度大,则其时间复杂度必定小 (C)一个算法的时间复杂度大,则其时间复杂度必定小

第一章数据结构与算法练习一

二级公共基础知识第一章数据结构与算法练习一 1.栈和队列的共同特点是(只允许在端点处插入和删除元素)。 2.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是(e2,e4,e3,e1)。 3.栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是(DCBEA)。 4.栈通常采用的两种存储结构是(线性存储结构和链表存储结构)。 5.下列关于栈的叙述正确的是(D)。 A.栈是非线性结构 B.栈是一种树状结构 C.栈具有先进先出的特征 D.栈有后进先出的特征 6.链表不具有的特点是(B)。 A.不必事先估计存储空间 B.可随机访问任一元素 C.插入删除不需要移动元素 D.所需空间与线性表长度成正比 7.用链表表示线性表的优点是(便于插入和删除操作)。 8.在单链表中,增加头结点的目的是(方便运算的实现)。 9.循环链表的主要优点是(从表中任一结点出发都能访问到整个链表)。 10.线性表L=(a1,a2,a3,……ai,……an),下列说法正确的是(D)。 A.每个元素都有一个直接前件和直接后件 B.线性表中至少要有一个元素 C.表中诸元素的排列顺序必须是由小到大或由大到小 D.除第一个和最后一个元素外,其余每个元素都有一个且只有一个直接前件和直接后件 11.线性表若采用链式存储结构时,要求内存中可用存储单元的地址(D)。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续不连续都可以 12.线性表的顺序存储结构和线性表的链式存储结构分别是(随机存取的存储结构、顺序存取的存储结构)。 13.树是结点的集合,它的根结点数目是(有且只有1)。 14.在深度为5的满二叉树中,叶子结点的个数为(31)。 15.具有3个结点的二叉树有(5种形态)。 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为(13)。 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba)。 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA)。 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca)。 20.数据库保护分为:(安全性控制)、(完整性控制)、并发性控制和数据的恢复。 二级公共基础知识第一章数据结构与算法练习二 1. 在计算机中,算法是指(解题方案的准确而完整的描述) 2.在下列选项中,哪个不是一个算法一般应该具有的基本特征(无穷性) 说明:算法的四个基本特征是:可行性、确定性、有穷性和拥有足够的情报。 3. 算法一般都可以用哪几种控制结构组合而成(顺序、选择、循环) 4.算法的时间复杂度是指(算法执行过程中所需要的基本运算次数) 5. 算法的空间复杂度是指(执行过程中所需要的存储空间)

《数据结构与算法》(张晓莉)习题

第一章绪论 1. 从逻辑上可以把数据结构分为()两大类。 A.动态结构、静态结构B.顺序结构、链式结构 C.线性结构、非线性结构D.初等结构、构造型结构 2. 在下面的程序段中,对x的赋值语句的频度为()。 For(k=1;k<=n;k++) For(j=1;j<=n;j++) x=x+1; A.O(2n) B.O(n) C.O(n2) D.O(log2n) 3. 采用顺序存储结构表示数据时,相邻的数据元素的存储地址()。 A.一定连续B.一定不连续 C.不一定连续D.部分连续、部分不连续 4. 下面关于算法的说法,正确的是()。 A.算法的时间复杂度一般与算法的空间复杂度成正比 B.解决某问题的算法可能有多种,但肯定采用相同的数据结构 C.算法的可行性是指算法的指令不能有二义性 D.同一个算法,实现语言的级别越高,执行效率就越低 5. 在发生非法操作时,算法能够作出适当处理的特性称为()。 A.正确性B.健壮性C.可读性D.可移植性 第二章线性表 1. 线性表是()。 A.一个有限序列,可以为空B.一个有限序列,不能为空 C.一个无限序列,可以为空D.一个无限序列,不能为空 2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一个元素时平均要移动表中的()个元素。 A.n/2 B.(n+1)/2 C.(n-1)/2 D.n 3.线性表采用链式存储时,其地址()。 A.必须是连续的B.部分地址必须是连续的 C.一定是不连续的D.连续与否均可以 4.用链表表示线性表的优点是()。 A.便于随机存取B.花费的存储空间较顺序存储少 C.便于插入和删除D.数据元素的物理顺序与逻辑顺序相同

数据结构与算法课程学习总结报告

数据结构与算法课程学习总结报告 数据结构与算法是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。通过学习,先报告如下: 一、数据结构与算法知识点 本学期学的《数据结构与算法》这本书共有十一个章节: 第一章的内容主要包括有关数据、数据类型、数据结构、算法、算法实现、C语言使用中相关问题和算法分析等基本概念和相关知识。其中重点式数据、数据类型、数据结构、算法等概念;C语言中则介绍了指针、结构变量、函数、递归、动态存储分配、文件操作、程序测试与调试问题等内容。 第二章主要介绍的是线性逻辑结构的数据在顺序存储方法下的数据结构顺序表(包括顺序串)的概念、数据类型、数据结构、基本运算及其相关应用。其中重点一是顺序表的定义、数据类型、数据结构、基本运算和性能分析等概念和相关知识。二是顺序表的应用、包括查找问题(简单顺序查找、二分查找、分块查找)、排序问题(直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、归并排序)、字符处理问题(模式匹配)等内容。本章重点和难点在查找和排序问题的算法思想上,6种排序方法的性能比较。 第三章主要介绍的是线性逻辑结构的数据在链接存储方法下数据结构链表的相关知识。主要是单链表、循环链表的数据类型结构、数据结构、基本运算及其实现以及链表的相关应用问题,在此基础上介绍了链串的相关知识。在应用方面有多项式的相加问题、归并问题、箱子排序问题和链表在字符处理方面的应用问题等。本章未完全掌握的是循环链表的算法问题和C的描述。 第四章介绍在两种不同的存储结构下设计的堆栈,即顺序栈和链栈的相关知识,了解堆栈的相关应用,掌握应用堆栈来解决实际问题的思想及方法。本章主要内容是顺序栈和链栈的概念、数据类型、数据结构定义和基本运算算法及其性能分析。本章堆栈算法思想较为简单,所以能较好掌握。 第五章主要介绍顺序存储和链接存储方法下的两种队列、顺序(循环)队列和链队列的数据结构、基本运算及其性能分析以及应用。顺序队列(重点是循环队列)和链队列的概念、数据类型描述、数据结构和基本运算算法及其性能分析等。本章同堆栈有点类似,算法思想较为简单,所以能较好掌握;但难点重在循环队列队空、队满的判断条件问题。 第六章“特殊矩阵、广义表及其应用”将学习数组、稀疏矩阵和广义表的基本概念,几种特殊矩阵的存储结构及其基本运算,在此基础上学习特殊矩阵的计算算法与广义表应用等相关问题。本章的重点是相关数据结构的存储结构及其基本运算算法。掌握了特殊矩阵的压缩存储结构,在该存储结构下元素的定位方法,理解了稀疏矩阵的计算和广义表的存储结构。 第七章“二叉树及其应用”的知识结构主要是:非线性结构数据二叉树的定义、性质、逻辑结构、存储结构及其各种基本运算算法,包括二叉树的建立、遍历、线索化等算法。在此基础上,介绍二叉树的一些应用问题,包括哈夫曼编码问题、(平衡)二叉排序树问题和堆排序问题等。 第八章“树和森林及其应用”介绍树和森林的数据结构、基本算法及其性能分析,树和森林与二叉树之间的转换算法等,在此基础上介绍树的应用---B-树,应用B-树来实现数据元素的动态查找。本章基本掌握树和森林的概念和性质、数据结构、树的基本算法及性能

《数据结构与算法》廖明宏课后答案

第一次作业(第2章) 4.List Combine(List &L1,List &L2) { LNode *ap1,*ap2,*p; ap1=L1->next; ap2=L2->next; if(ap1->elementelement) { while(ap1-next!=NULL) ap1=ap1->next; ap1=L2; return L1; } else { while(ap2->next!=NULL) ap2=ap2->next; ap2=L1; return L2; } } 8.XSXXXSSSXXSXXSXXSSSS 15.节点只有一个链域的环形链表只能是一个单向环形链表,但为了能逆时针方向查找,可以在链表的每个节点中增加一个代表链表元素总数的整型num。该环形链表的每个节点可说明为: struct celltype{ Elementtype element; celltype *next; int num; }List; 顺时针方向查找就按照普通单向链表的查找;逆时针方向查找不是直接一步就达到,逆时针查找当前节点的下一个节点可以通过顺时针转一圈来达到,代表元素总数的整型num就决定了p=p->next(p为当前节点)所需循环的次数,最终达到逆时针查找的目的。 顺时针访问表的每个节点的算法为: void TravelList(List la) { List p=la->next; int i=0; while(inum) { i++;

p=p->next; } } 18.void R(List la,elementtype x) { LNode* p=la->next; LNode* q=la->next; int n=1; while(p-next!=NULL && p->data!=x) { p=p->next; n++; } if(p==NULL) { LNode *s; int j=0; while(q && jnext; j++; } s->element=x; s->next=q->next; q->next=s; cout<<"已将x插在表尾。" }else{ cout<<"x在表中的序号为:"<next,ap1=L1,ap2=L2; while(p) { ap1->next=p; ap1=p; num1++; p=p->next; if(p) { ap2->next=p;

数据结构课后习题及解析第二章

第二章习题 1.描述以下三个概念的区别:头指针,头结点,首元素结点。 2.填空: (1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 (2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置相邻。 (3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。 a. 在P结点后插入S结点的语句序列是:。 b. 在P结点前插入S结点的语句序列是:。 c. 在表首插入S结点的语句序列是:。 d. 在表尾插入S结点的语句序列是:。 供选择的语句有: (1)P->next=S; (2)P->next= P->next->next; (3)P->next= S->next; (4)S->next= P->next; (5)S->next= L; (6)S->next= NULL; (7)Q= P; (8)while(P->next!=Q) P=P->next; (9)while(P->next!=NULL) P=P->next; (10)P= Q; (11)P= L; (12)L= S; (13)L= P; 4.设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。 5.写一算法,从顺序表中删除自第i个元素开始的k个元素。 6.已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 7.试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., an)逆置为(an, an-1,..., a1)。 (1)以一维数组作存储结构,设线性表存于a(1:arrsize)的前elenum个分量中。 (2)以单链表作存储结构。 8.假设两个按元素值递增有序排列的线性表A和B,均以单链表作为存储结构,请编写算法,将A表和B表归并成一个按元素值递减有序排列的线性表C,并要求利用原表(即A 表和B表的)结点空间存放表C。

数据结构第二章课后答案解析

2.4已知顺序表L递增有序,试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。 解: int InsList(SeqList *L,int X) { int i=0,k; if(L->last>=MAXSIZE-1) { printf("表已满无法插入!"); return(ERROR); } while(i<=L->last&&L->elem[i]last;k>=I;k--) L->elem[k+1]=L->elem[k]; L->elem[i]=X; L->last++; return(OK); } 2.5写一算法,从顺序表中删除自第i个元素开始的k个元素。 解: int LDel(Seqlist *L,int i,int k) { if(i=1||(i+k>L->last+1)) { printf("输入的i,k值不合法"); return(ERROR); } else if(i+k==L->last+2) { L->last=i-2; return OK; } else { j=i+k-1; while(j<=L->last) { elem[j-k]=elem[j]; j++; } L->last=L->last-k+1; return OK;

} } 2.6已知线性表中的元素(整数)以递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个变量,他们的值为任意的整数)。 解: int Delete(Linklist,int mink,int maxk) { Node *p,*q; p=L; while(p->next!=NULL) p=p->next; if(mink>=maxk||L->next->data>=maxk||mink+1=maxk) { printf("参数不合法!"); return ERROR; } else { while(p->next->data<=mink) p=p->next; q=p->next; while(q->datanext=q->next; free(q); q=p->next; } return OK; } } 2.7试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的储存空间将线性表(a1,a1,…,an)逆置为(an,an-1,…,a1)。 (1)以顺序表作存储结构。 解: int ReversePosition(SpList L) { int k,temp,len; int j=0; k=L->last; len=L->last+1; for(j;j

相关主题