#python数据结构与算法
学了栈之后,你就知道,很多涉及后入先出的问题,例如函数递归就是个栈模型、Android的屏幕跳转就用到栈, 很多类似的东西,你就会第一时间想到:我会用这东西来去写算法实现这个功能。 学了队列之后,你就知道,对于先入先出要排队的问题,你就要用到队列,例如多个网络下载任务, 我该怎么去调度它们去获得网络资源呢?再例如操作系统的进程(or线程)调度,我该怎么去分配资源(像CPU)给多个任务呢? 肯定不能全部一起拥有的,资源只有一个,那就要排队!那么怎么排队呢?用普通的队列?但是对于那些优先级高的线程怎么办? 那也太共产主义了吧,这时,你就会想到了优先队列,优先队列怎么实现?用堆,然后你就有疑问了,堆是啥玩意?
学了顺序表和链表,你就知道,在查询操作更多的程序中,你应该用顺序表;而修改操作更多的程序中, 你要使用链表;而单向链表不方便怎么办,每次都从头到尾好麻烦啊,怎么办?你这时就会想到双向链表or循环链表。
##数据结构 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型。如:int,float,char等等
数据元素之间不是独立的,存在特定的关系,这些关系即结构 数据结构指数据对象中数据元素之间的关系
数据的逻辑结构
- 集合:数据元素间除 “同属一个结合”外,无其他关系
- 线性结构:一个对一个,如线性表,包括栈、队列
- 树形结构:一个对多个,如树
- 图状结构:多个对多个,如图
数据的物理结构 存储结构可分为四大类:顺序、链式、索引、散列 最常用的存储结构:
- 顺序存储结构 借助元素在存储器中的相对位置来表示数据元素间的逻辑关系
- 链式存储结构 借助指示元素存储地址的指针表示数据元素间的逻辑关系
数据的操作运算
数据运算是在数据的逻辑结构上定义的操作,在数据的存储结构上实现
最常用的数据运算有五种:
插入、删除、修改、查找、排序
##算法 算法是独立存在的一种解决问题的方法和思想。 对于算法而言,语言并不重要,重要的是思想。
算法与数据结构的区别
数据结构只是静态的描述了数据元素之间的关系
高效的程序需要在数据结构的基础上设计和选择算法
程序 = 数据结构 + 算法
总结:
算法是为了解决实际问题而设计的
数据结构是算法需要处理的问题载体
算法的五大特性
输入: 算法具有0个或多个输入
输出: 算法至少有1个或多个输出
有穷性: 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在接收的实际内完成
确定性:算法中的每一步都有确定的含义,不会出现二义性
可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成