数据结构处理对象:
数据 是事物的符号,理解为任意一个事物
数据项 是处理的最小单位,若干数据项组成 数据元素,若干相同性质的数据元素组成 数据对象。有点像 类和对象。
数据结构 就是数据元素的关系集合。
数据结构总体分为4个结构:
集合(一堆数据);
线性结构(数据元素之间一一对应,y=ax+b);
树形结构(数据元素之间一对多对应如);
图形结构(数据元素之间多对多)。
算法
算法就是处理某特定问题的求解步骤。
类似于小学的应用题如,动物园有m只动物,一共有n只脚,动物有鸡和兔子,求鸡和兔子的数量分别是多少。
那么算法就是,2x+4y=n,x+y=m,联立求得x 和 y。这就是算法。
一个正确的算法具备有穷性、确定性、可行性、输入和输出的特性,缺少一个,这个算法都是不完善的。
所有的算法都有其效率,衡量一个算法的优劣,就是去看其效率的高低
而效率的评判就从时间和空间两个角度去考量。
时间复杂度:T(n)=O(f(n)),其中n是问题的规模,f(n)是问题的执行函数,而算法执行时间的增长率和f(n)的增长率相同
空间复杂度:S(n)=O(f(n)),其中n是问题的规模,所有的数据都在内存中计算,空间就是算法执行占用的空间
线性表
线性表 是n个数据元素的有限序列。比如简单的26个英文字母(A,B,C...,Z)
而数据元素可以是若干个数据项组成,就可以表示出更多信息。
以学生为例,一个数据元素是一个学生,它的可以包括学号、姓名、性别等信息,这些信息就是数据项。
注意点:
① 线性表中的元素必定是具有相同的特性,也就是说 都是学生,其中不能有老师或者其他类型的职业。
② 线性表中是序列,所以相邻元素之间存在序偶关系,就是有一定的顺序
比如(a1,a2,a3...,ai-1,ai,ai+1,...an),这个线性表中,ai-1就是ai的直接前驱元素(前一个元素),相反就是直接后继元素
其中,第一个数据元素没有前驱元素,最后一个数据元素没有后继元素。n就是线性表的长度,n=0就是空表,i就是a的位序
举个线性表的题,LA和LB是两个线性表,其中的数据元素都是按非递减有序排列,将其归并为LC线性表中,
要求LC中数据元素是按非递增线性排列。
思路:LA和LB是按非递减排列的,那么获取其长度从后往前,依次比较,然后将max(a,b)插入LC中,然后保留较小的数,将其和另一个线性表中下一个数进行比较,再次比较,重复进行。直到LA和LB中比较元素的位序都为0结束。