将小于0的整数放在前部分,大于等于0的整数放在后部分
0相当于快排的pivot
===> 双指针法
void func(SqList& L){
int low=0, high=L.length-1;
while(low<high){
//(1)【移动】
while(L.data[low]<0) low++;
while(L.data[high]>0) high--;
//一轮移动完后——>需要控制 i<j !!!
if(low<high){ //此轮此时low、high都停留在放错的元素———>(2)【交换】
int t=L.data[low];
L.data[low]=L.data[high;
L.data[high]=t;
}
}
}
线性表元素去重
bool visited[10010]; //默认初始化全为false
void romoveDup(SqList &L){
if(L.length==0 || L.length==1){
return; //不需要去重
}
//visited[e]: 元素e是否访问过
for(int i=0;i<L.length;i++){
visited[L.data[i]] = true;
}
//【双指针】i遍历 j更新(L.data[j]构成去重后的表)
for(int i=0,j=0; i<length;i++){
if(visited[L.data[i]]){
//第一次访问——>然后改为false(确保只访问一次)
visited[L.data[i]] = false;
L.data[j]=L.data[i];
j++;
}
}
L.length = j; //去重后的长度为j(j移到了表尾)
}
求A与B交集C
1》初始化exist[]:记录元素是否在a中出现过
2》查找交集元素:遍历第二个线性表 b,共同元素加入c
3》更新c的length
bool exist[10010];
void func(SqList& a, SqList& b, SqList& c){
int k=0;
for(int i=0;i<a.length;i++){
exist[a.data[i]]==true;
}
for(int i=0;i<b.length;i++){
if(exist[b.data[i]){//共同元素
c.data[k++]=b.data[i];
}
}
c.length=k;
}