1.数据结构包括数据的逻辑结构和物理结构。数据的逻辑结构就是从具体问题抽象出来的数学模型,是为了讨论问题的方便,与数据在计算机中的具体存储没有关系。讨论数据结构的目的是为了在计算机中实现对它的操作,因此还需要研究在计算机中如何表示和存储数据结构,即数据的物理结构。数据的物理结构又称为存储结构,是数据在计算机中的表示(又叫影像)和存储,包括数据元素的表示和村塾以及数据元素之间的关系的表示和存储。
2.数据的存储结构包括顺序存储结构和链式存储结构两种。顺序存储结构是通过数据元素在计算机存储器中的相对位置来表示出数据元素的逻辑关系,一般把逻辑上相邻的数据元素存储在物理位置相邻的存储单元中。在C#语言中用数组来实现顺序存储结构。因为数组所分配的存储空间是连续的,所以数组天生就具有实现数据顺序存储结构的能力。链式存储结构对逻辑上相邻的元素不要求其存储位置必须相邻。链式存储结构中的数据元素称为结点,在结点中附设地址域来存储与该结点相邻的节点的地址来实现结点间的逻辑关系。这个地址称为引用,这个地址域成为引用域。
3.算法是对某一特定类型的问题的求解步骤的一种描述,是指令的有限序列。其中的每条指令表示一个或多个操作。一个算法应该具备以下5个特性:
有穷性:一个算法总是在执行有穷步骤之后结束,即算法的执行时间是有限的。
确定性:算法的每一个步骤都是必须有确切的含义,即无二义,并且对于相同的输入只能有相同的输出。
输入:一个算法具有零个或多个输入。它即是在算法开始之前给出的量,这些输入时某些数据结构中的数据对象。
输出:一个算法具有一个或多个输出,并且这些输出与输入之间存在着某种特定关系。
能行性:算法中的每一步都可以通过已经实现的基本运算的有限次运行来实现。
4. 算法的评定标准
正确性:算法的执行结果应当满足预先规定的功能和性能的要求,这是评价一个算法的最重要也是最基本的标准。算法的正确性还包括对于输入输出处理的明确而无歧义的描述。
可读性:算法主要是为了人阅读和交流,其次才是机器人执行。所以一个算法应该思路清晰、层次分明、简单明了、易读易懂。及时算法已经转变成机器可执行的程序,也需要考虑人能较好地阅读理解,同时,一个可读性强的算法也有助于对算法中隐藏错误的排除和算法的移植。
健壮性:一个算法应该具有很强的容错能力,当输入不合法的数据时,算法应当能做适当的处理,使得不至于引起严重的后果,健壮性要求表面算法要细致全面地考虑所有可能出现的边界情况和异常情况,并对这些边界情况和异常情况做出妥善处理,尽可能使算法没有意外的情况发生。
运行时间:运行时间是指算法在计算机上运行所花费的时间,他等于算法中每条语句执行时间的总和。对于同一个问题如果有多个算法可供选择,应尽可能选择执行时间短的算法。一般来说,执行时间越短,性能越好。
占用空间:占用空间是指算法在计算机上存储所占用的存储空间,包括存储算法本身所占用的存储空间、算法的输入及输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间。算法占用的存储空间是指算法执行过程中所需要的最大存储空间,尽可能选择存储量需求低的算法。算法在运行过程中临时占用的存储空间的大小叫算法的空间复杂度。