数据结构第一章绪论

合集下载

数据结构第1章绪论

数据结构第1章绪论


n 阶矩 阵相乘的算法
矩阵相乘的基本运算:乘法 加法;
For ( i = 1; i<=n; i++ ) For (j = 1; j<=n; j++ )
{ c[ i ][ j ] = 0 ; For (k = 1; k<= n; k++ ) c[ i ][ j ] += a[ i ][ k ] * b[ k ] [ j ] } O(n3) 称为矩阵相乘算法时间复杂度; O(n3)表示矩阵相乘算法执行时间与n3成正比, 即O(n3)与n3 同一数量级 ; 乘法 加法
◆设计 求解问题的方法
◆ 编程 main ( )
{
int len, wide ,area ; scanf (“%d %d%\n”, &l,&w); area=len*wide ; printf (“area=%d”,area);
}
1.1 本课程研究的问题
2)非数值问题
例 2 已知某级学生情况 , 要求分班按入学成绩排列顺序。 学号 00201 00102 00202 00301 姓名 性别 杨润生 男 石磊 男 李梅 女 马耀先 男 出生日期 82/06/01 83/12/21 83/02/23 82/07/12 籍贯 入学成绩 所在班级 广州 561 00计算机2 汕头 512 00计算机1 阳江 532 00计算机2 广州 509 00计算机3
数据结构基本操作的实现: 基本操作在计算机上的实现(方法)
1.3 数据结构的分类及表示
一 常用的数据结构

某班学生基本情况登记表,记录了每个学生的学号 姓名 专业 1) 集合 政治 面貌 ,表中的记录是按学生的学号顺序排列的。

数据结构 第一章 绪论

数据结构 第一章 绪论

理。
第一章
绪论
学习要点
了解数据结构有关概念的含义,特别是数据 的逻辑结构,数据的存储结构之间的关系;
1
2 熟悉类C语言的书写规范,特别要注意值调用 和引用调用的区别及出错处理方式; 3 了解算法时间复杂度的计算方法;
本章的主要内容:
1.1 1.2 1.3 1.4
什么是数据结构: 基本概念和术语 抽象数据类型的表示与实现 算法与算法分析 补充 类C语言简要说明
2)熟练掌握一门程序设计语言。
3) 熟知应用领域的相关知识。
其后两个条件比较容易实现,而第一个条件则需 要花相当的时间和精力才行。这也是区分一个程序设 计人员水平高低的一个重要标志。因此,我们学习数 据结构的目的,就是为了更好地进行程序设计。
1.1 什么是数据结构
数据结构课程就是要对不同的数据对象(Data object) 进行探索。对每种数据对象,首先考虑要执行的操作,然 后考虑表示这种数据对象的方法,以使这些操作有效地实 现(算法 Algorithm)。 学习数据结构,要掌握两种技术: 1)善于设计种种可供选择的数据表示形式(Data Structure)。 2)对相应的Data Structure设计出完成各种操作的 算法。 2.什么是数据结构?
数据结构是一门研究非数值计算的程序设计问题中计 算机的操作对象以及它们之间的关系和操作等等的学科。
本课程主要讨论以下三种数据结构:
1.1 什么是数据结构
1.1 什么是数据结构
Tt
a
b
c
a1
a2
b1
b2
c1
c2
d
d1
d2
d3
图 1-2
树形结构示意图
1.1 什么是数据结构

《数据结构教程》第一章 绪论

《数据结构教程》第一章 绪论

《数据结构教程》第一章绪论数据结构教程第一章绪论数据结构是计算机科学中的重要概念之一,它是计算机程序设计的基础。

本教程的第一章将介绍数据结构的基本概念和作用。

一、什么是数据结构?在计算机科学中,数据结构用于存储和组织数据,以便在计算机程序中进行高效的操作。

数据结构可以分为两种基本类型:线性数据结构和非线性数据结构。

1.1 线性数据结构线性数据结构是最简单的数据结构之一,它将数据元素按照线性顺序组织,可以使用一对一的关系连接数据元素。

常见的线性数据结构有数组、链表和栈。

1.2 非线性数据结构非线性数据结构是指数据元素之间存在多对多的关系,不是简单的一对一关系。

常见的非线性数据结构有树和图。

二、数据结构的作用数据结构的设计和选择对于程序的效率和性能具有重要影响。

合理选择数据结构可以提高算法的执行速度,降低计算机资源的占用。

2.1 提高数据的存储效率通过选择适当的数据结构可以减少内存的占用,提高数据的存储效率。

例如,链表数据结构可以动态地分配内存空间,减少内存的浪费。

2.2 提高数据的访问效率不同的数据结构在数据的访问效率上有所差异。

例如,对于需要频繁插入和删除操作的场景,链表数据结构比数组数据结构更加高效。

2.3 优化算法的执行速度数据结构和算法是相辅相成的,通过选择合适的数据结构可以优化算法的执行速度。

例如,在查找操作中使用二叉搜索树可以降低时间复杂度。

三、数据结构的分类根据数据结构的存储方式和操作特性,可以将数据结构分为线性数据结构和非线性数据结构。

3.1 线性数据结构线性数据结构是最常用的数据结构之一,它将数据元素按照线性顺序排列,每个元素有一个直接前驱和直接后继。

常见的线性数据结构有数组、链表和栈。

3.1.1 数组数组是一种最简单的数据结构,它将数据元素存储在连续的内存空间中。

数组的访问速度很快,但是插入和删除操作的效率较低。

3.1.2 链表链表是一种动态数据结构,它通过指针将数据元素链接在一起。

第1章 数据结构绪论

第1章  数据结构绪论
数学 代数系统
编译理论 数据表示法 存储装置 硬件(计算机系统设计)
算子关系 数据 数据的操作 类型 数据结构 文件系统 数据存取 数据组织 机器组织 信息检索 软件(计算机程序设计)
4
1.1 引

为了使读者对数据结构有一个感性的认识, 为了使读者对数据结构有一个感性的认识, 下面给出几个数据结构的示例, 下面给出几个数据结构的示例,读者可以 通过这些示例去理解数据结构的概念。 通过这些示例去理解数据结构的概念。 【示例1】 职工基本情况表。 参见教材P2 【示例2】 井字棋对弈问题。 【示例3】 教学计划编排问题。
9
1.3 抽象数据类型
首先我们了解一下在程序设 计语言中出现的各种数据类 型。
10
1.3.1 数据类型
数据类型是一个值的集合和定义在这个值集上 的一组操作的总称。 的一组操作的总称。 在高级程序设计语言中,数据类型可分为两类: 在高级程序设计语言中,数据类型可分为两类: 一类是原子类型,另一类则是结构类型。 一类是原子类型,另一类则是结构类型。 在某种意义上,数据结构可以看成是“ 在某种意义上,数据结构可以看成是“一组具 有相同结构的值” 有相同结构的值”,而数据类型则可被看成是 由一种数据结构和定义在其上的一组操作所组 成的。 成的。
6
1.2 基本概念与术语
1. 逻辑结构
(1) 线性结构。 (2) 集合结构。 (3) 树形结构。 (4) 图状结构。 数据的四种基本逻辑结构如图1.4所示。
7
1.2 基本概念与术语
2. 存储结构 (1) 顺序存储结构是指把逻辑上相邻的结 点存储在物理上相邻的存储单元里,结点 之间的逻辑关系由存储单元位置的邻接关 系来体现。 (2) 链式存储结构是把逻辑上相邻的结点 存储在物理上任意的存储单元里,结点之 间的逻辑关系由附加的指针域来体现。 (3) 索引存储结构是用结点的索引号来确 定结点的存储地址。

《数据结构(C语言)》第1章 绪论

《数据结构(C语言)》第1章 绪论
从逻辑上可以把数据结构分为线性结构和非线性结构, 主要包括:集合、线性、树和图形结构,其中集合、
树和图形结构都属于非线性结构。
Data structures
常用术语和基本概念
❖数据的逻辑结构(Logic Structure)
根据数据元素之间关系的不同特性,通常有4类基本 数据结构:
(1) 集合(Set):该结构中的数据元素除了存在“同 属于一个集合”的关系外,不存在任何其它关系。
Data structures
1 数据结构概述 2 常用术语和基本概念 3 数据类型 4 算法和算法分析 5 本章小结
目录
Data structures
1.1 数据结构 概述
数据结构概述
❖ 数据结构与算法
数据结构(Data Structure)+算法 (Algorithm)=程序(Program)
Data structures
数据类型
❖ 抽象数据类型
❖ 3.本书在用C语言描述时的约定
(1) C语言的数组元素的下标从“0”开始,为此,在 表示数据结构时,数据元素的序号也从0开始。
(2) 数据元素的类型约定为ElemType。具体的类型 可以由用户在使用时定义:
typedef int ElemType /*定义数据类型为int*/
(2) 线性结构(Linear Structure):该结构中的数 据元素存在着一对一的关系。
(3) 树形结构(Tree Structure):该结构中的数据 元素存在着一对多的关系。
(4) 图状结构(Graphic Structure):该结构中的 数据元素存在着多对多的关系。
Data structures
讲授常用的算法,程序员也可以直接拿来或经过少许 的修改就可以使用,并且可以通过算法训练来提高程 序设计水平。

数据结构 第一章 绪论

数据结构 第一章 绪论

2014-4-1
21
... 2000 2002 2004 2006 2008 2010 2012 2014 2016 05 01 03 08 02 07 04 06 ... 6200 6202 6020 4000 4002 4800 4802 4804
... 08 03 ... 05 01 02 ... 06 ... 07 04 ... 4802 4002 6200 0 4804 4000
… … … … … …
计算机科学与技术 应用数学 信息管理与信息系统 英语 …
大学语文 数据结构 管理信息系统 高等数学 …
08 计算机一班 08 数学三班 09 信管一班 09 外语八班 …
1 2 3 4 …
2014-4-1
8
例1-2 人-机对弈
国际象棋、井字棋、五子棋、中国象棋和围棋 …。 把计算机操作的对象对弈过程中可能出现的棋盘状 态称为格局。 格局之间的关系是由不同的棋类对弈规则决定,这 个关系往往是一种层次结构:从一个格局可以派生 出若干个新的格局,而从一个新格局又可以派生出 多个更新的格局,将对弈开始到结束整个对弈过程 可能派生的所有格局表示出来,就象一棵倒挂的 “树”。以这些对弈游戏中的井字棋为例,其“树 根”就是对弈开始之前的棋盘格局,而所有的“叶 子”就是可能出现的结局,对弈过程就是从树根沿 树叉到每个叶子的过程。如图所示:
2014-4-1
11
350
体育馆 N
H
300 300
G
150
北二区大门
信息楼 国际文化大 厦
文科大楼
E
300
200
F
外语楼
北一区大门
1500
北门
900

数据结构第一章--绪论(严蔚敏版)

数据结构第一章--绪论(严蔚敏版)

解 T = (D, R ) D={A,B,a,b,c }
R是D上的关系的集合 是 上的关系的集合
A
B
a R={ P1,P2 } P1 ={<A,a>, <A,b>, <A,c>} P2 ={<B,a>, <B,b>, <B,c>}
b
c
写出一个复数的数据结构 例3 写出一个复数的数据结构 Complex= (C , R) 解 一个复数可以表示为 a+bi 一个复数可以表示为 复数 C={a,b}
也可以表示成一个有序对 <a, b>
∴这里存在一种关系 P ={<a,b>} (只有一个有序对 只有一个有序对) 只有一个有序对
而R是C上的关系的集合 R={ P } 是 上的关系的集合
写出一个复数的数据结构 例3 写出一个复数的数据结构 Complex= (C , R) 解 一个复数的数据结构为 Complex= (C , R) 其中, 其中, C={a,b} R={ P } P ={<a,b>}
a b c
解 其数据结构可描述为 d e T = (D, R ) D是数据元素的集合 D={a,b,c,d,e} 是数据元素的集合
R是D上的关系的集合 R={ P } 是 上的关系的集合
P ={<a,b>,<a,c>,<b,d>,<b,e>}
例2
一小组有a,b,c 三个学生,一个导师A 一小组有a,b,c 三个学生,一个导师A 和一个辅导员B 和一个辅导员B,此小组的数据结构如图:
48
ADT 抽象数据类型名 { 数据对象: 数据对象:〈数据对象的定义〉 数据关系: 数据关系:〈数据关系的定义〉 基本操作: 基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名 其中基本操作的定义格式为: 基本操作名(参数表) 基本操作名 初始条件:〈初始条件描述〉 初始条件: 操作结果:〈操作结果描述〉 操作结果

数据结构(C语言版) 第1章 绪论

数据结构(C语言版) 第1章 绪论
数据结构
理论课教材: 数据结构(C语言版) 严蔚敏 吴伟民 编著
第一章 绪论
1.0 1.1 1.2 1.3 1.4 学习数据结构的主要意义和要求 数据结构讨论的范畴 基本概念 抽象数据类型的表示和实现 算法和算法的度量
学习数据结构的主要意义和要求
意义:

数据结构和算法是计算机学科的两大支柱 数据结构是程序设计的基础 程序=算法+数据结构
存储结构分为: 顺序存储结构——借助元素在存储器中的相对位置来表示 数据元素间的逻辑关系 链式存储结构——借助指示元素存储地址的指针表示数据 元素间的逻辑关系 数据的逻辑结构与存储结构密切相关 逻辑结构
线性表
物理结构
顺序存储结构


链式存储结构
复合存储结构
h
h
元素1 1400
1345 元素2
链式存储
数据结构的形式定义为: 数据结构是一个二元组 Data_Structures = (D, S) 其中: D 是数据元素的有限集, S 是 D上关系的有限集。
数据元素的映象方法: 例用二进制位(bit)的位串表示数据元素
(321)10 = (501)8 = (101000001)2 A = (101)8 = (001000001)2
算法设计的要求
2. 可读性 算法主要是为了人的阅读与交流,其次才是为计算机执行,因此算法 应该易于人的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以 调试。 3.健壮性 当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而
1536
元素3
1346
元素4

存储地址 1345 1346
存储内容 元素1 元素4
指针 1400 ∧

数据结构 第一章 绪论

数据结构 第一章 绪论

三、算法和算法分析
1、算法的特性
有穷性
算法在执行有穷步后结束,且每步可在有穷时间内完成 确定性 算法中指令无二义性,且在任何条件下执行路径唯一
可行性
算法中各操作可通过已实现的基本运算执行有限次完成
1、算法的特性
输入
零或多个 输出 一或多个
2、算法设计的要求
正确性
算法应能满足具体问题的需求 可读性 算法应易于阅读和理解
健壮性
输入数据非法时,算法也能适当作出反应或进行处理 高效性 算法执行时间短,占用存储空间少
3、算法的时间复杂度
算法执行效率主要与所用计算机软、硬件及问题规模有
关。 衡量算法效率时,通常在算法中选择一种不可再分解的 基本操作,该操作的重复执行次数应与算法的执行时间成正
比,一般为问题规模n的函数f(n),此时可记算法的时间量
S(n)=O(f(n)),其中 n 为问题的规模。 分析算法空间复杂度时,一般只考虑执行算法所需辅助 空间,但若输入数据所占空间与算法本身有关,则也应计算
在内。
若算法执行所需空间与输入数据有关,则可求最坏情况 下的空间复杂度。
课程说明
1、教学日历 2、成绩评定 平时(50%)=实验(30%)+作业(15%)+考勤(5%) 期末考试:50%
读者信息: 读者编号 姓名
所借图书登录号 002 001
9001 9002
李红 张小林
2、数据元素
数据的基本单位,程序中常作为一个整体考虑和处理。
举例——图书借阅管理系统 图书信息: 登录号 001 002 书名 理论力学 高等数学 借阅者编号 9002 9001
读者信息: 读者编号 姓名
所借图书登录号 002 001

数据结构(C语言版)_第1章 绪论

数据结构(C语言版)_第1章 绪论

2.算法的复杂性分析
算法运行所需要的计算机资源的量,需要的 时间资源的量称作时间复杂度,需要的空间 (即存储器)资源的量称作空间复杂度。
运行算法所需要的时间T写成输入规模n的函数, 记作T(n)。“规模”一般是指输入量的数目,比 如在排序问题中,问题的规模可以是定义为被排 序的元素数目。
算法的描述方法
算法可以用自然语言描述,但由于自然语言表 达算法容易产生二义性,人们常使用专用的算 法描述工具。
图1-6传统流程图符号
图1-7结构化流程图符号
【例1.5】分别用传统流程图和结构化流程图描 述一个算法。 【问题描述】分别用传统流程图和结构化流程 图描述下列问题:给定两个正整数m和n,求最大 公约数。 【分析】将数学中求最大公约数的辗转相除法 的求解过程进行分解,用标准的流程图基本符 号表示成图1-8(a)和(b)图。
表1-1 学生成绩信息表
学号
20120401 20120402 20120403 20120405
姓名
王伟 张译民 陈慧 李彩霞
性别
男 男 女 女
出生年月
1993/01 1993/08 1992/12 1993/05
数学
123 115 108 102
语文
98 108 114 113
英语
90 85 95 90
A
B逻辑结构图
线性结构
• 数据元素之间存在一对一的关系,称为线性结构。该 结构的特点是除第一个元素和最后一个元素外,其它 元素都有且只有一个直接前趋和直接后继。
• 如图1-2所示的线性结构是一种最常见、也是最简单 的数据结构,学生成绩管理系统的数据结构是线性结 构,另外仓库管理、教材管理等系统中处理的数据也 是线性结构。线性结构的基本操作有插入、删除及查 找等,具有线性结构的数据简称为线性表。

数据结构讲义第一章绪论

数据结构讲义第一章绪论

注:一个抽象数据类型确定了一个模型,但将模型的实 现细节隐藏起来;它定义了一组运算,但将运算 的实现过程隐藏起来。
用抽象数据类型的概念来指导问题的求解过程:
数学模型 非形式算法
抽象数据模型 伪语言程序
数据结构 可执行程序
§ 1.3 抽象数据类型
ADT的定义格式 ADT <ADT名> { 数据对象:<数据对象的定义> 结构关系:<结构关系的定义> 基本操作:<基本操作的定义> }ADT <ADT名>
初始化数据结构;
Destroy( )
销毁数据结构;
Get (i )
查找第 i 个元素;
Insert (i , b ) 在第 i 个位置插入元素 b ;
Delete( i )
删除第 i 个元素;
Traverse( )
遍历整个数据结构
§ 1.3 抽象数据类型
用C语言实现抽象数据类型ADT 用标准C语言表示和实现ADT描述时,主要
§ 1.2 数据结构的基本概念
数 据:描述客观事物的数字、字符以及一切 能够输入到计算机中,并且能够被计 算机程序处理的符号的集合。
数据是一个广义的概念,可以指普通的数据 (可参加算术运算),也可以指符号(源程序、 产品名称等)或数字化了的声音、图形、图像等。
§ 1.2 数据结构的基本概念
数据元素:数据(集合)中的一个个"个体",是组 成数据的"基本单位"。
a2 d4 d1
a1 d1 d2
list
a1
a2
a4 d5 d3
a3 d3 … d4
a3

a30 ∧
§ 1.3 抽象数据类型

数据结构(从概念到算法)第一章 绪论

数据结构(从概念到算法)第一章 绪论
态)。
(2)可读性:算法的变量命名、格式符合行业规范,并在关键处给出注释,
以提升算法的可理解性。
(3)健壮性:算法能对不合理的输入给出相应的提示信息,并做出相应处
理。
(4)高执行效率与低存储量开销:涉及算法的时间复杂度和空间复杂度评
判。
算法设计的一般步骤
1.3.1算法定义与性质
算法设计出来后有多种表述方法,一般有如下几种描述工具:第一种是自然语
良好基础,数据结构与算法设计密不可分。算法是对特定问题求解步骤的一种描述。
换言之,算法给出了求解一个问题的思路和策略。
一个算法应该具有以下 5 个特征。
(1)有穷性,即算法的最基本特征,要求算法必须在有限步(或有限时间)
之后执行完成。
(2)确定性,即每条指令或步骤都无二义性,具有明确的含义。
(3)可行性,即算法中的操作都可以通过已经实现的基本运算执行有限次
成的集合,数据对象是数据的一个子集。实例说明如下。
由 4 个整数组成的数据对象: D1={20,- 30,88,45}
由正整数组成的数据对象: D2={1,2,3,…}
数据结构的基本概念
(5)数据结构。数据结构是相互之间存在一种或多种特定关系的数据元素
的集合。数据元素之间的关系称为结构,主要有 4 类基本结构,如下图所示。
址,数据'C'的指针指向数据'D'的结点地址,具体如图所示。
数据结构的基本概念
上图数据元素存储的地址在整体上具有前后次序,但实际对单链表数据元素
所分配的存储空间是随机的。如下图 所示,数据元素'A'在物理存储地址上可能位
于数据元素'B'和'D'存储地址之后。

数据结构第1章

数据结构第1章

例如,【例1-2】中的文件系统的系统结构图的一 个目录,【例1-3】中的“图”的一个圆圈都被称为一 个数据元素。有时,一个数据元素又可以由若干个数据 项(data item)组成。如表下所示学生成绩表中的一条 记录为一个数据元素,而记录中的学号、姓名、语文等 都分别为一个数据项。数据项是数据的不可分割的最小 单位。数据元素也可以仅有一个数据项。
2020年5月22日星期五
用计算机解决一个具体问题时,一般需要经过 以下几个步骤:
首先分析实际问题并从中抽象出一个适当的数 学模型,然后设计一个解决此数学模型的算法,最 后编制出程序上机调试,直至得到最终的解答,其 过程如图所示。
2020年5月22日星期五
寻求数学模型的实质是分析问题,从中提取操作 的对象,并找出这些操作对象之间的关系,然后使用 数学模型加以描述。
2020年5月22日星期五
数据对象(data object):数据对象是性质相同 的数据元素组成的集合,是数据的一个子集。数据元 素是数据对象的数据成员。
第1章 绪论
课程简介
数据结构是计算机专业的一门专业基础课程,很 多后续课程都要用到本课程所涉及的知识。例如,程 序设计、编译技术和操作系统等课程都要使用一些基 本的数据结构及其相关的算法;本课程讨论的其他一 些数据结构,如广义表、集合以及图等也是很多应用 领域经常涉及的。本课程的目的是介绍一些最常用的 数据结构,阐明数据结构内在的逻辑关系,讨论它们 在计算机中的存储表示,并结合各种数据结构,讨论 其各种操作的实现算法。
2020年5月22日星期五
由此可以看出,用点、点与点之间的线所构成的图 也可以反映实际生产和生活中的某些特定对象之间的特 定关系。诸如此类有铁路交通图、教学编排图等。
综合以上3个例子可见,描述非数值计算问题的数 学模型不再是数学方程,而是诸如表、树、图之类的数 据结构及其运算。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课时安排:上课——60学时上机——12学时教材:《数据结构》严蔚敏清华大学为什么学习数据结构?数据结构不仅是计算机专业的教学计划中的核心课程之一,而且是其他非计算机专业的主要选修课程之一。

数据结构在计算机科学中是一门综合性的专业基础课。

学习数据结构的先决条件:学习数据结构需要c语言(或其他语言基础)与离散数学.数据结构的后续课程:数据结构为编译原理,数据库系统和操作系统学习奠定了必要的基础.第一章绪言数据结构产生背景:计算机已深入到人类社会的各个领域。

计算机的应用不再局限于科学计算,而更多地用于控制、管理及数据处理等非数值计算的处理工作。

与此相应,计算机加工的对象由纯粹的数值发展到字符、表格和图象等各种具有一定结构的数据。

为了编写出一个好的程序,必须分析待处理的对象的特性以及各处理对象之间存在的关系。

计算机解决具体问题的步骤:由实际问题抽象数据模型(如求梁架结构中的应力的数学模型为线性方程组,预报人口增长情况的数学模型为微分方程,非数值情况用数据结构解决) Æ根据模型设计算法Æ根据算法编制程序Æ运行调试并解答问题。

寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。

然而,更多的非数值计算问题无法用数学方程加以描述。

数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作(包括对数据进行查找,插入,删除,合并,排序,统计以及简单计算)等的学科.描述非数值计算问题的数学模型不再是数学方程,而是诸如表、树和图之类的数据结构。

1.2 基本概念和术语数据(data)—对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称.如整数,实数,字符串,图像,声音是数据。

数据元素(data element)—数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。

一个数据元素可由若干个数据项组成。

数据项(data item)—数据的不可分割的最小单位.一个数据元素可由若干个数据项组成。

如一本书的书目信息为一个数据元素,书目信息中的每一项(如书名,作者名)为一个数据项。

数据对象是性质相同的数据元素的集合,是数据的一个子集。

如整数数据对象是集合N ={ 0, ±1, ±2, …},字母字符数据对象是集合C={‘A’,’B’,’C’,……,’Z’}。

数据结构(data structure)—是相互之间存在一种或多种特定关系的数据元素的集合。

数据元素相互之间的关系称为结构。

数据结构概念的解释:假设用三个4 位的十进制数表示一个含12 位数的十进制数。

3214,6587,9345 ─a1(3214),a2(6587),a3(9345)则在数据元素a1、a2 和a3 之间存在着“次序”关系<a1,a2>、<a2,a3>3214,6587,9345 a1 a2 a36587,3214,9345a2 a1 a3≠例:在一维数组{a1, a2, a3, a4, a5, a6} 的数据元素之间存在如下的次序关系:{<a i , a i+1>| i=1, 2, 3, 4, 5}可见,不同的“关系”构成不同的“结构”, 或者说,数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

例:数据结构的形式定义为:数据结构是一个二元组Data_Structure=(D, S)其中:D是数据元素的有限集,S是D 上关系的有限集例4 复数可取如下定义:复数是一种数据结构Complex=(C, R)其中:C是含两个实数的集合{c1,c2};R={P},而P是定义在集合C上的一种关系{< c1,c2>},c1是复数的实部,c2是复数的虚部例5 为课题小组设计一个数据结构。

假设每个小组由1位教师、1-3名研究生及1-6名本科生组成,小组成员之间的关系是:教师指导研究生,而由每位研究生指导一至两名本科生。

可如下定义数据结构:Group=(P, R)其中:P={T,G1,…,Gn,S11…Snm} 1≤n≤3,1≤m≤2R={R1,R2}R 1={<T,Gi>|1≤i≤n,1≤n≤3}R 2={<Gi,Sij>|1≤i≤n,1≤j≤m,1≤n≤3,1≤m≤2}位:二进制数的一位。

元素/结点:由若干位组合起来形成的一个位串,即数据元素在计算机中的映像。

数据域:当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串称为数据域。

数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像。

得到两种不同的存储结构:顺序存储结构和链式存储结构。

顺序映像的特点:是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。

非顺序映像的特点:是借助指示元素存储地址的指针来表示数据元素之间的逻辑关系。

Z1=3.0-2.3iZ2= -0.7+4.8i顺序存储复数存储结构示意图Z1=3.0-2.3i Z2= -0.7+4.8i复数存储结构示意图0415链式存储数据的逻辑结构与存储结构密切相关算法设计取决于逻辑结构算法实现依赖于存储结构在不同的编程环境中,存储结构可有不同的描述方法。

当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。

数据类型:是一个值的集合和定义在这个集上的一组操作的总称。

数据类型分为两类:一类是非结构的原子类型。

原子类型的值是不可分解的。

如C语言中的基本类型(整型、实型、字符型和枚举),指针类型和空类型。

另一种是结构类型。

结构类型的值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是结构的,也可以是非结构的。

如数组是由若干分量组成,每个分量可以是整数,也可以是数组。

例:C语言中,提供int(整型变量,其值集为某个区间上的整数,定义在其上的操作为加、减、乘、除和取模等算术运算), float, double(扩展精度的浮点类型), char,枚举,指针,空(void)类型等基本数据类型。

数组、结构体等构造数据类型。

用户也可用typedef自己定义数据类型typedef struct{ int num;char name[20];float score;}STUDENT;STUDENT stu1,stu2, *p;数据结构可以看成是一组具有相同结构的值。

结构类型可以看成是由一种数据结构和定义在其上的一组操作组成。

数据类型和数据结构的概念密切相关.在程序设计语言中,每一个数据都属于某种数据类型.类型规定数据的取值范围,存储方式以及允许进行的运算.可以认为,数据类型是在程序设计中已实现的数据结构.在程序设计过程中,当需要引入某种新的数据结构时,总是借助编程语言所提供的数据类型来描述数据的存储结构.数据结构的发展历史:数据结构的发展起自高级语言的问世:Basic、Fortran中的数组Cobol、PL/1中的记录Snobol中的串Lisp中的表1968年美计算机协会ACM建议数据结构单独为一门课程。

1968年美D.E.Knuth的《计算机程序设计的技巧》第一卷《基本算法》、第三卷《查找与排序》为数据结构奠定了理论基础。

60~70年代结构化程序设计成为程序设计方法学的主流,N.Wirth的《算法+数据结构=程序》。

抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作。

抽象数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要数学特性不变,都不影响其外部的使用。

一个含抽象数据类型的软件模块包含定义、表示和实现3个部分。

分为3种类型:原子类型,固定聚合类型和可变聚合类型(后两种类型统称为结构类型)。

抽象数据类型可用(D,S,P)三元组表示,其中,D是数据对象,S是D上的关系集,P是对D 的基本操作集。

1.4 算法和算法分析算法(algorithm)—对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。

算法着重于思想的描述,可能会省略很多细节,因此,算法需要进行适当修改才能变成程序在机器上实现.算法特性—(1)有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成。

(2)确定性:算法的每一条指令必须有确切的含义,理解时不会产生二义性。

(3)可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。

(4)输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。

(5)输出:一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。

算法设计步骤•描述问题•建立模型•设计算法•验证算法的正确性•算法的实现•算法的分析算法设计方法-枚举法:从问题的所有可能答案中找出满足条件的解。

例:买鸡问题:公鸡每只5元,母鸡每只3元,小鸡3只一元,100元买100只鸡,有多少种买法?算法实现如下:main(){ int x,y,z;for(x=1;x<=20;x++)for(y=1;y<=33;y++){ z=100-x-y; /*百鸡*/if(5*x+3*y+z/3= =100)printf(“cock=%3d, hen=%3d;Chicken=%3d\n”, x,y,z);}算法设计方法-归纳法:找出问题的规律。

①递推:逐次推求中间结果和最后结果。

例:计算Fibonacci数列:数列第1项为1,第2项为1,从第三项开始,每一项等于前两项之和。

f=(1,1,2,3,5,8,13,21,34,……)实现途径:可以利用数组,也可以不用数组。

②递归:自己调用自己。

例:计算阶乘F(n)=F(n-1)*n, F(1)=1。

算法实现如下:main(){ int fn();int f, n;scanf(“%d”,&n);f=fn(n);printf(“the result is %d”,f);}算法设计方法-回溯法:通过“试”找到问题的解。

如在一些游戏中,找出一个解决问题的途径,然后选出一条“试走”,若此路不通,退回换路线重走。

选择算法描述语言的准则(1)该语言应该具有描述数据结构和算法的基本功能;(2)该语言应该尽可能地简捷,以便于掌握、理解;(3)使用该语言描述的算法应该能够比较容易地转换成任何一种程序设计语言。

“类C”描述语言是通过对C语言进行精心筛选保留的一个核心子集,并为了便于描述,又做了若干扩展修改,从而,增强了语言的描述功能。

算法设计的要求—衡量算法优劣的标准•正确性:算法应当满足具体问题的需求。

•可读性:算法主要是为了人的阅读和交流,其次才是机器执行。

•健壮性:当输入的数据非法时,算法应当恰当地做出反映或进行相应处理,而不是产生莫名奇妙的输出结果。

相关文档
最新文档