2019独角兽企业重金招聘Python工程师标准>>>
数据结构和算法能起到什么作用?
数据结构是对在计算机内存中(有时在磁盘中)的数据的一种安排。数据结果包括数组、链表、栈、二叉树、哈希表等等。算法对这些结构中的数据进行各种处理,例如,查找一条特殊的数据项或对数据进行排序。
可用于下面三类情况:
现实数据存储
程序员的工具
建模
数据结构的特性:
数据结构 | 优点 | 缺点 |
数组 | 插入快,如果知道下标,可以非常快地存取 | 查找慢,删除慢,大小固定 |
有序数组 | 比无序的数组查找快 | 删除和插入慢,大小固定 |
栈 | 提供后进先出的方式存取 | 存取其他项很慢 |
队列 | 提供先进先出的方式存取 | 存取其他项很慢 |
链表 | 插入快,删除慢 | 查找慢 |
二叉树 | 查找、插入、删除都快(如果如果树保持平衡) | 删除算法复杂 |
红-黑树 | 查找、插入、删除都快。树总是平衡的 | 算法复杂 |
2-3-4树 | 查找、插入、删除都快。树总是平衡的。类似的树对磁盘存储有用 | 算法复杂 |
哈希表 | 如果关键字已知则存取极快。插入快 | 删除慢,如果不知道关键之则存取很慢,对存储空间使用不充分 |
堆 | 插入、删除快,对最大数据项的存取很快 | 对其他数据项存取慢 |
图 | 对现实世界建模 | 有些算法慢且复杂 |
上表中的数据结构除了数组之外 都可以被认为是抽象数据结构(ADT)。
算法的概述
对于大多数数据结构来说,都需要知道如何:
插入一条新的数据项
寻找某一特定的数据项
删除某一特定的数据项
还需要知道如何迭代地访问某一数据机构中的各项数据项,以便进行显示或其他操作。
另一种重要的算法范畴是排序,排序有许多种算法。简单排序和高级排序 。
递归的概念在设计某些算法时十分重要。递归意味着一个方法调用它自身。
一些定义
数据库(database)
表示在某一特定情况下所有查阅的数据,数据库中每一条数据都被认为是同样格式的。例如,如果使用索引看片来做一本地址薄,其中所有的卡片便构成了一个数据。文件这个数据有时也有代表同样的意思。
记录(record)
记录时指数据库中划分成的单元。
字段(field)
一条记录经常被划分为几个字段。一个字段保存某一种特定的数据。
关键字
在数据库中查找一条记录,需要制定记录的某一个字段为关键字(或查找关键字)。通过这个特定的关键字来进行查找。
面向对象编程
过程性语言的问题
一是程序与现实世界缺乏对应关系。
使用过程语言对现实世界问题进行抽象及概念化十分困难:方法执行任务,而数据存储信息,但是现实世界中的事物是对二者同时进行操作的。例如,炉子上的自动调温器执行任务(炉子的开关)但同时也存储信息(现在的温度和所希望的温度)。
二是程序内部的结构出现了问题。
解决程序的内部组织结构是一个更微妙而且事关重大的问题。
对象简述
对象
面向对象编程思想的关键性突破就是:一个对象同时包括方法和变量。
类
类是针对一个对象或多个对象的说明(或蓝图)。
创建对象
类的声明并没有创建这个类的任何对象,java使用关键字new。在创建对象的同时,需要将一个引用存储到一个具体有适合的类型的变量中。
面向对象的几个重要特性:
对象同时包括方法和字段(数据)。
类是任意数目对象的说明。
创建一个对象,要将关键字new和类的名称连用。
调用一个对象的方法,要使用点运算符。
Java数据结构的类库
Java.util包中包含有诸如向量(一个可扩充的数组)、栈、库(dictionary)和哈希表等类型的数据结构。
小结
数据结构是指数据在计算机内存空间中或磁盘中的组织形式。
正确选择数据结构会使程序的效率大大提高。
数据结构的例子有数组、栈、和链表。
算法是完成特定任务的过程。
在Java中、算法经常通过类的方法实现。
在本书的大部分数据机构和算法经常被用来建造数据库。
一些数据结构的用途是作为程序员的工具:它们帮助执行算法。
其他数据结构可以模仿显示世界中的情况,例如城市之间的电话线网。
数据库是指由许多类似的记录组成的数据存储的集合。
一条记录经常表示显示世界中的一个事物,例如一名雇员或一个汽车零件。
一条记录被分成字段。每个字段都存储了 由这个记录所描述事物的一条特性。
一个关键字是一条记录中的一个字段,通过它可以对数据执行许多操作。例如,人事记录可以通过LastName字段进行排序。
可以搜索数据以便找到关键字字段有定值的所有记录,这个值被称为查找关键字。