数据结构只是静态的描述数据元素之间的关系,高效的程序需要在数据结构的基础上设计和选择算法。
算法与数据结构的区别:
1,算法是为了解决实际问题而设计
2,数据结构是算法需要处理的问题载体。
3,数据结构与算法相辅相成
算法具体五个基本特性:输入,输出,有穷性,确定性和可行性
数据结构分类,按照视点不同,通常分为逻辑结构,和物理结构
逻辑结构:
1,集合结构,类似于数学中的集合,各个数据元素是平等,或者没有其它关系
2,线性结构,元素之间是一对一的关系,
3,树形结构,是元素之间存在一对多的层次关系
4,图形结构,元素关系是多对多
物理结构:
1,顺序存储,把数据元素存放在连续的地址存储单元
2,链式存储,是把元素存在任意的存储单元,这些单元可以是连续的,也可以是不连续的,需要用一个指针存放元素地址,通过地址找到相关数据的位置。
线性表与受限线性表
线性表
特点是节点之间满足线性关系,如动态数组,链表,栈,队列都属于线性结构,数据元素之间是有顺序的,数据元素个数是有限的,数据元素的类型必须相同
1,线性表的顺序存储
优点:无需为线性表中的逻辑关系增加额外空间,可以快速的获取表中合法位置的元素。
缺点:插入和删除操作需要移动大量元素。
2,线性表的链式存储
优点:无需一次性定制链表的容量,插入和删除数据无需移动数据元素。
缺点:数据元素必须保存后继元素的位置信息,获取指定数据的元素操作需要顺序访问之间的元素。
受限线性表
1,栈(stack),是一种特殊线性表,在于限制了这个线性表的插入和删除位置,它始终在栈顶进行,栈底是固定的,最先进栈的只能在栈底。
2,队列(Queue),只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
树和二叉树
由一个或多个(n>=0)结点组成的有限集合T,有且仅有一个结点称为根(root),当n>1时,其余的结点分为m(m>=0)个互不相交的有限集合T1,T2....Tm,每个集合本身又是棵树,被称为根的子树。
树的特点:
1,非线性结构,有一个直接前驱,但可能有多个直接后继
2,树的定义具有递归性,树中还有树。
3,树可以为空,即节点个数为0.
二叉树基本概念:
逻辑结构是一对二(1:2),每个结点最多只有两棵子树(不存在大于2的结点),左子树和右子树次序不能颠倒(有序树)。
满二叉树,即一棵深度为K 且有2k - 1个结点的二叉树,每层都充满了结点:
完全二叉树,即每一层上的节点树均达到最大值,在最后一层上只缺少右边的若干结点。