用于集合La和Lb的合并,ListLenth(L)求长度,GetElem(L,i,&e)取表的一个函数,LocatedElem(L,e,compare())判断表L中符合条件的元素位序函数,ListInsert(&L,i,e)在表中插入一个元素 帮我修改并补充完下面的代码 :void Union (List *La,List Lb) { int La_len, Lb_len; int i; int *e; La_len=ListLenth(La); Lb_len=ListLenth(Lb); for(i=1;i<=Lb_len;i++) { GetElem(Lb,i,e); if(!LocatedElem(La,e,equal)) ListInsert(La,++La_len,e); } }
时间: 2023-05-27 12:06:44 浏览: 104
求线性表的长度ListLength(L)-数据结构线性表
e)获取第i个元素的值e,ListInsert(L,i,e)在第i个位置插入元素e,ListDelete(L,i)删除第i个位置的元素,ListClear(L)清空列表L。
算法步骤:
1. 初始化两个指针p1和p2,分别指向La和Lb的头节点。
2. 创建一个新的空列表L。
3. 分别获取La和Lb的长度len1和len2,计算它们的和sum_len。
4. 从1到sum_len遍历,每次取出p1和p2指向的节点中较小的那个,插入到L中,并将该指针向后移动一位。
5. 如果p1或p2已经到达了列表的末尾,则将另一个列表中剩余的元素全部插入到L中。
6. 返回合并后的列表L。
Python代码实现:
def merge_lists(La, Lb):
p1, p2 = La.head, Lb.head
L = LinkedList()
len1, len2 = ListLength(La), ListLength(Lb)
sum_len = len1 + len2
for i in range(sum_len):
if p1 is None:
L.insert(len(L), p2.data)
p2 = p2.next
elif p2 is None:
L.insert(len(L), p1.data)
p1 = p1.next
elif p1.data <= p2.data:
L.insert(len(L), p1.data)
p1 = p1.next
else:
L.insert(len(L), p2.data)
p2 = p2.next
return L
其中,LinkedList()为自定义的链表类,ListLength(L)返回链表L的长度,insert(i, data)在第i个位置插入元素data。
阅读全文