数据结构:指相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储、组织数据的方式。数据机构被形式的定义为(D,R),其中D是指数据元素的有限集合,R是D上所有元素关系的有限集合。
解释:“数据结构”的定义,首先应该包含数据对象在计算机中的组织方式——类似于图书馆中书架上摆书的方法。另一方面,数据对象必定与一系列施加于数据对象上的造作相关联,就如书架上摆书是为了能找到想要的书或者可以插入一本新买的书。关于数据对象在计算机中的组织方式,还包含2个概念:一是数据对象集的逻辑结构,二是数据对象集在计算机中的物理存储结构。
举例,学籍管理系统中学生信息表的每一个数据元素就是一个学生记录。它包括学生的学号、姓名、性别、籍贯、出生年月、成绩等数据项。这些数据项可以分为两种:一种叫做初等项,如学生的性别、籍贯等,这些数据项是在数据处理时不能再分割的最小单位;另一种叫做组合项,如学生的成绩,它可以再划分为数学、物理、化学等更小的项。通常,在解决实际应用问题时是把每个学生记录当作一个基本单位进行访问和处理的。
常用的结构有数组、栈、队列、链表、树、堆、图、散列表等。
延伸:抽象数据类型:只描述数据对象集和相关操作集“是什么”,并不涉及“如何做”的问题。通过抽象可以屏蔽底层细节,使设计更加简单、理解更加方便,即它把数据对象和相关操封装在一起,对于需要调用这个数据类型的用户而言,无论内部的具体实现如何改变,只要对外描述的接口不变,就不影响使用。
算法:算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。
算法是一个有限指令集,它接受一些输入,产生输出,并在有限步骤后终止。算法不是程序,程序可以无限运行,算法必须在有限步后终止。算法,强调表现“做什么”,而忽略细节性的“怎么做”。
衡量算法优劣的指标主要有两个:空间复杂度S(n)——根据算法写成的程序在执行时占用存储单元的长度(这个长度往往与输入数据的规模n有关)和时间复杂度T(n)——根据算法写成的程序在执行时耗费时间的长度(这个长度往往也与输入数据的规模n有关)。
用渐近表示法分析算法复杂度的增长趋势。
递归是数据结构算法设计中很重要的手段