第1章 数据结构导论

前言

       计算机(Computer),或者有人称为计算器(Calculator),是一种具备数据处理与计算的电子化设备。它可以接收人类所设计的指令或程序设计语言,经过运算处理后,输出所期待的结构。对于一个有志于从事计算机专业领域的人员来说,数据结构(Data Structure)是一门和计算机硬件与软件都相关的学科,其中包含算法(Algorithm)、数据存储架构、排序、查找、程序设计的概念与哈希函数。
       数据结构的研究重点是计算机的程序设计领域,如何将计算机中相关数据的组合,以某种方式组织而成,然后在这样的定义下,就可以探讨各种有意义的操作与关系,以便提高程序的执行效率。

1.1 数据结构简介

       我们可以将数据结构看成是在数据处理过程中一种分析、组织数据的方法与逻辑,它考虑到了数据间的特性与相互关系。计算机与信息是息息相关的,因为计算机具有处理速度快与存储容量大两大特点。

       数据结构无疑就是数据进入计算机内处理的一套完整逻辑,就像程序设计师必须选择一种数据结构来进行数据的新增、修改、删除、存储等操作。因此当我们要求计算机为我们解决问题时,必须以计算机所能接受的模式来确认问题,而安排适当的算法去处理数据,这是数据结构要讨论的重点。

1.1.1数据与信息

1.1.2算法

1.1.3算法的条件

1.2 认识程序设计

       在数据结构中,所探讨的目标就是将算法朝有效率、可读性高的程序设计方向努力。简单地说,数据结构与算法必须通过(Program)的转换,才能真正由计算机系统来执行。而程序设计的目的就是通过程序的编写与执行来达到用户的需求。认为程序设计的主要目的只是要“执行”出正确的结果,而忽略了执行效率或者日后的维护成本,其实这是不清楚程序设计真正意义的表现。

1.2.1程序开发流程

1.2.2数据类型简介

  • 基本数据类型
  • 结构型数据类型
  • 抽象数据类型

1.2.3结构化程序设计

1.2.4面向对象程序设计

1.3 算法效能分析

       对一个程序(或算法)效能的评估,经常是从时间与空间两种因素来进行考虑。时间方面是指程序的运行时间,称为“时间复杂度”。空间方面则是此程序在计算机内存所占的空间大小,称为“空间复杂度”。

1.3.1时间复杂度

1.3.2Big-oh

1.3.3Ω(omega)

1.3.4θ(theta)

1.4 面向对象程序设计与Java

       Java是一种纯面向对象(Object-Oriented Programming,OOP)语言,程序中所有相关的程序运算或执行操作,都是利用由类所产生的对象来控制。跟C语言等其他语言相比,虽然历史较短,但在短时间内急速成长,现在已经被用于许多环境下了。通常在程序执行时,必须要有执行的平台。所谓的平台是一种包括硬件及软件的执行环境,例如操作系统Windows、Linux就是一种执行平台,而Java的执行平台不局限与硬件执行环境,能达到跨平台的执行效果。

1.4.1类与对象

1.4.2面向对象特性

1.4.3数据封装

1.4.4类继承

1.4.5对象多态

1.4.6抽象类

1.4.7接口

小结

  • 数据结构(Data Structure)是一门和计算机硬件与软件都相关的学科。其中包含算法(Algorithm)、数据存储架构、排序、查找、程序设计概念与哈希函数。
  • 数据(Date)指的就是一种未经处理的原始文字(Word)、数字(Number)、符号(Symbol)或图像(Graph)等,它所表达出来的只是一种没有评估价值的基本元素。
  • 数据经过处理(Process),例如以特定的方式系统地整理、归纳甚至分析后,就称为“信息”(Information)。
  • “数据处理”就是用人力或机器设备,对数据进行系统的整理,如记录、排序、合并、计算、统计等,以使原始的数据符合需求,而成为有用的信息。
  • 算法:“为了解决某一个工作或问题,所需要有限数目的机械性或重复性指令与计算步骤。”
  • 算法必须符合的5个 条件:输入、输出、有限、有效、明确。
  • 常见的算法:一般文字叙述、伪语言(Pseudo-Language)、表格或图形、流程图、程序设计语言。
  • 数据类型因为存储层次上的不同可分为三种:基本数据类型(Atomic Data Type)、结构型数据类型(Structure Data Type)、抽象数据类型(Abstract Data Type,ADT)。
  • 结构化程序设计的核心精神,就是“由上而下设计”与“模块化设计”。
  • 属性(attribute)是指对象的静态外观描述,例如一辆车子的颜色、大小等。
  • 方法(method)是指对象中的动态响应方式,例如车子可以开动、停止。
  • 事件(event)是指对象可以针对外部事件作出各种反应,譬如车子没油时,引擎就会停止,当然对象也可以主动地发出事件信息。
  • 面向对象程序设计还具备以下三种特性:封装性、几继承性、多态性。
  • 所谓“抽象化”,就是将代表事物特征的数据隐藏起来,并定义一些方法来作为操作这些数据的接口,让用户只能接触到这些方法,而无法直接使用数据。
  • 在继承关系中,被继承者称为“基类”或父类,而继承者则称为“派生类”或“子类”。
  • 算法效能评估因素:“时间复杂度”(Time Complexity)和“空间复杂度”(Space Complexity)。
  • O(f(n))可视为某算法在计算机中所需运行时间不会超过某一常数倍的f(n),也就是说某算法的运行时间T(n)的时间复杂度(time complexity)为O(f(n))(读成big-oh of f(n)或order is f(n))。
  • 在Java语言中,所有的类、数据与方法都可以定义访问权限,在Java中利用三种内置关键字private、protect与public来设定。
  • 抽象类(abstract class)至少包含一个完整方法及一至多个抽象方法的“基类”,而所谓抽象方法则是指使用保留字“abstract”来声明,并且不加入任何内容叙述的成员方法。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值