数据结构|求单链表A和B的并集

题1:用单链表来存储集合,并假设这样的单链表中的节点递增有序,设计一个尽可能高效的算法求两个集合AB的并集C。设A、B中分别有mn个元素

由于单链表是递增有序的,可以采用归并算法提高求并集的效率,结果并集C采用尾插法建表。

void Unionset(LinkList *A,LinkList *B,LinkList *&C)
{	LinkList *pa=A->next,*pb=B->next,*s,*r;
	C=(LinkList *)malloc(sizeof(LinkList));	//建立C的头节点
	r=C;										//r始终指向单链表C的尾节点
	while (pa!=NULL && pb!=NULL)
	{	if (pa->data<pb->data)					//仅复制*pa节点
		{	s=(LinkList *)malloc(sizeof(LinkList));
			s->data=pa->data;
			r->next=s; r=s;
			pa=pa->next;
		}
		else if (pa->data>pb->data)				//仅复制*pb节点
		{	s=(LinkList *)malloc(sizeof(LinkList));
			s->data=pb->data;
			r->next=s; r=s;
			pb=pb->next;
		}
		else
		{	s=(LinkList *)malloc(sizeof(LinkList));
			s->data=pa->data;
			r->next=s; r=s;
			pa=pa->next;
			pb=pb->next;
		}
	}
	while (pa!=NULL)				//复制A单链表的余下节点
	{	s=(LinkList *)malloc(sizeof(LinkList));
		s->data=pa->data;
		r->next=s; r=s;
		pa=pa->next;
	}
	while (pb!=NULL)				//复制B单链表的余下节点
	{	s=(LinkList *)malloc(sizeof(LinkList));
		s->data=pb->data;
		r->next=s; r=s;
		pb=pb->next;
	}
	r->next=NULL;
}

题2:假设二叉树采用二叉链存储结构进行存储,假设每个节点值为单个字符且所有节点值不同,设计一个算法,输出二叉树b中第k的所有节点值

该题用的是先序遍历

void Dispk(BTNode *b,int k)
{
	Dispk1(b,k,1);
}
void Dispk1(BTNode *b,int k,int h)
{
	if (b!=NULL)
	{
		if (h==k) printf(“%c “,b->data);
		Dispk1(b->lchild,k,h+1);
		Dispk1(b->rchild,k,h+1);
}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值