数据结构,一种程序设计优化的方法论。不只考虑到存储的数据,同时也考虑到彼此之间的关系与运算,目的就是加快程序的执行速度、减小内存占用的空间。python
使用计算机解决问题,必须以计算机所能接受的模式来确认问题,而且要选用适当的算法来处理数据,这就是数据结构讨论的重点。简单来讲,数据结构就是对数据和算法的研究。算法
按照计算机中所存储和使用的对象,能够将数据分为两大类:数组
1. **数值数据:**例如0,1,2,……,9所组成,能够用运算符来进行运算的数据; 2. **字符数据:**例如+、*以及A、B、C等非数值数据。
按照数据在计算机程序设计语言中的存在层次来分,能够分为三大类:数据结构
基本数据类型(Primitive Data Type):模块化
不能以其余类型来定义的基本数据类型,或成为标量数据类型,几乎全部的程序设计语言都会为标量数据类型提供一组基本数据类型,在python中的基本数据类型包括整型、浮点型、布尔类型和字符类型。函数
结构数据类型(Structured Data Type):oop
也成为虚拟数据类型(Virtual Data Type),是一种比基本数据类型更高一级的数据类型,例如字符串(string)、数组(array)、指针(pointer)、列表(list)、文件(file)等。学习
抽象数据类型(Abstract Data Type):优化
比结构数据类型更高级,是指一个数学模型以及定义在此数学模型上的一组数学运算或操做。ADT在计算机中用于表示一种“信息隐藏”的程序设计思想以及信息之间的某一种特定的关系模式。例如,堆栈(stack)就是一种典型的数据抽象类型,它具备后进先出(last in, first out)的数据操做方式。编码
数据结构与算法是程序设计实践中最基本的内涵。程序可否快速高效地完成预约的任务,取决因而否选对了数据结构,而程序是否能清除正确地把问题解决,则取决于算法。
数据结构加上算法等于可执行程序。
在韦氏词典中,算法被定义为“在有限步骤内解决数学问题的程序”。
| 算法的特性 | 内容与说明 | | ---------- | --------------------------------------------- | | 输入 | 0个货多个输入数据,输入必须有清楚的描述与定义 | | 输出 | 至少有一个输出结果,不能够没有输出结果 | | 明确性 | 每个指令或步骤必须的简洁明确的 | | 有限性 | 在有限步骤后必定会结束,不会产生无限循环 | | 有效性 | 步骤清除且可行,能计算而求出答案 |
过程不必定要知足有限性的要求,如操做系统或机器上运行的过程,除非宕机,不然永远在等待循环(waiting loop)中,这就违反了算法的有限性。
只要是算法就能使用过程流程图来表示。可是反过来,过程没法用算法来描述,由于过程流程图能够包含无限循环。
数据结构与算法必须经过程序(program)的转换才能真正有计算机系统来执行。
程序,是由合乎程序设计语言的语法规则的指令所组成的,而程序设计的目的就是经过程序的编写与执行来实现用户的需求。
“由下而上”,是指先编写整个程序需求中最容易的部分,在逐步扩大来完成整个程序。
“由上而下”,是将整个程序需求从上而下、由大到小逐步分解成较小的单元,或称为“模块”,这样能够针对各个模块分别开发,能够减轻设计者负担,可读性较高,也便于往后维护。
结构化程序设计的核心精神就是“由上而下设计”与“模块化设计”。
一般,“结构化程序设计”具备3种控制流程。顺序结构、选择结构和重复结构。
面向对象程序设计(Object-Oriented Programming, OOP),认定每个对象是一个独立的个体,而每一个独立个体有其特定的功能。面向对象程序设计的重点是强调程序的可读性、重复使用性与扩展性。
面向对象的三个特性:封装性、继承性和多态性。
封装性:利用“类”来实现“抽象数据类型”。类是一种用来具体描述对象状态与行为的数据类型,也能够当作是一个模型,按照这个模型所产生的实例被称为对象。
继承性:面向对象程序设计语言中强大的功能之一,容许程序代码的重复使用,同时能够表达树形结构中父代与子代的遗传现象。
多态性:面向对象设计的重要特性,可让软件在发展和维护时达到充分的延伸性。简单地说,多态最直接的定义就是让具备继承关系的不一样类 别对象能够调用相同名称的成员函数,并产生不一样的反应结果。