【数据结构】归并 非降序的顺序表

本文介绍了如何归并两个非降序的顺序表,详细阐述了算法思想,时间复杂度为O(LA.length+LB.length)。通过逐元素比较,将较小的元素先插入新数组,直至其中一个数组遍历完,剩余元素直接追加。提供MergeSqList.h头文件、MergeSqList.cpp算法函数和MergeSqList-main.cpp主函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【数据结构】归并 非降序的顺序表和链表

思想

时间复杂度(O(LA.length+LB.length))

  • 两顺序表进行每个元素的比较,如果比较小的就先插入进新的数组,若一个提前遍历完另一个就直接插入进新数组,所以走完过后就是两数组的长度相加。
  • 新数组初始化:2.2:顺序表不用声明两数组的长度和,直接初始化然后每一个在后面插入就行 2.7:第二种是提前建立一个两数组长度和的空间,然后用指针插入,全程没用SqList.cpp的内容。
  • 判断条件:首先考虑都没遍历完,然后考虑单个遍历完。

代码

MergeSqList.h 头文件

/*==================
 * 归并非降序顺序表和链表
 *
 * 包含算法: 2.2、2.7
 ===================*/

#ifndef MERGESQLIST_H
#define MERGESQLIST_H

#include <stdio.h>
#include <stdlib.h>
#include "SqList.h"        //**▲02 线性表**//


/*
 * ████████ 算法2.2 ████████
 *
 * 非递顺序表归并:C=A+B
 *
 * 归并顺序表La和Lb,生成新的顺序表Lc。
 * 其中,La、Lb、Lc均为非递减序列。
 */
void MergeSqList_1(SqList La, SqList Lb, SqList* Lc);

/*
 * ████████ 算法2.7 ████████
 *
 * 非递减顺序表归并:C=A+B
 *
 * 归并顺序表La和Lb,生成新的顺序表Lc。
 * 其中,La、Lb、Lc均为非递减序列。
 */
void MergeSqList_2(SqList La, SqList Lb, SqList* Lc);

#endif

MergeSqList.cpp 算法函数

/*==================
 * 归并非降序顺序表
 *
 * 包含算法: 2.2、2.7
 ===================*/

#include "MergeSqList.h"    //**▲02 线性表**//


/*
 * ████████ 算法2.2 ████████
 *
 * 非递减顺序表归并:C=A+B
 *
 * 归并顺序表La和Lb,生成新的顺序表Lc。
 * 其中,La、Lb、Lc均为非递减序列。
 */
void MergeSqList_1(SqList La, SqList Lb, SqList* Lc) {
   
    int La_len, Lb_len;
    int i, j, k;
    ElemType ai, bj;
    
    i = j = 1;
    k = 0;
    
    // 初始化Lc
    InitList(Lc);
    
    // 获取La、Lb的长度
    La_len = ListLength(La
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值