线性表——单链表的魅力(3) A-B 取出链表中B的每个元素与单链表中的元素作比较,如果相等则删除A中的对应点

对于单链表A中的每个元素e,在单链表B中进行查找,如果在B中存在与A相同的元素,则将元素从A中删除

void DelElem(LinkList A, LinkList B)
{
	int i, j;
	ElemType e;
	ListNode* p;
	//取出链表中B的每个元素与单链表中的元素作比较,如果相等则删除A中的对应点
	for (i = 1; i < ListLength(B); i++)
	{
		p = Get(B, i);					//按序号查询取出B中的结点,将指针返回给p
		if (p)
		{
			j = LocatePos(A, p->data);	//按内容查询取出B中的结点,比较两个数值是否相等
			if (j > 0)
			{
				DeteleList(&A, j, &e);    //如果相等,将其从A中删除
			}
		}
	}
}

代码不全的部分函数 请自己补全

https://blog.csdn.net/wh1236666/article/details/108796385
实现代码:

int i;
ElemType a[] = {5,7,9,11,12,13,14,15,43,45};
ElemType b[] = {1,2,3,4,7,11,23,34,43,57};
LinkList A, B;
ListNode* p;
InitList(&A);//初始化单链表A
InitList(&B);//初始化单链表B
for ( i = 1; i <= sizeof(a)/sizeof(a[0]); i++)//将数值a中的元素插入到单链表A中
{
	if (InsertList(&A, i, a[i - 1]) == 0)
	{
		printf("位置不合法");
		return 0;
	}
}
for (i = 1; i <= sizeof(b) / sizeof(b[0]); i++) //将数值b中的元素插入到单链表A中
{
	if (InsertList(&B, i, b[i - 1]) == 0)
	{
		printf("位置不合法");
		return 0;
	}
}
printf("单链表A中的元素有%d个:\n",ListLength(A));
for ( i = 1; i <= ListLength(A); i++)	//输出单链表A中的元素
{
	p = Get(A,i);						//返回单链表A中结点的指针
	if (p)
	{
		printf("%4d",p->data);			//输出单链表A中的元素
	}
}
printf("\n");
printf("单链表B中的元素有%d个:\n", ListLength(B)); 
for (i = 1; i <= ListLength(B); i++)   //输出单链表B中的元素
{
	p = Get(B, i);				 //返回单链表B中结点的指针
	if (p)
	{
		printf("%4d", p->data);//输出单链表B中的元素
	}
}

printf("\n");
DelElem(A,B);								//将在单链表中的出现过的元素删除,即A-B
printf("执行(A-B)后,A中的元素还有%d个:\n",ListLength(A));
for ( i = 1; i < ListLength(A); i++)
{
	p = Get(A, i);          //返回删除后单链表A中结点的指针
	if (p)
	{
		printf("%4d", p->data);//输出删除后的单链表A中的元素
	}
}

效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值