数据结构前言

数据结构

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

​ 使用计算机解决问题,必须以计算机所能接受的模式来确认问题,并且要选用适当的算法来处理数据,这就是数据结构讨论的重点。简单来说,数据结构就是对数据和算法的研究。

数据的特性

按照计算机中所存储和使用的对象,可以将数据分为两大类:

1. **数值数据:**例如0,1,2,……,9所组成,可以用运算符来进行运算的数据;
2. **字符数据:**例如+、*以及A、B、C等非数值数据。

按照数据在计算机程序设计语言中的存在层次来分,可以分为三大类:

  1. 基本数据类型(Primitive Data Type):

    不能以其他类型来定义的基本数据类型,或成为标量数据类型,几乎所有的程序设计语言都会为标量数据类型提供一组基本数据类型,在python中的基本数据类型包括整型、浮点型、布尔类型和字符类型

  2. 结构数据类型(Structured Data Type):

    也成为虚拟数据类型(Virtual Data Type),是一种比基本数据类型更高一级的数据类型,例如字符串(string)、数组(array)、指针(pointer)、列表(list)、文件(file)等。

  3. 抽象数据类型(Abstract Data Type):

    比结构数据类型更高级,是指一个数学模型以及定义在此数学模型上的一组数学运算或操作。ADT在计算机中用于表示一种“信息隐藏”的程序设计思想以及信息之间的某一种特定的关系模式。例如,堆栈(stack)就是一种典型的数据抽象类型,它具有后进先出(last in, first out)的数据操作方式。

算法

​ 数据结构与算法是程序设计实践中最基本的内涵。程序能否快速高效地完成预定的任务,取决于是否选对了数据结构,而程序是否能清除正确地把问题解决,则取决于算法

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

​ 在韦氏词典中,算法被定义为“在有限步骤内解决数学问题的程序”。

算法的条件

| 算法的特性 | 内容与说明                                    |
| ---------- | --------------------------------------------- |
| 输入       | 0个货多个输入数据,输入必须有清楚的描述与定义 |
| 输出       | 至少有一个输出结果,不可以没有输出结果        |
| 明确性     | 每一个指令或步骤必须的简洁明确的              |
| 有限性     | 在有限步骤后一定会结束,不会产生无限循环      |
| 有效性     | 步骤清除且可行,能计算而求出答案              |

算法和过程的区别,与流程图的关系

​ 过程不一定要满足有限性的要求,如操作系统或机器上运行的过程,除非宕机,否则永远在等待循环(waiting loop)中,这就违反了算法的有限性。

​ 只要是算法就能使用过程流程图来表示。但是反过来,过程无法用算法来描述,因为过程流程图可以包含无限循环。

程序设计

​ 数据结构与算法必须通过程序(program)的转换才能真正有计算机系统来执行。

程序,是由合乎程序设计语言的语法规则的指令所组成的,而程序设计的目的就是通过程序的编写与执行来实现用户的需求。

程序的开发流程

  • 可读性高:阅读与理解相当容易。
  • 平均成本低:成本考虑不局限于编码的成本,还包括执行、编译、维护、学习、调试与日后更新等成本。
  • 可靠度高:锁边写出来的程序代码稳定性高,不容易产生边界效应。
  • 可编写性高:针对需求所编写的程序相对容易。

结构化程序设计

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

“由上而下”,是将整个程序需求从上而下、由大到小逐步分解成较小的单元,或称为“模块”,这样可以针对各个模块分别开发,可以减轻设计者负担,可读性较高,也便于日后维护。

结构化程序设计的核心精神就是“由上而下设计”与“模块化设计”。

​ 通常,“结构化程序设计”具有3种控制流程。顺序结构、选择结构和重复结构。

面向对象程序设计

​ 面向对象程序设计(Object-Oriented Programming, OOP),认定每一个对象是一个独立的个体,而每个独立个体有其特定的功能。面向对象程序设计的重点是强调程序的可读性、重复使用性与扩展性

​ 面向对象的三个特性:封装性、继承性和多态性

封装性:利用“类”来实现“抽象数据类型”。类是一种用来具体描述对象状态与行为的数据类型,也可以看成是一个模型,按照这个模型所产生的实例被称为对象。

继承性:面向对象程序设计语言中强大的功能之一,允许程序代码的重复使用,同时可以表达树形结构中父代与子代的遗传现象。

多态性:面向对象设计的重要特性,可以让软件在发展和维护时达到充分的延伸性。简单地说,多态最直接的定义就是让具有继承关系的不同类 别对象可以调用相同名称的成员函数,并产生不同的反应结果。

作者:凯旋.Lau
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/KX-Lau/p/11473653.html