产生背景
数据结构+算法=程序设计
算法是处理问题的策略
数据结构给出问题的数学模型
而程序是指编制出计算机处理问题的指令
为编写出一个好的程序,我们必须分析待处理的对象的特性以及各处理对象之间存在的关系,这就是“数据结构”产生的背景。
也就是说,数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。
数据结构的组成
数据结构分为逻辑结构和存储结构。
逻辑结构指的是对象中数据元素之间的相互关系。
逻辑结构分为四种:集合结构(各个元素之间平等,且相互之间没有关系),线性结构(一对一),树型结构(一对多)、图型结构(多对多)
常见的线性结构:线性表,栈,队列,双队列,数组,串
常见的非线性结构:树、二叉树、图、网
存储结构指的是数据的逻辑结构在计算机中的存储形式。
存储结构有两种:顺序存储结构和链式存储结构
1.顺序存储结构:把数据元素存放在连续的存储单元里,其数据间的逻辑关系和存储关系是一样的。
2.链式存储结构:把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
逻辑结构是面向问题的,而存储结构是面向计算机的。
抽象数据类型(ADT)
抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。
1.定义了一组运算的数学模型
2.与物理存储结构无关
3.使软件系统建立在数据之上(面向对象)
抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。
算法的特性和分类
特性:
通用性,有效性,确定性,有穷性
基本算法分类:
1穷举法:顺序找k的值
2回溯、搜索: 八皇后、树和图的遍历
3递归分治:二分找k值,快速排序,归并排序
4贪心法:哈夫曼编码树,最短路,dijkstra算法,最小生成树Prim算法
5动态规划:最短路Floyd算法
算法的效率质量
用空间复杂度和时间复杂度来度量一个算法的质量。
(算法与数据结构的选择应当进行一定的时空开销权衡)