已知A,B和C为三个递增有序的线性表,现要求对A表作如下操作:删去那些即在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法,并分析你的算法的时间复杂度。
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
bool Delete(List& Head,List L)
{
if (Head == L)
{
Head = Head->Next;
free(L);
return true;
}
List Temp = Head;
while (Temp->Next != L)
Temp = Temp->Next;
Temp->Next = L->Next;
free(L);
return true;
}
bool Search(int n, List L)
{
while (L)
{
if (n == L->Data)
return true;
L = L->Next;
}
return false;
}
void Function(List& A, List B, List C)
{
int n=-1;
List Head = A;
List Temp = A;
while (Temp)
{
if (Temp->Data==n||Search(Temp->Data, B) && Search(Temp->Data, C))
{
if (A == Temp)
A = A->Next;
n = Temp->Data;
List L = Temp;
Temp = Temp->Next;
Delete(Head, L);
}
else
Temp = Temp->Next;
}
}
我这里只把功能函数给出来,其他链表的创建、打印函数没有写出