1.1什么是数据结构?
数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关的科学。
1.2数据结构的分类:
我们可以把数据结构分为逻辑结构和物理结构两大类。
逻辑结构分类:
逻辑结构是从具体的问题中抽象出来的模型,是抽象意义的结构。按照对象与数据元素之间的相互关系分类,也是我们后面需要关注和讨论的。
a:集合结构:集合结构数据元素除了属于同一个集合外他们之间没有任何其他的关系。
b:线性结构:线性结构中的元素之间存在一对一的关系。
c:树形结构:树形结构元素之间存在一对多的层次关系。
d:图形结构:图形结构的元素是多对多的关系。
物理结构的分类:
逻辑结构在计算机中真正的表示方式(又称为映像)称为物理结构,也可以叫做存储结构。常见的物理结构有顺序存储结构和链式存储结构。
顺序存储结构:把数据元素放到地址连续的存储单元里面,其数据间的关系和物件间的关系是一致的,比如我们常用的数组就是顺序存储结构。
顺序存储结构存在一定的弊端,就像生活中商场结账有人插队,也有人中途离开,这个时候整个结构都处于变化中,此时需要链式存储结构。
链式存储结构:
客户把数据存储在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的,此时数据间的存储元素并不能反映元素间的逻辑关系,因此在链式存储结构中引入了一个指针存放数据元素的地址,这样通过地址就可以找到相关元素的位置。
1.3 什么是算法:
算法是指解题方案的准确和完整描述,是一系列解决问题的清晰指令,算法代表着用系统方法解决问题的策略机制,也就是说能够对一定规范的输入,在有限的时间内获得所需求得输出。
研究算法的最终目的是如何花更少的时间,如何占用最小的内存去完成相同的需求。可以分为时间复杂度分析和空间复杂度分析。
算法的时间复杂度分析:
我们需要计算算法时间耗费情况,首先我们得度量算法的执行时间,那么如何度量呢?
事后分析估算法:
比较容易想到的方法就是我们把算法执行若干次,然后那个计时器在庞念计时,这种事后统计的方法看上去的确不错,并且也并非要我们真的哪个计数器在旁边计算,因为计算机提供了计时功能,这种统计方法主要是通过设计好的测试程序和测试数据,利用计算器计时对不同的算法编程的程序进行时间的比较,从而计算算法的效率的高低,但是这种方法有很大的缺陷,必须依据算法实现编制好的测试程序,通常花费大量的时间和经历,测试完了如果发现测试的是非常糟糕的算法,那么之前所做的事情就全部浪费了,并且不同的测试环境(硬件环境)的差异和测试结果差别很大。
事前分析算法:
在计算机程序编写前,依据统计算法对算法进行估算,经过总结,我们发现一个高级语言编写的程序在计算机上运行所消耗的时间取决于下列因素。
1 算法采用的策略和方案
2 编程产生的代码质量
3 问题的输入规模(所谓的问题的输入规模就是输入量的多少)
4 机器执行指令的速度。
由此可见,抛开这些与计算机硬件软件有关的因素,一个程序的运行时间长短依赖于算法的好坏和问题的输入规模,如果算法固定,那么该算法的执行时间就只和问题的输入规模有关了