一、线性数据结构的特点
在数据元素的非空有限集中
1、存在唯一的一个被称做“第一个”的数据元素;
2、存在唯一的一个被称做“最后一个”的数据元素;
3、除了“第一个”外,集合中的每个元素均只有一个前驱;
4、除了“最后一个”外,集合中的每个元素均只有一个后继;
二、线性表
线性表是最简单的一种线性数据结构
线性表是由n个数据结构元素组成的有限序列,相邻数据元素之间存在着序偶关系:
<a1,a2>....<an-1,an> 其中下标i表示了元素ai的位置
线性表中的元素具有相同的特性,属于同一数据对象
三、顺序表
顺序表是线性表的顺序存储表示
采用一组地址连续的存储单位依次存储线性表中的数据元素
顺序表中元素的位置:
LOC(ai)=LOC(ai-1)+l
LOC(ai)=LOC(a1)+(i-1)*l
顺序表的定义和创建
#define MAXLISTLEN 100
//最大表长
int ListLen=;
当前表长
int SeqList[MAXLISTLEN];//
顺序表
可以用C语言中的一维数组表示(定义)顺序表
四、顺序表 sequence list
顺序表的访问
int AcquireSeqList(int i) //返回指定位置的元素值
{
return(SeqList[i-1]); //i从1开始计数
}
访问并输出指定位置(第i个)的数据元素值
int AcquireSeqList(int i)
{
if(i>ListLen)
return -1;
else
return(SeqList[i-1]);
}
五、顺序表的插入
顺序表的插入是指在顺序表的第i-1个数据元素和第i个数据元素之间插入一个新的数据元素(记为e)
将长度为n的顺序表
(a1,...,ai-1,ai,...,an)
变成长度为n+1的顺序表
(a1,...,ai-1,e,ai,...,an)
顺序表的插入(操作举例)
向后移动的元素个数为:n-i+1
顺序表的删除
在顺序表中,删除第i个元素,需要向前移动的元素个数为
n-i
顺序表的特点
优点:
访问元素时,可以随机存取
时间复杂度是O(1)
而顺序存取:就是存取第N个数据时,必须先访问前(N-1)个数据。
缺点:
插入或删除元素时,需要进行大量的移动操作
时间复杂度是O(n)
时间复杂度
衡量算法的效率,主要依据算法执行所需要的时间,即时间复杂度
事后统计法:计算开始时间和完成时间的差值
实现分析法:撇开算法运行的软硬件环境,分析算法的策略和问题的规模
是评价算法时间复杂度的常用方法
时间复杂度定义为问题规模n的函数f(n),即:
T(n)=O(f(n))
什么是问题规模n?
一般来说,可以理解为算法接受和处理的数据元素个数
Order 忽略低阶项 忽略倍数常量
f(n)由算法的策略决定,一般指算法中最深层循环内的基本操作重复执行的次数
空间复杂度
空间复杂度指算法执行时,所需存储空间的度量。
类似于时间复杂度,它也是问题规模的函数,即S(n)=O(g(n))