数据结构导论

1.1 数据结构的定义

数据结构可以看成是在数据处理过程中的一种分析、存储、组织数据的方法与逻辑。

 

数据结构的定义就是一种程序设计优化的方法论,不仅讨论到存储数据,同时考虑到彼此之间的关系与运算,目的是加快程序的执行速度,减少内存占用的空间。

 

数据结构就是对数据与算法的研究

 

1.1.1 数据与信息

数据 Data 信息Information

 

数据,指的是一种未经处理的原始文字、数字、符号或图形,它所表达出来的只是一种没有评估价值的基本元素或表目

 

信息,经过处理(以特定的方式系统的整理、归纳甚至分析)之后的数据。

数据处理,是指数据处理的过程。

 

1.1.2 数据的特性

按照计算机中存储和使用的对象分两大类:

  • 数组数据(Numeric Data):由数字0-9组成,可用运算符进行运算的数据
  • 字符数据(Alphanum Data) :符号、字母等非数值数据

 

按照数据在计算机程序语言中的存在层次分三种类型:

  • 基本数据类型(Primitive Data Type) PDT

不能以其他数据类型来定义的基本数据类型,又称标量数据类型

在Python中基本数据类型包括:整型、浮点型、布尔类型和字符类型

 

——> 存值

 

  • 结构数据类型(Structured Data Type) SDT

结构数据类型也称虚拟数据类型,是一种比基本数据类型更高一级的数据类型

包括:字符串(string)、数组(array)、指针(pointer)、列表(list)、文件(file)等

 

——> 存引用地址

 

  • 抽象数据类型(Abstract Data Type) ADT

抽象数据类型比结构数据类型更高级,是指一个数学模型以及定义在此数学模型上的一组数学运算或操作。

ADT在计算机中用于表示一种“信息隐藏”的程序设计思想以及信息之间的某一种特定的关系模式。

例如堆栈。

 

1.1.3 数据结构的应用

计算机的主要工作就是把数据经过某种运算处理转换为实用的信息。

 

树形结构

使用树形结构中的二叉空间分割树、四叉树、八叉树等来代表分割场景的数据

例如,网络游戏中需要获取某些物体所在的地形信息

 

最短路径

最短路径是指在众多不同的路径中距离最短或者所花费成本最少的路径

例如,全球定位系统(GPS)传递地理位置信息,用于定位与路况查询,提供路径选择方案

 

查找理论

搜索引擎,是一种自动从因特网的众多网站中查找信息,再经过一定的整理后提供给用户进行查询的系统

例如百度、谷歌、搜狗

 

1.2 算法

数据结构与算法是程序设计实践中最基本的内涵。

 

程序能否快速而高效地完成预定的任务,取决于是否选对了数据结构,而程序是否能清楚而正确地把问题解决,则取决于算法

 

“数据结构加上算法等于可执行程序”

 

算法定义:在有限步骤内解决数学问题的程序

 

算法的条件

输入:0个或多个输入数据,这些输入必须有清楚的描述或定义

输出:至少会有一个输出结构,不可以没有输出结构

明确性:每一个指令或步骤必须是简洁明确

有限性:在有限步骤后一定会结束,不会产生无限循环

有效性:步骤清楚且可行,能让用户用纸币计算而求答案

 

描述算法的方式

文字叙述

伪语言

表格或图形

流程图

程序设计语言

 

算法和过程?

算法和过程是有区别的,因为过程不一定要满足有限性的要求,如操作系统或机器上运行的过程。除非宕机,否则永远在等待循环中,这就违反了算法的五大条件中的有限性

另外,只要是算法都能够使用过程流程图来表示,但反过来,过程无法用算法来描述,因为过程流程图可以包含无线循环

 

1.3 认识程序设计

程序,是有合乎程序设计语言的语法规则的指令所组成

程序设计的目的就是通过程序的编写与执行来实现用户的需求

 

1.3.1 程序开发流程

 

判断程序设计语言的好坏要考虑以下4点:

可读性高:阅读与理解容易

平均成本低:成本考虑不局限于编码的成本,还包括执行、编译、维护、学习、调试与日后更新等成本

可靠度高:所编写出来的程序代码稳定性高,不容易产生边界效应

可编写性高:针对需求所编写的程序相对容易

 

程序产生的过程:

需求:了解程序所要解决的问题是什么,有哪些输入和输出

设计规划:根据需求选择适合的数据结构,并以某种易于理解的表示方式写一个算法以解决问题

分析讨论:思考其他可能适合的算法和数据结构,最后选出最适当的一种

编写程序:把分析的结果写成初步的程序代码

测试检验:最后必须确认程序的输出是否符合需求,这个步骤得分布地执行程序并进行许多相关的测试

 

1.3.2 结构化程序设计

传统程序设计方法,分为由上而下和由上而下

由上而下:是指程序员先编写整个程序需求中最容易的部分,再逐步扩大来完成整个程序。

 

由下而上:是将整个程序需求从上而下,由大到小逐步分解成较小的单元,或称为模块。

程序员可以针对各模块分别开发,不但可减轻设计者负担,可读性较高,也便于日后维护

 

顺序结构:逐步编写程序语句

 

选择结构:根据某些条件进行逻辑判断

 

重复结构:根据某些条件决定是否重复执行某些程序语句

 

1.3.3 面向对象程序设计

面向对象程序设计(OOP)的主要涉及思想就是将存在于日常生活中随处可见的对象概念应用在软件开发模式中。

OOP让我们能一种更生活化、可读性更高的设计思路来进行程序的开发和设计,并且所开发出来的程序也更容易扩充、修改及维护。

面向对象三大特性:封装性、继承性、多态性

 

封装:就是利用“类”来实现“抽象数据类型”(ADT)。

类是一种用来具体描述对象状态与行为的数据类型,也可以看成是一个模型或蓝图,按照整个模型或蓝图产生实例(Instance)就成为对象

所谓抽象,就是将代表事物特征数据隐藏起来,并定义一些方法来作为操作这些数据的接口。

例:在java中,将属性私有化,并提供set()和get()方法

 

继承:允许程序代码的重复使用(Code Reusabilty),同时可以表达树形结构中父代与子代的遗传现象

在继承关系中,可以单纯是为一种复制操作,当程序开发人员以继承机制声明新增的类时,它会将所引用的父类中的所有成员完成写入新增的类中

 

多态

多态也是面向对象设计的重要特性,可让软件在发展和维护时达到充分的延伸性。

多态最直接的定义就是让具有继承关系的不同类别对象可有调用相同名称的成员函数,并产生不同的反应结果。

 

多态的定义简单来说就是利用类的继承结构先建立以一个基类对象。用户通过对象的继承声明将此对象向下继承为派生类对象,进而控制所有派生类的“同名异式”成员方法

 

1.4 算法性能分析

时间复杂度:程序运行的时间

空间复杂度:程序在计算机内存所占的空间大小

1.4.1 Big-Oh

时间复杂度只是执行次数的一个概率的估算,并非真实的执行次数。

Big-Oh是一种用来表示最坏运行时间的估算方式,也是最常用于描述时间复杂读的渐近式表示法

1.4.2 Ω

Ω也是一种时间复杂度的渐近表示法,运行时间估算的最好情况

1.4.3 θ

是一种比Big-Oh与Ω更精确的时间复杂度的渐近表示法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗少说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值