数据结构chap001
数据结构(C语言)第1章 绪论
华罗庚:“学数学不做习题等于入宝山而空返”
作实验
计算机学科是一门科学性与工程性并重的学科, 表现为理论和实践紧密结合的特征。
关于教材
主教材
严蔚敏.数据结构.清华大学出版社.2007
辅导及实验教材
王红梅.数据结构学习辅导与实验指导.清华大学出版社
参考教材
1.王红梅.数据结构(C++版).清华大学出版社2. 王 晓东.数据结构与算法设计.电子工业出版社.2002 3. 曹宏庆译.如何求解问题.中国水利水电出版社.2003
002,… 004,…
001,003,…
003,… 004,…
002,…
001,003,…
┆
┆
┆
┆
┆
┆
由这四张表构成的文件便是书目自动检索的数学模型。计 算机的主要操作便是按照某个特定要求(如给定书名)对书目文 件进行查询。 诸如此类的还有查号系统自动化、仓库帐目管理等。在这 类文档管理的数学模型中,计算机处理的对象之间通常存在着 的是一种最简单的线性关系,这类数学模型称为线性的数据结 构。
总结: (1)一般来说,能独立、完整地描述客观世界的一 切实体都是数据元素。例如,一场球赛、一场报告 会等。 (2)数据元素是讨论数据结构时涉及的最小数据单 位,其中的数据项一般不予考虑。 (3)数据、数据元素、数据项之间是包含关系;数 据是由数据元素组成,数据元素是由数据项组成。
1.3 数据结构的基本概念(续)
课程名称
高等数学 计算机导论 离散数学 程序设计 数据结构 计算机原理 数据库原理
先修课
无 无 C1 C 1, C 2 C 3, C 4 C 2, C 4 C 4, C 5, C 6
C3
C1
数据结构教学课件-chap001.ppt
线性表
A.线性结构 栈
队
数
1.数据的逻辑结构
据 结
树形结构 B.非线性结构
构
的
图形结构
三
个 主
2、数据的存储结构 A 顺序存储
要 问
B 链式存储
题
3、数据的运算:检索、排序、插入、删除、修改等。
学习数据结构的意义
数据结构是计算机专业的核心课程之一, 在众多的计算机系统软件和应用软件中 都要用到各种数据结构。因此,仅掌握 几种计算机语言是难以解决众多复杂的 问题。要想有效地使用计算机,还必须 学习数据结构的有关知识。
数据关系: R1={<e1,e2> | e1是复数的实数部分 | e2 是复数的虚数部分 }
基本操作:
AssignComplex( &Z, v1, v2 ) 操作结果:构造复数 Z,其实部和虚部
数据结构的形式定义为: 数据结构是一个二元组 Data_Structures = (D, S)
其中:D 是数据元素的有限集,
S 是 D上关系的有限集。
数据的存储结构
—— 逻辑结构在存储器中的映象
“数据元素”的映象 ? “关系”的映象 ?
数据元素的映象方法:
用二进制位(bit)的位串表示数据元素 (321)10 = (501)8 = (101000001)2 A = (101)8 = (001000001)2
数据元素可以是数据项的集合 例如:描述一个运动员的数据元素可以是
姓
名
俱
乐
部
名
称
出
生
日
期
年月日
参
加
日
期
职
务
业
数据结构(C语言版)
比较
Prim算法适用于稠密图, Kruskal算法适用于稀疏图;
两者时间复杂度相近,但 Kruskal算法需额外处理并查
集数据结构。
最短路径算法设计思想及实现方法比较
1 2
Dijkstra算法
从源点出发,每次找到距离源点最近的顶点并更 新距离值,直至所有顶点距离确定。适用于不含 负权边的图。
Floyd算法
特殊二叉树
满二叉树、完全二叉树等。
二叉树的遍历与线索化
二叉树的遍历
前序遍历、中序遍历、后序遍历和层 次遍历是二叉树的四种基本遍历方法 。
线索化二叉树
为了方便查找二叉树节点的前驱和后 继,可以对二叉树进行线索化处理, 即在节点的空指针域中存放指向前驱 或后继的指针。
树和森林的遍历与转换
树的遍历
01
串的顺序存储结构
01
02
03
串的顺序存储结构是用 一组地址连续的存储单 元来存储串中的字符序
列的。
按照预定义的大小,为 每个定义的串变量分配 一个固定长度的存储区 ,一般是用定长数组来
定义。
串值的存储:将实际串 长度值保存在数组的0下 标位置,串的字符序列 依次存放在从1开始的数
组元素中。
串的链式存储结构
03
比较
DFS空间复杂度较低,适用于递 归实现;BFS可找到最短路径, 适用于非递归实现。
最小生成树算法设计思想及实现方法比较
Prim算法
从某一顶点开始,每次选择当 前生成树与外界最近的边加入 生成树中,直至所有顶点加入
。
Kruskal算法
按边权值从小到大排序,依次 选择边加入生成树中,保证不
形成环路。
数据结构(C语言版)
Chap1-数据结构PPT课件
•程序测试和维护:发现和排除在前几个阶段中产生的错 误,经测试通过的程序便可投入运行,在运行过 程中还可能发现隐含的错误和问题,因此还必须
2020/10/13
3
问题分析示例
为了设计一个交通信号 灯的管理系统,首先需要 分析一下所有车辆的行驶 路线的冲突问题。这个问 题可以归结为对车辆的可 能行驶方向作某种分组, 对分组的要求是使任一个 组中各个方向行驶的车辆 可以同时安全行驶而不发 生碰撞。
2020/10/13
9
1.2 数据结构
数据结构主要关心的是下面三个方面 : 1。结构中各元素之间的逻辑关系
线性结构:如图书馆的书目索引 树形结构: 图形结构: 2。结构中各元素的存储方式 3。结构具有的行为特征
2020/10/13
10
树形结构
例2: 问题:计算机和人对弈 模型:树形结构
2020/10/13
1.1.2程序设计
一、算法设计 1。穷举法 2。贪心法
2020/10/13
6
二、程序设计
首先,为问题中所有有关数据设计适当的表示形式,不仅 包括需要表示的结点和连接,可能还有为计算过程的实现 而用的辅助性数据结构。
然后选择一种适当的程序设计语言实现这些数据结构, 并在设计好的数据结构上精确地描述上面提出的算法, 完成一个程序,使之能在计算机上运行。
•数据元素(Data Element):数据的基本单位,在计算机程序 中通常作为一个整体进行考虑和处理。
一个数据元素可以由若干个数据项(Data Item)组成。
•数据对象(Data Object):是性质相同的数据元素的集合。
•数据结构(Data Structure):是相互之间存在一种或多种特
数据结构说课ppt课件
基本概念与术语
据结构。
数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。
依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种:
1.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。
单链表
链表操作算法:初始化、插入、输出、删除、遍历
8. 在一个单链表中删除q所指结点时,应执行如下操作:
q=p->next;
p->next=( p->next->next );
free(q);//这种题目靠一根指针是没有办法完成的,必须要借助第二根指针。
9. 在一个单链表中p所指结点之后插入一个s所指结点时,应执行:
(2) 若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元
问答题
素,这时,应采用哪种存储表示?为什么?
应采用顺序存储表示。因为顺序存储表示的存取速度快,但修改效率低。若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时采用顺序存储表示较好。
03
栈和队列
数据结构说课ppt课件
演讲人
数据结构概述
01
线性表
02
栈和队列
03
目录
01
数据结构概述
基本概念与术语
2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。
(补充:一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。)
在右侧编辑区输入内容
顺序表的存储效率高,存取速度快。此,不易扩充。同时,由于在插入或删除时,为保持原有次序,平均需要移动一半(或近一半)元素,修改效率不高。
数据结构第01章概论.ppt
(第2版)
李云清 杨庆红 揭安全
人民邮电出版社
1
第一章 概述
什么是数据结构 数据类型和抽象数据类型
算法和算法分析
退出
第一章 概述
瑞士著名的计算机科学家Nicklaus Wirth在1976 年出版了一本书,书名为《算法+数据结构 = 程序设 计》,它正说明了数据结构在程序设计中的作用。程序 设计的实质即为计算机处理问题编制一组"指令",首先 需要解决两个问题:即算法和数据结构。算法即处理问 题的策略,而数据结构即为问题的数学模型。
退出
1.1.4数据的运算集合
对于一批数据,数据的运算是定义在数据的逻 辑结构之上的,而运算的具体实现就依赖于数据的 存储结构。
数据的运算集合要视情况而定,一般而言,数据的 运算包括插入、删除、检索、输出、排序等。
插入:在一个结构中增加一个新的结点。
删除:在一个结构删除一个结点。
检索:在一个结构中查找满足条件的结点。
98
I 79
F
(a)城市距离图
A
34
12
B
H9
8
C
G
31
21
E 10
D
I 79
F
(b)联通各城市最小生成树
退出
以上所举例子中的数学模型正是数据结构要讨论 的问题。因此,简单地说,数据结构是一门讨论"描述 现实世界实体的数学模型(非数值计算)及其上的操作 在计算机中如何表示和实现"的学科。
退出
综上所述
对于一个数据结构B=(K,R),必须建立从结点 集合到计算机某个存储区域M的一个映象,这个映象 要直接或间接地表达结点之间的关系R。数据在计算 机中的存储方式称为数据的存储结构。
数据结构(第1章)讲义
树
01
02
03
树的定义
树是一种递归定义的数据 结构,其中每个节点可以 有多个子节点,但只有一 个父节点。
树的性质
树具有层次性、有序性和 无环性等性质。
树的表示方法
树可以使用多种方式表示, 如嵌套结构、邻接矩阵等。
森林
森林的定义
森林是由若干棵树组成的集合, 其中每棵树都是一个独立的数据
结构。
森林的性质
社交网络
社交网络中需要处理大量的用户关系和信息,数 据结构在其中发挥着重要的作用。例如,使用图 数据结构可以表示用户之间的关系,使用哈希表 可以快速查找用户信息。
THANKS FOR WATCHING
感谢您的观看
05 排序与查找
排序算法
• 冒泡排序:通过重复地遍历待排序的数列,比较相邻的两个元素,若它们的顺 序错误则交换它们,直到没有需要交换的元素为止。
• 选择排序:在未排序的序列中找到最小(或最大)的元素,存放到排序序列的 起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后 放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值 大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同 样从中间元素开始比较。 • 哈希查找:通过哈希函数将关键字转化为数组下标,然后在对应的数组下标位 置上进行查找。 • 二叉查找树查找:在二叉查找树中进行查找,从根节点开始,如果当前节点的 关键字等于目标值,则查找成功;如果当前节点的关键字大于目标值,则在左 子树中继续查找;如果当前节点的关键字小于目标值,则在右子树中继续查找 。
• 插入排序:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、 个数加一的有序数据。
数据结构 课件 第一章绪论
1.1 数据结构(续) 数据结构(
很多问题求解最后都转化为求解数学方程或数学方程组。 很多问题求解最后都转化为求解数学方程或数学方程组。 在房屋设计或桥梁设计中的结构应力分析 结构应力分析计算可化解为 在房屋设计或桥梁设计中的结构应力分析计算可化解为 线性代数方程组求解的问题 的问题, 线性代数方程组求解的问题, 天天看到的天气预报 它的数学模型是一个环流模式方 天气预报, 天天看到的天气预报,它的数学模型是一个环流模式方 程。 预报人口增长情况的数学模型为微分方程。 情况的数学模型为微分方程 预报人口增长情况的数学模型为微分方程。 当计算机进入非数值计算领域 非数值计算领域, 当计算机进入非数值计算领域,特别是用在管理上的时 候,计算机的操作对象之间的关系就无法用数学方程加以 描述了。 描述了。
按书名
高等数学 理论力学 线性代数 ……
S01 L01 S01 S02 ……
索引表
分类号: 001,003…… 001,003…… 出版单位: 樊映川 002,…….. 002,…….. 出版时间: 华罗庚 004, 004,…… 栾汝书 价格:
…….. ……..
……. …….
按作者名
001,… 001,… 002,…. 002,… 004,… 004,…. ……. …….
2010-112010-11-18
7
例2 - 1
人机对奕问题
树形的数据结 构
……..
……..
2010-112010-11-18
…...
…...
…...
…...
8
例2 - 2
学校问题
树形的数据结 构
刘志刚
部门
…….. ..
数据结构(C语言版CHAP1
C
G H
D
I J
1.2 数据结构的有关概念
二元组表示 二元组表示是用一个二元组(D,S)表示数据结构,
其中 D 是数据元素集合,S 是 D 上元素之间关系的集合。
学生基本情况表的二元组表示(D,S)
D = { 001,002,003,004,005,006,007,008} S = { R } R= {<001,002>,<002,003>,<003,004>,<004,005>,<005,006>, <006,007>,<007,008> }
数 据 结 构
安徽中医学院 计算机科学与技术教研室
数据结构
数据结构是计算机专业重要的专业基础课,它的前期 课程主要有程序设计语言,学好本门课程,可以加深 对程序设计的理解,有助于进一步提高程序设计能力, 并为计算机专业后续课程,如数据库、操作系统、编 译原理,软件工程等课程奠定良好的基础。 教材: – 数据结构 ( C语言版)
1.1 《数据结构》课程研究的内容
分析:
◆ 问题涉及的对象:课程;
◆ 课程之间的关系:同一个学生选修的不能按排在同一时间内考试; 课程及课程之间的关系可用如下所示的图表示: 课程关系图
E
C D A F B
顶点:表示课程; 边:同一学生选修的课程用边连接----有边连接的课程不能按排在 同一时间考试;
A B E F C G H D I J
家族树的图示表示 这种分支结构关系被称为树结构。本例中树称为家族树,它很象 一棵倒置的树,A 是树的根。
1.1 《数据结构》课程研究的内容
数值问题与非数值问题 有的同学可能想:我们在学习程序设计时,例如学习C语言时,学 习过各种数据类型数据如何表达,如何存储,如何处理,如整型变量, 可用标识符表达,在内存中它们通常是占用16个二进制位,可对它们作 加减乘除操作,但是C语言中学习过的关于数据的知识,只能求解一些 简单的计算问题和应用问题,如果你要想设计求解比较复杂的问题的程 序,比如 比word简单的多的文本编辑程序,你还需要进一步的学习。 从应用问题涉及的对象来分可分为数值问题和非数值问题。数值 问题就是我们平时所说的计算问题,如已知圆的半径,要求圆的面积 。非数值问题就是问题中涉及的对象不能用数来表达的那些问题。
《数据结构》课件第一章
程序步确定方法
关于复杂度数量级的表示方法
O(n) O(n) O(n)
C + O(n) C * O(n) O(n) * O(n)
顺序语句 一重循环 多重循环 条件判断
C
n m*n、m*n*l、 m*n*l*t …… Max( u, v) (u和v也可能是常数)
➢对于一个多项式的时间复杂度,只记它最高的幂次。
基本概念和术语(二)
➢ 数据结构:
✓ 结构是指数据间的关系。 ✓ 数据结构是指是相互之间存在某种特定关系的
数据元素的集合。(模型) ✓ 数据结构包括三个方面的内容 ▪ 数据的逻辑结构 ▪ 数据的存储结构 ▪ 数据的运算
一个算法的设计取决于选定的逻辑结构, 算法的实现依赖于采用的存储结构
图书馆查询系统 人机对羿
➢ 算法最坏时间复杂度:算法在任何输入 实例上运行时间的上界。
算法的时间复杂度不仅仅依赖于问题的 规模,还取决于输入实例的初始状态
e.g 折半查找法 最好情况:1(x = n/2) 最坏情况:log2 n 一般来说,在普通应用场合中使用折半查找法 时,以最坏情况时的复杂度作为该算法的复 杂度
算法的空间复杂度分析
算法及算法复杂度分析
什么是数据结构
计算机加工处理的对象由纯粹的数值发展 到字符、图表、图象等各种具有一定结构 的数据。
用计算机解决一个具体问题的时候一般有 几个步骤:
❖ 从具体问题抽象出一个数学模型 ❖ 设计解决这个模型的算法(找到处理的对象
的特性和对象之间的关系) ❖ 编程、测试、得到最终解
良好的抽象思维能力
能够针对算法流程图逐一阐述出算法的 完整实现流程
关于流程图的介绍
每个流程图都有一个开始标记 每个流程图至少有一个结束标记 程序模块的确定——顺序语句 条件分支的画法 如何用“条件分支”来实现“循环”的
数据结构课件PPT
二分查找
二分查找法
将有序数据集分成两个部分,每次取中间位置的值与目标值进行比较,根据比 较结果缩小查找范围,直到找到目标值或确定目标值不存在。
优缺点
查找速度快,但要求数据集必须是有序的。
哈希查找
哈希表
利用哈希函数将数据元素映射到内存中的地址,实现数据的 快速查找。
优缺点
查找速度快,但需要解决哈希冲突问题,并可能存在哈希表 过大或过小的问题。
。
数据结构的基本概念
数据结构的基本概念包括:数据、数据 元素、数据类型、数据结构等。
数据结构是指数据的组织形式,即数据 元素之间的相互关系。
数据类型是指一组具有相同特征和操作 的数据对象(如整数、实数、字符串等 )。
数据是信息的载体,是描述客观事物的 符号记录。
数据元素是数据的基本单位,一个数据 元素可以由若干个数据项组成。
稳定排序
归并排序是一种稳定的排序算法,即相等的元素在排序后 保持其原有的顺序。
非递归算法
归并排序是一种非递归算法,即通过迭代方式实现算法过 程。
需要额外的空间
归并排序需要额外的空间来存储中间结果和临时变量。
查找算法
06
线性查找
顺序查找
逐一比对数据元素,直到找到目 标值或遍历完整个数据集。
优缺点
简单易懂,但效率较低,适用于 数据量较小的情况。
拓扑排序的应用
拓扑排序是一种对有向无环图进行排序的算法, 它按照拓扑关系将图的节点排列成一个线性序列 。
有向无环图是一种没有环路的有向图,拓扑排序 可以有效地解决有向无环图的排序问题。
拓扑排序的应用非常广泛,包括确定任务的执行 顺序、确定事件的发生顺序等。
拓扑排序的基本思路是从有向无环图的任一节点 开始,删除该节点,并记录下该节点的所有后继 节点的编号,然后按编号从小到大的顺序重复以 上步骤。
Chap1-算法与数据结构—C语言描述(第2版)张乃孝编课件
}ADT 抽象数据类型名
复数抽象数据类型示例
复数抽象数据类型 ADT Complex {
数据对象:D = {c1, c2 | c1, c2 R(R为实数集)} 数据关系:S = {<c1, c2> ( c1为实部,c2为虚部)} 基本操作:
数据对象(Data Object):相同特性数据元素 的集合,是数据的一个子集合。
基本概念和术语
• 数据结构:相互之间存在一种或多种特定关
系的数据元素的集合。
根据数据元素间关系的基本特性,有四种基本数据结构 (集合)——数据元素间除“同属于一个集合”外,无其它关系 线性结构——一个对一个,如线性表、栈、队列 树形结构——一个对多个,如树 图状结构——多个对多个,如图
长利 4
3 太华
2 1
桦南
发生疫情的五个村子
v
5
1
v 53
3
7
2
24
1
v 42
v
1v
4
3
村子联系网络
穷举法 贪心算法
0 1 2 7 5 1 0 4 4 3 2 4 0 1 2 7 4 1 0 3 5 3 2 3 0
耗时矩阵
数据结构
是一门研究非数值计算的程序设计问题中,计 算机操作的对象以及它们之间的关系和操作的 学科
void Assign(*A, c1, c2) void Add(*A, B) void Minus(*A, B) void Multiply(*A, B) void Divide(*A, B) ... }ADT Complex
复数抽象数据类型的C语言实现
2024版《数据结构图》ppt课件
良好的数据结构可以带来更高的运 行或存储效率,是算法设计的基础, 对程序设计的成败起到关键作用。
常见数据结构类型介绍
线性数据结构
如数组、链表、栈、队 列等,数据元素之间存
在一对一的关系。
树形数据结构
如二叉树、多叉树、森 林等,数据元素之间存
在一对多的关系。
图形数据结构
由顶点和边组成,数据 元素之间存在多对多的
队列定义、特点及应用场景
队列的特点 只能在队尾进行插入操作,队头进行删除操作。
队列是一种双端开口的线性结构。
队列定义、特点及应用场景
应用场景 操作系统的任务调度。 缓冲区的实现,如打印机缓冲区。
队列定义、特点及应用场景
广度优先搜索(BFS)。
消息队列和事件驱动模型。
串定义、基本操作及实现方法
最短路径问题 求解图中两个顶点之间的最短路径,即路径上边 的权值之和最小。
3
算法介绍 Prim算法、Kruskal算法、Dijkstra算法、Floyd 算法等。
拓扑排序和关键路径问题探讨
拓扑排序
对有向无环图(DAG)进行排序, 使得对每一条有向边(u,v),均有
u在v之前。
关键路径问题
求解有向无环图中从源点到汇点 的最长路径,即关键路径,它决
遍历二叉树和线索二叉树
遍历二叉树
先序遍历、中序遍历和后序遍历。遍历算 法可以采用递归或非递归方式实现。
VS
线索二叉树
利用二叉链表中的空指针来存放其前驱结 点和后继结点的信息,使得在遍历二叉树 时可以利用这些线索得到前驱和后继结点, 从而方便地遍历二叉树。
树、森林与二叉树转换技巧
树转换为二叉树
加线、去线、层次调整。将树中的每个结点的所有孩子结点用线连接起来,再去掉与原结点相连的线,最后 将整棵树的层次进行调整,使得每个结点的左子树为其第一个孩子,右子树为其兄弟结点。
数据结构 chap1 数据与数据结构共24页
printf(“Array C=A*B:\n");
for (i=0; i<2; i++)
第 一
{ for (j=0; j<2; j++)
章
printf("%6d", C[i][j]);
printf("\n");
绪
}
论}
Array C=A*B: 14 32 32 77
i=1; k=0;
数 while (i<= n-1)
c[i][j]=c[i][j]+a[i][k]*b[k][j];
}
第 一 章
T(n)=O(n3)
绪 论
例7.5 求两个矩阵A和B的乘积C
数
B
据 结
A
C
14
构
123
× 25 =
24 5 6
36
14 32 32 77
C[0][0]=A[0][0]*B[0][0]+A[0][1]*B[1][0]+A[0][2]*B[2][0]
课时安排:
数据结构——48学时 上机——12学时
上机地点:计算机系网络实验室(2#实验楼427)
参考书:
数据结构--C语言描述 耿国华编 西安电子科技大学出版社 数据结构C语言版 严蔚敏 吴伟民 清华大学出版社 数据结构题集 严蔚敏 清华大学出版社 C语言程序设计 王曙燕 科学出版社
数
据 结
第一章 绪 言
一
存储结构分类
章
顺序存储结构: 借助元素在存储器中的相对位置来表示数据元素间的
绪
逻辑关系 链式存储结构: 借助指示元素存储地址的指针表示数据元素间的逻辑
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 数据结构讨论的范畴1.2 基本概念
1.3 算法和算法的量度
1.1数据结构讨论的范畴
Niklaus Wirth:
Algorithm+ Data Structures = Programs
程序设计:算法: 数据结构: 为计算机处理问题编制
一组指令集处理问题的策略
问题的数学模型
例如: 数值计算的程序设计问题
结构静力分析计算
─━ 线性代数方程组全球天气预报
─━ 环流模式方程
(球面坐标系)
非数值计算的程序设计问题例一: 求一组(n个)整数中的最大值
算法: ?模型:?基本操作是“比较两个数的大小”取决于整数值的范围
例二:计算机对弈
算法:?模型:?对弈的规则和策略棋盘及棋盘的格局
例三:足协的数据库管理
算法:?模型:?需要管理的项目?
如何管理?用户界面?各种表格
概括地说:
数据结构是一门讨论“描述现实世界实体的数学模型(非数值计算)及其上的操作在计算机中如何表示和实现”的学科。
1.2基本概念
一、数据与数据结构
二、数据类型
三、抽象数据类型
一、数据与数据结构
数据:
所有能被输入到计算机中,且能被计算机处理的符号的集合。
是计算机操作的对象的总称。
是计算机处理的信息的某种特定的符号表示形式。
数据元素:
是数据(集合)中的一个“个体”
是数据结构中讨论的基本单位
假设用三个4 位的十进制数表示一个含12 位数的十进制数。
3214,6587,9345─a1(3214),a2(6587),a3(9345)则在数据元素a1、a2 和a3之间存在着“次序”关系<a1,a2>、<a2,a3>
3214,6587,9345 a1 a2 a3
6587,3214,9345
a2 a1 a3≠
例如:
再例,在一维数组{a1, a2, a3, a4, a5, a6} 的数据元素之间存在如下的次序关系:
{<a i, a i+1>| i=1, 2, 3, 4, 5}
可见,不同的“关系”构成不同的“结构”
或者说,数据结构是相互之间存在着某种逻辑关系的数据元素的集合。
数据结构的形式定义为:
数据结构是一个二元组
Data_Structures = (D, S)其中:D 是数据元素的有限集,
S 是D上关系的有限集。
数据的存储结构
——逻辑结构在存储器中的映象“数据元素”的映象?
“关系”的映象?
数据元素的映象方法:
用二进制位(bit)的位串表示数据元素(321)10= (501)8= (101000001)2
A = (101)8= (001000001)2
在不同的编程环境中,
存储结构可有不同的描述方法。
当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之。
二、数据类型
在用高级程序语言编写的程序中,必须对程序中出现的每个变量、
常量或表达式,明确说明它们所
属的数据类型。
三、抽象数据类型
(A bstract D ata T ype简称ADT)
是指一个数学模型以及
定义在此数学模型上的一
组操作。
例如,抽象数据类型复数的定义:ADT Complex {
数据对象:
D={e1,e2|e1,e2∈RealSet }
数据关系:
R1={<e1,e2> | e1是复数的实数部分
| e2是复数的虚数部分}
基本操作:
AssignComplex( &Z, v1, v2 )
操作结果:构造复数Z,其实部和虚部
分别被赋以参数v1 和v2 的值。
DestroyComplex( &Z)
操作结果:复数Z被销毁。
GetReal( Z, &realPart )
初始条件:复数已存在。
操作结果:用realPart返回复数Z的实部值。
GetImag( Z, &ImagPart )
初始条件:复数已存在。
操作结果:用ImagPart返回复数Z的虚部值。
Add( z1,z2, &sum )
初始条件:z1, z2是复数。
操作结果:用sum返回两个复数z1, z2 的
和值。
} ADT Complex
假设:z1和z2是上述定义的复数则Add(z1, z2, z3) 操作的结果即为用户企求的结果
z3 = z1 + z2
ADT 有两个重要特征:
数据抽象用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的
功能以及它和外部用户的接口(即外界
使用它的方法)。
数据封装将实体的外部特性和其内部
实现细节分离,并且对外部用户隐藏
其内部实现细节。
抽象数据类型的描述方法
抽象数据类型可用(D,S,P)三元组表示。
其中:D 是数据对象;
S 是D 上的关系集;
P 是对D 的基本操作集。
ADT抽象数据类型名{
数据对象:〈数据对象的定义〉数据关系:〈数据关系的定义〉基本操作:〈基本操作的定义〉} ADT抽象数据类型名
其中基本操作的定义格式为:
基本操作名(参数表)
初始条件:〈初始条件描述〉
操作结果:〈操作结果描述〉
赋值参数只为操作提供输入值。
引用参数以&打头,除可提供输入值外,还将返回操作结果。
初始条件描述了操作执行之前数据结构和参数应满足的条件,若不满足,则操
作失败,并返回相应出错信息。
操作结果说明了操作正常完成之后,数据结构的变化状况和应返回的结果。
若
初始条件为空,则省略之。
抽象数据类型的表示和实现抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。
例如,对以上定义的复数。
// -----存储结构的定义
typedef struct {
float realpart;
float imagpart;
}complex;
// -----基本操作的函数原型说明
void Assign( complex &Z,
float realval, float imagval );//构造复数Z,其实部和虚部分别被赋以参数// realval和imagval的值
float GetReal( cpmplex Z );
// 返回复数Z 的实部值
float Getimag( cpmplex Z );
// 返回复数Z 的虚部值
void add( complex z1, complex z2,
complex &sum );// 以sum 返回两个复数z1, z2 的和
1.3 算法和算法的衡量
一、算法
二、算法设计的原则
三、算法效率的衡量方法和准则
四、算法的存储空间需求
一、算法
算法是为了解决某类问题而规定的一个有限长的操作序列。
一个算法必须满足以下五个重要特性:
1.有穷性2.确定性3.可行性4.有输入5.有输出
1.有穷性对于任意一组合法输入值,
在执行有穷步骤之后一定能结束,即:
算法中的每个步骤都能在有限时间内完成。
2.确定性对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法
的执行者或阅读者都能明确其含义及如何
执行。
并且在任何条件下,算法都只有一
条执行路径。
3.可行性算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之。
4.有输入作为算法加工对象的量值,通常体现为算法中的一组变量。
有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中。
1.正确性
首先,算法应当满足以特定的“规格说明”方式给出的需求。
其次,对算法是否“正确”的理解可以有以下四个层次:
a.程序中不含语法错误;
b.程序对于几组输入数据能够得出
满足要求的结果;
2. 可读性
算法主要是为了人的阅读与交流,其次才是为计算机执行,因此算法应该易于人的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试。
3.健壮性
当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。
并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。
4.高效率与低存储量需求
通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间,两者都与问题的规模有关。
三、算法效率的
衡量方法和准则
通常有两种衡量算法效率的方法:事后统计法
缺点:1.必须执行程序
2.其它因素掩盖算法本质
事前分析估算法。