数据结构 主讲:庄越.

Slides:



Advertisements
Similar presentations
2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
Advertisements

全微分 教学目的:全微分的有关概念和意义 教学重点:全微分的计算和应用 教学难点:全微分应用于近似计算.
1 计算机软件考试命题模式 计算机软件考试命题模式 张 淑 平 张 淑 平. 2  命题模式内容  组织管理模式 − 命题机构和人员组成 − 命题程序  试卷组成模式.
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
第一章 绪论 学习提要 1.1 什么是数据结构 1.2 基本概念 1.3 抽象数据类型 1.4 算法及其分析.
计算机网络教程 任课教师:孙颖楷.
第1章 绪论 数据结构(C++描述).
数据结构 DATA STRUCTURE.
一、二阶行列式的引入 用消元法解二元线性方程组. 一、二阶行列式的引入 用消元法解二元线性方程组.
C++面试笔试精要 张立伦 讲师的CSDN博客地址
淄博信息工程学校 ZIBOIT&ENGINEERING VOCATONAL SHCOOL 03 交换机干道技术 计算机网络技术专业.
淄博信息工程学校 ZIBOIT&ENGINEERING VOCATONAL SHCOOL 02 认识虚拟局域网 计算机网络技术专业.
数 据 结 构 主讲人:文 军.
常用逻辑用语复习课 李娟.
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
第1章 绪论 本章主要内容 1.1 什么是数据结构 1.2 基本概念和术语 1.3 数据类型和抽象数据类型 1.4 算法描述与算法评价.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
计算机基础知识 丁家营镇九年制学校 徐中先.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
任课教师:赵玉艳 电话: 邮箱: 数据结构 第1章 绪论(一) 任课教师:赵玉艳 电话: 邮箱: 1/
Computer Graphics 计算机图形学基础 张 赐 Mail: CSDN博客地址:
管理信息结构SMI.
第2讲 绪论(二).
数 据 结 构 计 算 机 学 院 肖明军
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Online job scheduling in Distributed Machine Learning Clusters
动态规划(Dynamic Programming)
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
数据结构 黄刘生 (O) (L).
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
顺序表的删除.
( data structures, Algorithms and Applications in C++)
VisComposer 2019/4/17.
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
北师大版五年级数学下册 分数乘法(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
第一章 绪论 1.1 引言 1.2 逻辑结构和存储结构 1.3 算法.
第七、八次实验要求.
海报题目 简介: 介绍此项仿真工作的目标和需要解决的问题。 可以添加合适的图片。
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
第二节 C语言的特点.
《离散结构》 二元运算性质的判断 西安工程大学计算机科学学院 王爱丽.
§2 方阵的特征值与特征向量.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
主讲教师 欧阳丹彤 吉林大学计算机科学与技术学院
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
我们能够了解数学在现实生活中的用途非常广泛
机械设计A 、B 重修 涮分 学习过,想提高?? 上课 考勤?? 平时成绩 %
西安交通大学计教中心 ctec.xjtu.edu.cn
第十七讲 密码执行(1).
插入排序的正确性证明 以及各种改进方法.
《偏微分方程》第一章 绪论 第一章 绪论 1.1.
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
高等学校计算机专业教材 数据结构 袁平波
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
KDD’18 Himchan Park、Min-Soo Kim (DGIST)
Presentation transcript:

数据结构 主讲:庄越

写在前面的话 本课程学习的是什么? 学习在思考问题时, 不仅按人的逻辑方式思考,也按计算机的逻辑思维方式思考 学习在解决问题时, 不仅考虑人的处理方式,也要考虑计算机的处理方式 我是你亲密的朋友,你要理解和尊重我,也要能被我理解。 对你而言,是一场有趣的思维体操; 对我而言,是一座顺畅沟通的桥梁

写在前面的话 如何和我联系? 本课程的网站: 办公室:2-204A 办公电话:37080178 Email:zyjiaoxue@163.com 本课程的网站: www.gdcp.cn/jpkc/sjjg

为什么要学数据结构? 数据结构研究什么? 重新理解算法。 如何分析算法的优劣? 第一章 概论 为什么要学数据结构? 数据结构研究什么? 重新理解算法。 如何分析算法的优劣?

第一问题: 为什么要学数据结构 ? Data Structure

用计算机处理的实际问题可分为两大类问题: 数值计算 非数值计算 数值计算问题: 在计算机发展初期,人们主要应用计算机来完成 科学计算,即处理数值计算问题,对于这类问题,可以 通过抽象出合适的数学模型,然后设计一个相应的算法 来解决。 在建筑设计时计算梁结构的应力要求解线性方程组 预报人口增长情况时要求解微分方程等。 非数值计算问题: 但是随着计算机应用领域的不断扩大,计算机更 多地应用于处理非数值计算问题,这类问题涉及到数据 元素间复杂的相互关系,一般无法用数学方程来描述。

现实中对象之间的关系 线性关系:如列车中各车箱之间的关系、排队买车 票人之间的关系、一叠盘子中各盘子之间的关系等。 层次关系:如学校的组织结构、人的辈分关系等。 网状关系:如城市铁路交通网、电话网、计算机网 络等。

实际问题中对象之间的关系—— 学生成绩管理 学生成绩表 学号 姓名 大学英语 C语言 数据结构 … A07001 王萍 90 85 95 A07002 马玲 80 A07003 张兰 91 99 A07004 李建 70 84 86 A07005 黄勇 82 76 78 : : 关系:线性 特征:一个直接前趋, 一个直接后继 A07001 王萍 90 85 95 A07002 马玲 80 85 90 A07003 张兰 95 91 99 A07004 李建 70 84 86 A07005 黄勇 82 76 78

实际问题中对象之间的关系 例2:“井字棋”的人机对弈 关系:树型 特征:一个直接前趋, 多个直接后继 × O × O × O × O × O … …

实际问题中对象之间的关系 例3:交通图的最短路径问题 关系:图型 特征:多个直接前趋, 多个直接后继 A6 7 4 A2 A4 5 9 A1 8 1 A3 A5 2 6

? 第一问题: 为什么要学数据结构 计算机处理的大多属于非数值计算问题。 第一问题: 为什么要学数据结构 ? 计算机处理的大多属于非数值计算问题。 解决非数值问题的首要任务是选取一种合适的数据结构表示该问题,然后才考虑如何编写有效的算法。

第二问题 数据结构研究什么 ?

几个基本概念 数据(Data)是对客观事物的符号表示,能够被计算 机识别、存储和加工处理。它是计算机程序加工的 “原料”。 数据元素(Data Element)是数据的基本单位,在计算 机程序中通常作为一个整体进行考虑和处理,有时 数据元素也称为元素、结点、记录。 数据类型(Data Type)是具有相同性质的计算机数据 的集合及在这个数据集合上的一组操作。

数据结构的研究内容 数据结构 研究数据之间的相互关系,即数据的组织形式,包 括: 数据的运算,即基于某种存储结构对数据施加的操 作或运算。 数据元素之间的逻辑关系,也称为数据的逻辑结构 (Logical structure)。 数据元素及其关系在计算机存储器内的表示,称为数 据的存储结构(storage structure)。 数据的运算,即基于某种存储结构对数据施加的操 作或运算。 数据结构 结构 + 运算 = 逻辑结构 存储结构

数据结构在计算机科学中的地位 数据结构 数据结构 程序 结构 运算 逻辑结构 存储结构 算法 + = 瑞士计算机科学家沃思(N.Wirth)教授提出: 数据结构 算法 + = 程序 程序设计的实质是对实际问题选择一种好的数据结构,加之设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。 数据结构是计算机软件和计算机应用专业的核心课程之一,由于在计算机系统软件和应用软件中都要用到各种数据结构,要想更有效地使用计算机,就必须学习数据结构的有关知识。

数据结构在软件从业人员的知识与技能结构中的地位 系统分析员 需求分析 系统设计 高级程序员 详细设计 程序设计 程序员、初级程序员 程序设计 程序测试

数据结构在软件从业人员的知识与技能结构中的地位 编程语言 解决问题的思想

推荐阅读-- 《程序员》杂志 2006年4月特别策划《算法的力量》 特别策划《程序员的七种武器》 李开复.《算法的力量》 百度首席架构师揭密:算法是百度工程师的利器 影响算法世界的十位大师 特别策划《程序员的七种武器》 左轻候.《最基础的数据结构》

任何受过专业训练的程序员,对“数据 结构”这门课程中涉及到的各种数据结构都 不会陌生,但是在实际的编程工作中,大部 分的数据结构都不会用到,而且也永远都不 会用到。虽然如此,深入地理解基本数据结 构的概念和实现细节,仍然是每个程序员的 任务。这不仅仅是因为,掌握这些知识将有 利于更加正确和灵活地应用它们,而且也是 因为,对于语言背后的实现细节的求知欲是 一个优秀程序员的素质。 --摘自《最基础的数据结构》

关于数据结构中的结构 数据的逻辑结构是从逻辑关系上描述数据,它与数据的 存储无关,是独立于计算机的,可以看作是从具体问题 抽象出来的数学模型。数据的逻辑结构有两大类: 线性结构:线性表 非线性结构:树和图 数据的存储结构是逻辑结构用计算机语言的实现,它是 依赖于计算机语言的。数据的存储结构有以下四种基本 的存储方法。 顺序存储方法 链接存储方法 索引存储方法 散列存储方法

关于数据结构中的算法 数据的运算是定义在数据的逻辑结构上的,每 种逻辑结构都有一个运算的集合。 最常用的运算有查找、插入、删除、更新、 排序等。 重点研究的两类基本算法: 查找 排序

本课程的结构 线性表 栈 队列 串 多维数组 树 图 查找 排序 线性结构 非线性结构 算法

第二问题 数据结构研究什么 ? 逻辑结构 存储结构 运算

第三问题 重新理解算法Algorithm

算法的基本特征 通俗地讲,一个算法就是一种解题方法 更严格地说,算法是由若干条指令组成的有穷序列 算法必须满足下述准则: 算法的描述 输入:具有0个或多个输入的外界量。 输出:至少产生一个输出。 有穷性:每一条指令的执行次数必须是有限的。 确定性:每条指令的含义都必须明确,无二义性。 可行性:每条指令的执行时间都是有限的。 算法的描述 自然语言 伪高级语言

? 算法 == 程序 算法是为了描述解决某一问题的方法,而不涉及具体的实现细节。

算法存在的辨证关系 数据结构与算法的辨证关系 给定了数据的逻辑结构后,对同一逻辑结构而言, 由于存储结构的不同,定义的运算也是不同的。 如线性表是一种逻辑结构,若采用顺序存储方法表示,则 称为顺序表;若采用链式存储方法表示,则称为链表。 相同的运算在顺序表和链表上的实现方法是不同的。

第四问题 如何分析算法的优劣? 两个指标: 时间复杂度 空间复杂度

评价算法的优劣 主要考虑如下三点: 执行算法所耗费的时间 执行算法所耗费的存储空间,其中主要 考虑辅助存储空间; 算法应易于理解,易于编码,易于调试 等等。

世界是平衡的 我们希望选用一个所占存储空间小、运行时间短、 其它性能也好的算法。然而,实际上很难做到十全 十美。原因是上述要求有时相互抵触,要节约算法 的执行时间往往要以牺牲更多的空间为代价,而为 了节省空间可能耗费更多的计算时间。因此我们只 能根据具体情况有所侧重。 若该程序使用次数较少,则力求算法简明易懂; 对于反复多次使用的程序,应尽可能选用快速的算法; 若待解决的问题数据量极大,机器的存储空间较小, 则相应算法主要考虑如何节省空间。

关于空间复杂度的分析 例: 数组的转置

关于时间复杂度的分析 一个算法所耗费的时间,应该是该算法中每条语句的 执行时间之和,而每条语句的执行时间是该语句的执 行次数(也称为频度(Frequency Count))与该语句执行一 次所需时间的乘积。 常数阶O(1) 对数阶O(1og2n) 线性阶O(n) 线性对数阶O(nlog2n) O(n2)、O(n3)、…、O(nk)、 指数阶O(2n)。