0.定义(静态分配数组)
#define MaxSize 100
typedef struct{
Elemtype data[MaxSize];
int length;
}SqList;
1.插入
bool ListInsert(SqList &L, int i, ElemType e){
//判断i的取值是否有效(1<=i<=L.length+1)
if(i < 1 || i > L.length + 1)
return false;
//判断存储空间是否已满,不能插入
if(L.length >= MaxSize)
return false;
for(int j = L.length; j >= i; j--)
L.data[j] = L.data[j - 1];
L.data[i - 1] = e;
L.length++;//修改length
return true;
}
最好时间复杂度:O(1);最好情况移动次数:0
最坏时间复杂度:O(n);最坏情况移动次数:n
平均时间复杂度:O(n);平均情况移动次数:
1
n
+
1
∑
i
=
1
n
+
1
(
n
−
i
+
1
)
=
n
2
\frac{1}{n+1}\sum_{i=1}^{n+1}(n-i+1)=\frac{n}{2}
n+11∑i=1n+1(n−i+1)=2n
2.删除
bool ListDelete(SqList &L, int i, Elemtype &e){
//判断i的取值是否有效(1<=i<=L.length)
if(i < 1 || i > L.length)
return false;
e = L.data[i - 1];
for(int j = i; j < L.length; j++)
L.data[j - 1] = L.data[j]
L.length--;//修改length
return true;
}
最好时间复杂度:O(1);最好情况移动次数:0
最坏时间复杂度:O(n);最坏情况移动次数:n-1
平均时间复杂度:O(n);平均情况移动次数:
1
n
∑
i
=
1
n
(
n
−
i
)
=
n
−
1
2
\frac{1}{n}\sum_{i=1}^{n}(n-i)=\frac{n-1}{2}
n1∑i=1n(n−i)=2n−1
3.查找
①按位查找
ElemType GetElem(SqList L, int i){
//判断i的取值是否有效(1<=i<=L.length)
if(i < 1 || i > L.length)
return false;
return L.data[i - 1];
}
动态分配访问数组与静态分配访问普通数组相同。
时间复杂度:O(1)
②按值查找(顺序查找)
int LocataElem(SqList L, ElemType e){
int i;
for(int i = 0; i < L.length; i++)
if(L.data[i] == e)//int、char、float、double等基本数据类型可以用==直接比较。结构体,C语言不可以;C++使用重载;但研究生初试中可以(科目名为C语言程序设计等除外)
return i + 1;//返回位序
return 0;
}
最好时间复杂度:O(1);最好情况比较次数:1
最坏时间复杂度:O(n);最坏情况比较次数:n
平均时间复杂度:O(n);平均情况比较次数:
1
n
∑
i
=
1
n
i
=
n
+
1
2
\frac{1}{n}\sum_{i=1}^{n}i=\frac{n+1}{2}
n1∑i=1ni=2n+1