配套的顺序表实现:https://blog.csdn.net/he626shidizai/article/details/88201157
将整个顺序表倒置:
void Reverse(SqList &L){
ElemType temp;
for(int i = 0; i < L.length/2; i ++){
temp = L.data[i];
L.data[i] = L.data[L.length-i-1] ;
L.data[L.length -i-1] = temp;
}
}
删除顺序表中在给定值s和t之间的所有元素:
bool Dels_t(SqList &L,ElemType s,ElemType t){
if(s >= t || L.length == 0)
return false;
int k = 0;
for(int i = 0,j = 0; i < L.length; i ++)
if(L.data[i] >= s && L.data[i] <= t)
k ++;
else
L.data[j++] = L.data[i];
L.length -= k;
return true;
}
从有序顺序表中删除s和t之间的所有元素:
bool Del_s_T(Sqlist &L, ElemTypeemType s, ElemType t){
int i, j;
if(s >= t || L.length == 0)
return false;
for(i = 0; i < L.length && L.data[i] < s; i ++); //查找第一个值大于s的元素下标
if(L.length == i)
return false;
for(j = i; j < L.length && L.data[j] <= t;j ++);//寻找值大于t的第一个元素
for(;j < L.length; i ++, j ++)
L.data[i] = L.data[j];
L.length = j;
return true;
}
删除重复的元素
使用散列表:
bool DelSame(SqList &L){
if(L.length == 0)
return false;
ElemType arr[10000] = {0};
int j = 0;
for(int i = 0; i < L.length; i ++){
if(arr[L.data[i]] == 0){
L.data[j++] = L.data[i];
arr[L.data[i]] = 1;
}
}
L.length = j;
return true;
}
这里没有使用散列表,使用散列表的话会占用很大的空间,但是时间复杂度为O(n)
void DelSame(SqList &L){
int k;
for(int i = 0; i < L.length; i ++){
k = i + 1;
for(int j = i+1; j < L.length; j ++){
if(L.data[j] != L.data[i])
L.data[k++] = L.data[j];
}
L.length = k;
}
}