2.1.2 线性表类型的应用![]() 两个集合相等的充分必要条件是它们具有相同的元素。当以线性表表示集合时,两个线性表的长度应该相等,且表中所有数据元素都能一一对应,但相同的数据元素在各自的线性表中的"位序"不一定相同。 由此,"判别两个线性表中的数据元素是否完全相同"的算法的基本思想为:首先判别两者的表长是否相等;在表长相等的前提下,如果对于一个表中的所有元素,都能在另一个表中找到和它相等的元素的话,便可得到"两个线性表表示的集合相等"的结论;反之,只要有一个元素在另一个表中不能找到相等元素时,便可得出"不等"的结论。 |
|
|||||||||
![]() bool isEqual(List LA, List LB) { // 若线性表 LA 和 LB 不仅长度相等,且所含数据元素也相同, // 则返回 TRUE,否则返回 FALSE。 La_len = Listlength(LA); Lb_len = Listlength(LB); |
|
|||||||||
if ( La_len !=
Lb_len ) return FALSE; //
两表的长度不等 else { i = 1; found = TRUE; while ( i<= La_len && found ) { GetElem( LA, i, e ); // 取得 LA 中一个元素 if ( LocateElem(LB, e, equal( ) ) i++; // 依次处理下一个 else found = FALSE; // LB中没有和该元素相同的元素 } // while return found; } // else } // isEqual |
两个线性表的长度不等说明所表示的两个集合的大小不同。 退出 while 循环可能有两种情况:一是因i>La_len,说明LA中所有数据元素都能在LB中找到对应元素,由于循环中没有对变量 found 赋值,则循环结束时 found 的值仍为 TRUE;二是因found=FALSE,则是因为对 LA 中某个元素,没有在 LB 中找到对应元素,found 被赋值为 FALSE。由此 while 循环结束时变量 found 的值即为 else 情况下的变量值。 |