线性表的合并

线性表的合并

问题描述:假设利用两个线性表La和Lb分别表示两个集合A,B,现要求一个新的集合A=A∪B

La=(7,5,3,11)Lb=(2,6,3)A=(7,5,3,11,2,6)

算法步骤:(A既是参数又是操作的结果)

依次(需要循环)取出Lb中的每个元素

在La中查找该元素如果没有插入到La表尾

这里的算法是通用的与La Lb的具体存储方式无关(不关心他们是用顺序表还是链表)

算法复杂度是两线性表表长的乘积

有序表的合并

问题描述:已知线性表La和Lb中的数据元素按值非递减有序排列,现要求将La和Lb归并为一个新的线性表Lc且Lc中的数据元素按值非递减有序排列(不一定是严格递增的可能出现相等的元素)

La=(1,7,8)Lb=(2,4,6,8,10,11)A=(1,2,4,6,7,8,8,10,11)

 

 

循环比较-小的值放入Lc-移动小的元素所在数组的指针和Lc指针

[复习]数组名即数组的首地址是常量

int a[10];

int *p=a;/*int *p;p=a而p=a与p=&a[0]等价*/

如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素如果p的初值为&a[0],则:p+i和a+i 就是 a[i]的地址,*(p+i)即为a[i]

引用一个数组元素可以用:

1) 下标法,即用 a[i]形式访问数组元素。在前面介绍数组时都是采用这种方法。

2) 指针法,即采用(a+i)或(p+i)形式,用间接访问的方法来访问数组元素

自增运算++在后先用后加=>*pc=*pa;pa++;pc++

指针到达尾指针达到表尾指针<尾指针未到表尾而有一个到达表尾就停止判断

算法时间复杂度两表表长之和

算法的空间复杂度两表表长之和 

2.链表实现 

Lc仍是带表头结点的单链表在La和Lb的表头结点中任选一个(这里我们选La的头结点作为Lc的头结点Lc=La)

当然像La和Lb一样Lc同样需要一个pc 

比较大小)1<2即pa->data<pb->data=>pa指向的结点插入到pc后(pc->next=pa)(而pc指向当前表尾(pc=pa;)且移动pa(pa=pa->next;)小的元素插入到pc后移动pc指向当前表尾移动小元素所在链表的指针)直到一个链表中所有元素都插入到Lc中 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值