目录
PPT:第二章P176;
合并为一个新的整体:有序表的合并(有序,可重复)
线性表:
对于该操作的具体实现的流程设计:(各模块)
- 创建一个空表C
依次从A或B(中)“摘取”元素值较小的结点插入到C表的最后,直至其
中一表变空
继续将A或B其中一表的剩余结点插入C表的最后
模块一:
对于这里的模块一,我们需要进行的:
建一个新表来返回两表合并后的结果(最终合并后的表)的操作的整个学习过程与问题,详见:
数据结构与算法基础(王卓)(8)附:关于new的使用方法详解part 2;
而在本程序中,我们使用的语句,即:
C.elem = new Elemtype[100];
模块二:
其中,模块二的流程实现,又具体细分为:
- 摘取两表中元素值较小的结点
- 将结点插入到C表的结尾
- 重复循环“1”、“2”步操作,直至其中一表变为空为止
project1:
//不用指针,直接硬钢判断语句
int i = 0,//对应A表
j = 0,//对应B表
k = 0;//对应C表
while (i < A.length || j < B.length)
{
if (A.elem[i] > B.elem[j])
{
C.elem[k] = B.elem[i];
i++;
k++;
}
if (A.elem[i] == B.elem[j])
{
C.elem[k] = A.elem[i];
C.elem[++k] = B.elem[j];
i++;
j++;
k++;
}
else// if (A.elem[i] < B.elem[j])
{
C.elem[k] = A.elem[i];
i++;
k++;
}
//当然,也可以先大于小于再等于
说明:
(1):
在模块二中,两表相比较的两结点元素值都相等的语句,也可以写为:
if (A.elem[i] == B.elem[j])
{
C.elem[k] = A.elem[i];
C.elem[++k] = B.elem[j];
i++;
j++;
k++;
}
(2):
需要注意(记住),本来(一开始),对于循环执行(的)判断语句,我们本来想写为
while(A.elem[i] != 0 || B.elem[j] != 0)
然而,结果显示:

首先,第一点确定无疑的事情(结论)就是:
在这里,我们的程序不能完成该语句中的“!=”判断
在这里,想要程序能够成功实现执行该判断,我们可以有如下两种解决办法:
- 手撸一个关于<Poly类型> != <int类型>的判断定义表达式
- 定义结点为空时,该空节点的内容;即:定义一个这样的空结点
当然,要真这么写,可以是也可以,但是太过麻烦,我们这里就不选择这种方法了
project 2:(利用线性表地址线性排列存储的性质)

最低0.47元/天 解锁文章
1234

被折叠的 条评论
为什么被折叠?



