若递增有序顺序表 A、B 分别表示一个集合,设计算法求解 A=A交B,并分析其时间性能
void InterSet ( seqList * & A, seqList* & B) {
int ia = 0 , ib = 0 ;
int i = - 1 ;
while ( ia < A- > listLen && B- > listLen) {
if ( A- > data[ ia] == B- > data[ ib] ) {
if ( ia != i+ 1 )
A- > data[ i] = A- > data[ ia] ;
ia++ ;
ib++ ;
i++ ;
}
else if ( A- > data[ ia] < B- > data[ ib] )
ia++ ;
else
ib++ ;
}
A- > listLen = i+ 1 ;
}
递增有序顺序表 A、B 分别表示一个集合,设计算法求解 A=A-B,并分析其时间性能
void SetSubtraction ( seqList* & A, seqList* & B) {
int ia = 0 , ib = 0 ;
int i = - 1 ;
while ( ia < A- > listLen && ib < B- > listLen) {
if ( A[ ia] == B[ ib] ) {
ia++ ;
ib++ ;
}
else if ( A[ ia] > B[ ib] )
ib++ ;
else if ( A[ ia] < B[ ib] ) {
if ( ia != i+ 1 )
A[ i+ 1 ] = A[ ia] ;
ia++ ;
ib++ ;
i++ ;
}
}
while ( ia < A- > listLen) {
if ( ia != i+ 1 )
A[ i+ 1 ] = A[ ia] ;
ia++ ;
}
A- > listLen = i+ 1 ;
}
void SetSubtraction2 ( seqList* & A, seqList* & B) {
int ia = 0 , ib = 0 ;
while ( ia < A- > listLen && ib < B- > listLen) {
if ( A[ ia] == B[ ib] ) {
listDelete ( A, ia+ 1 ) ;
ib++ ;
}
else if ( A[ ia] > B[ ib] )
ib++ ;
else if ( A[ ia] < B[ ib] ) {
ia++ ;
}
}
while ( ia < A- > listLen) {
if ( ia != i+ 1 )
A[ i+ 1 ] = A[ ia] ;
ia++ ;
}
A- > listLen = i+ 1 ;
}