admin 管理员组

文章数量: 887032

设线性表 A=(a1, a2, ..., am),B=(b1, b2,..., bn) ,试写一个按下列规则合并 A,B为线性表 C的算法,即使得             C = (a1, b1,..

NOTICE: 本题代码是按照源码顺序粘贴的,复制可直接运行

环境: Visual Stdio Code

题目

设线性表 A=(a1, a2, ..., am),B=(b1, b2,..., bn) ,试写一个按下列规则合并
A,B为线性表 C的算法,即使得
            C = (a1, b1,..., am, bm, bm+1,..., bn)     当 m <= n 时;

            C= (a1, b1,..., an, bn, an+1, ..., am)        当 m >= n 时;
线性表 A,B和 C均以单链表作存储结构,且 C表利用 A表和 B 表中的结点空间 构成。注意:单链表的长度值 m和 n 均未显式存储。

分析

可以看出,不论是 A 的长度长还是 B 的长度长,最终 C 链表中的首元结点都是 A 链表的首元结点,所以只需要让 C = A 即可。

本算法的大致方法就是多次插入,即:将 B 链表中的元素插入 A 链表中,最后再处理一下长度的问题即可。

处理长度可以利用如下思路:

当 A 链表长度大时直接正常插入就行(因为 B 链表长度较短,所以当循环到大于 B 链表之后就是单纯的遍历 A 链表的剩下节点);

当 B 链表长度大时,循环完成之后需要将 A 链表的最后一个节点的 next 指向 B 链表剩下的节点。

代码:

初始化:

#include<stdio.h>
#includ

本文标签: 设线性表 A(a1 A2 am),B(b1 b2