閱讀以下說(shuō)明和C函數(shù),填補(bǔ)C函數(shù)中的空缺(1)~(5),將解答寫在答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
函數(shù)SetDiff(LA,LB)的功能是將LA與LB中的共有元素從LA中刪除,使得LA中僅保留與LB不同的元素,而LB不變,LA和LB為含頭結(jié)點(diǎn)的單鏈表的頭指針。
例如,單鏈表LA、LB的示例如下圖中的(a)、(b)所示,刪除與LB共有的元素后的LA如下圖中的(c)所示。
鏈表的結(jié)點(diǎn)類型定義如下:
typedef struct Node {
int data;
struct Node *next;
}Node, *LinkList;
函數(shù)SetDiff(LinkList LA, LinkList LB)的處理思路如下:
(1)從LA的第一個(gè)元素結(jié)點(diǎn)開(kāi)始,令LA的第一個(gè)元素為當(dāng)前元素。
(2)在LB中進(jìn)行順序查找,查找與LA的當(dāng)前元素相同者,方法是令LA的當(dāng)前元素先與LB的第一個(gè)元素進(jìn)行比較,若相等,則結(jié)束在LB中的查找過(guò)程,否則繼續(xù)與LB的下一個(gè)元素比較,重復(fù)以上過(guò)程,直到LB中的某一個(gè)元素與LA的當(dāng)前元素相等(表明查找成功),或者到達(dá)LB的表尾(表明查找失?。橹?。
(3)結(jié)束在LB表的一次查找后,若在LB中發(fā)現(xiàn)了與LA的當(dāng)前元素相同者,則刪除LA的當(dāng)前元素,否則保留LA的當(dāng)前元素。
(4)取LA的下一個(gè)元素為當(dāng)前元素,重復(fù)(2)、(3),直到LA的表尾。
【C函數(shù)】
void SetDiff (LinkList LA, LinkList LB)
{
LinkList pre, pa, pb;
/* pa用于指向單鏈表LA的當(dāng)前元素結(jié)點(diǎn),pre指向pa所指元素的前驅(qū) */
/* pb用于指向單鏈表LB的元素結(jié)點(diǎn) */
(1) ; /* 開(kāi)始時(shí)令pa指向LA的第一個(gè)元素 */
pre=LA;
while (pa) {
pb=LB->next;
/* 在LB中查找與LA的當(dāng)前元素相同者,直到找到或者到達(dá)表尾 */
while( (2) ) {
if (pa->data==pb->data)
break;
(3) ;
}
if (!pb) {
/* 若在LB中沒(méi)有找到與LA中當(dāng)前元素相同者,則繼續(xù)考察LA的后續(xù)元素 */
pre=pa;
pa=pa->next;
}
else{
/* 若在LB中找到與LA的當(dāng)前元素相同者,則刪除LA的當(dāng)前元素 */
pre->next= (4) ;
free (pa);
pa= (5) ;
}
}
}