顺序表的存储结构:
typedef struct{
int data[Maxsize]; //存在顺序表中的元素
int length; //存放顺序表的长度
}SqList;
分析:
这里有序的顺序表,可以利用有序顺序表的归并算法来解题。
用第三个顺序表C来存放并集元素。
因为是有序的,所以两个顺序表比较,谁小谁放入C中,如果相等,那么就比较一个。
将剩余的元素(A或B)放入C中。
思路:
1.定义三个变量 ,i ,j ,k 初始值都为0。
2.通过while循环,条件为i < A.length && j < B.length
两个顺序表相互比较,
- 如果A.data[i] < B.data[j] ,则将A.data[i] ,放入C中。
- 如果A.data[i] > B.data[j] ,则将B.data[i] ,放入C中。
- 如果A.data[i] =B.data[j] ,则将A.data[i] ,放入C中。
3.将未遍历完的顺序表(可能A或B),放入C中。
C代码实现:
void Union(Sqlist A,Sqlist B,Sqlist &C){
int i = 0,j = 0,k = 0;
while(i < A.length && B.length){
if(A.data[i] < B.data[j]){
C.data[k] = A.data[i];
i++;k++;
}else if((A.data[i] > B.data[j]){
C.data[k] = B.data[j];
k++;j++;
}else{
C.data[k] = A.data[i]; //公共元素只放一个
i++;j++;k++;
}
}
while(i < A.length){ //若A未遍历完
C.data[k] = A.data[i];
k++;i++;
}
while(j < B.length){ //若B未遍历完
C.data[k] = B.data[];
j++;k++;
}
C.length = k;
}