现有 2 个集合 A 和 B,求一个新集合 C=A∪B,3 个集合都用顺序表表示。 比如 A={2, 4, 10, 5, 9},B={1, 4, 6, 8},则 C={2, 4, 10, 5, 9, 1, 6, 8}
void listMerge(seqList *&A, seqList *&B, seqList*& C){
int ia, ib, ic = 0;
//先将集合A中的元素全部复制到C表中
for (ia=0; ia<A->listLen; ia++){
C[ic++] = A[ia];
}
//依次从B中取元素,并遍历A表,看是否有重复元素
for (ib=0; ib<B->listLen; ib++){
if(!listLocate(A, B[ib]))
C[ic++] = B[ib];
}
C->listLen = ic;//修改表长
}
假设顺序表 L 中的元素递增有序,设计算法在顺序表中插入元素 x,要求插 入后仍保持其递增有序特性,并要求算法时间尽可能少。
void insert(seqList *&L, elementType x){
int i = L->listLen-1;
//判断是否表满
if (i>=MAXLEN-1){
cout << "overflow!" << endl;
return;
}
//因为要进行有序插入,因此肯定有位置插入元素
//边从后向前比较,边移动元素,提高了时间性能
while (i>=0 && x < L->data[i]){
L->data[i+1] = L->data[i];
i--;
}
L->data[i+1] = x; //注意是i+1,不是i
L->listLen++;//修改表长
}
假设顺序表 A、B 分别表示一个集合,设计算法以判断集合 A 是否是集合 B的子集,若是,则返回 TRUE,否则返回 FALSE,并要求算法时间尽可能少。
bool subset(seqList *&A, seqList *&B){
int ia, ib;
bool suc = false;//标记
for (ia=0; ia<A->listLen; ia++){
suc = false;
//遍历B表
for (ib=0; ib<B->listLen; ib++){
if (A[ia] == B[ib]){
suc = true;
break;
}
}
//如果suc == false, 说明B中没有元素和A的元素相同,则A不是B的子集
if (suc == false)
return false;
}
//如果正常退出循环,则A是B的子集
return true;
}
假设递增有序顺序表 A、B 分别表示一个集合,设计算法以判断集合 A 是否 是集合 B 的子集,若是,返回 TRUE,否则返回 FALSE,并要求算法时间尽可能少
bool subset(seqList *&A, seqList *&B){
int ia = 0, ib = 0;
//从头开始遍历A,B表
while (ia < A->listLen && ib < B->listLen){
if (A->data[ia] == B->data[ib]){
ia++;
ib++;
}
else if (A->data[ia] > B->data[ib]){
ib++;
}
//A中的元素比B中的小,由于A和B从头开始遍历,且递增有序,则A中的元素B中没有
else
return false;
}
if (ia >= b->listLen)
return true;
else
return false;
}
设计算法将递增有序顺序表 A、B 中的元素值合并为一个递增有序顺序表 C, 并要求算法时间尽可能少
void merge(seqList *&A, seqList *&B, seqList *&C){
int ia = 0, ib = 0, ic = 0;
while (ia < A->listLen && ib < B->listLen){
if (A->data[ia] == B->data[ib]){
C->data[ic++] = A->data[ia++];
C->data[ic++] = B->data[ib++];
}
else if (A->data[ia] > B->data[ib]){
C->data[ic++] = B->data[ib++];
}
else
C->data[ic++] = A->data[ia++];
}
if (ia < A->listLen){
C->data[ic++] = A->data[ia++];
}
if (ib < B->listLen){
C->data[ic++] = B->data[ib++];
}
C->listLen = ic;
}