1、数据结构
数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。从逻辑上可以将数据结构分为线性结构和非线性结构,我们常见的顺序表,就是线性结构,而树形结构和图形结构是非线性结构。
在存储数据时,不仅要存储各数据元素的值,还要存储数据元素之间的关系。顺序存储方法把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。链式存储方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针表示。
在决定选取那种存储结构时,一般不考虑结点的值如何,但是需要考虑 结点的个数、对数据有哪些运算、以及所用的编程语言支不支持这种存储结构等。比如,结点个数动态增长时,采用顺序表就不太适合。再比如,常对线性表进行插入和删除操作,则采用顺序表不适合。再比如,Java 语言不支持指针,不能选用链式存储结构。
数据结构是一个二元组,可以定义数据结构为 Data_Structure=(D,R),其中 D是数据元素的有限集,R 是 D 上的关系的有限集。
2、算法
算法分析的目的,是评价算法的效率,通过评价选用更加好更加有效的算法来求解问题。对算法的讨论不能只研究它是否能在有穷步内终止,还应对算法的运行效率作出分析,判断算法的好坏,以便在已有的资源条件下作出最佳的决策。
分析算法的时间复杂度,就是分析算法的规模 n 的函数 f(n)。本题中存在着两层 for 循环,当 i=1 时,内层循环执行 n 次,当 i=2 时内层循环执行 n-1 次…,分析可知,总共执行了近𝑜 2 /2 次,故而时间复杂度为 O(𝑜 2 )。要特别注意,在分析时间复杂度时,我们通常采用 抓取大端的办法,进行粗略估计,不会进行详细计算。