顺序表的删除
题目描述
已知A,B和C为三个非递减有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在C表中出现的元素。
输入
第一行输入m,n,p(m,n,p<=100),用空格分开,分别表示三个线性表中的元素个数,其后三行依次输入A,B,C表中的元素。
输出
输出实现上述操作后的A表。
输入样例
8 5 6
1 2 3 4 5 6 6 7
2 3 5 9 12
2 4 5 6 12 13
输出样例
1 3 4 6 6 7
代码
#include <stdio.h>
int main()
{
int m,n,p,i,j,k;
int L1[100],L2[100],L3[100];
//输入
scanf("%d%d%d",&m,&n,&p);
for(i=0;i<m;i++)
scanf("%d",&L1[i]);
for(i=0;i<n;i++)
scanf("%d",&L2[i]);
for(i=0;i<p;i++)
scanf("%d",&L3[i]);
//遍历并输出仅在A表中出现的元素
i=j=k=0;
while(i<m&&j<n&&k<p) //任意一表遍历完即跳出循环
{
if(L2[j]==L3[k])
{
if(L1[i]==L2[j])
i++,j++,k++;
else if(L1[i]<L2[j])
{
printf("%d ",L1[i]);
i++;
}
else
j++,k++;
}
else if(L2[j]<L3[k])
j++;
else
k++;
}
while(i<m) //输出A表中剩余元素
{
printf("%d ",L1[i]);
i++;
}
return 0;
}