目录
一、线性表的定义
线性表具有相同数据类型的n个数据元素的有限序列
#define MaxSize 50 //线性表的最大长度
typedef struct{
int data[MaxSize]; //线性表的元素
int length; //线性表的当前长度
}SqList //线性表的类型定义
一、线性表的基本操作
InitList(&L):初始化表。构建一个空的线性表
Length(L):求表长。返回线性表的长度。元素个数
LocateElem(L,e):按值查找。
GetElem(L,i):按位查找,获取L表中第i个位置的元素值
ListInsert(&L,i,e):插入操作。L表中第i个位置插入指定元素e
ListDelete(&L,i,&e):删除元素。删除表中第i个位置的元素,并用e返回删除的元素
PrintList(L):输出操作。按前后顺序输出表L的值
Empty(L):判空操作。若为空,返回true,否则false
DestroyList(&L):销毁操作。销毁表,并释放表所占的空间
插入操作
//在顺序表L中第i个位置插入新的元素e,i的合法范围为1<= i <= L.length+1(插入)
//插入的过程中,增加一个数据位,需要移动数据时,先移动数据,然后将数据插入
bool ListInsert(Sqlist &L,int i, ElemType e){
if(i<1 || i>L.length + 1) //判断i范围是否有效
return false;
if(L.length == MAXSIZE) //存储空间已满,不能插入
return false;
for(int j = L.length; j >= i; j--)
L.data[j] = L.elem[j-1]; //插入位置及之后的元素后移
L.data[i-1] = e; //将新元素e放入第i个位置
L.length++; //表长增1
return true;
}
*时间复杂度
最好情况:表尾插入O(1)
最坏情况:移动n个元素O(n)
平均情况:假设 在第i个位置插入的概率,在长度为n的表中插入一个节点平均次数为
*移动元素计算:表长n,第 i 个位置插入数据e,需要移动多少个元素
移动元素个数=
n个元素有n+1个位置插入
平均情况为
*申请空间 假如以有长度为n的表,申请增加m个空间失败,说明没有系统 n+m 连续的存储空间