线性表的基本操作 插入、删除、查找
之前对线性表的初始化以及扩容操作进行了编写,现在进行插入删除操作
1. 插入操作
ListUnsert(L,i,e)
SqList ListInsert(SqList L, int i, int e) {
for (int j = L.length; j < i; j--) {
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;
L.length++;
return L;
}
但这种操作不利于其他开发人员的使用,需要让代码可用性增强
#define MaxSize 10
typedef struct {
int data[MaxSize];
int length;
}Splist;
bool ListInsert(SqList &L, int i, int e){
if(i<1 || i>L.length+1){
return false;
}
if(L.lenth>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++;
return L;
}
插入数据 的时间复杂度分析
- 最好情况:新元素直接插入到末尾 时间复杂度O(1)
- 最坏情况:新元素插入到了开头 时间复杂度O(n)
- 平均情况:新元素插入到任何一个位置的概率相同 时间复杂度O(n/2) = O(n)
2. 删除操作
ListDelete(SqList L, int i, int e)
太简单,直接上代码
int ListDelete(SqList L, int i) {
int e = 0;
e = L.data[i - 1];
for (int j = i; j < L.length; ++j) {
L.data[j - 1] = L.data[j];
}
L.length--;
return e;
}
删除操作的时间复杂度
O(n)
3. 查找
3.1 按位查找
GetElem(L, i)
取得线性表L中第i个元素的值
L.data[i-1];
时间复杂度O(1)
3.2 按值查找
LocalElem(L, e)
int LocalElem(SpList L, int e){
for(int i = ; ; i < L.ength; i++{
if(L.data[i] == e){
return i+1;
}
}
return 0;
}
时间复杂度O(n)