青岛大学_王卓老师【数据结构与算法】Week04_09_线性表的应用2_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。

一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。

如有侵权,请留言作删文处理。

课程视频链接:

数据结构与算法基础–第04周09–2.7线性表的应用2–有序表的合并–用顺序表实现

⚠️ ⭐ ❓ ❗️ ➔

【Week04】09_有序表的合并(用顺序表实现)

有序表的合并

问题描述

已知线性表 La 和 Lb 中的数据元素按值非递减有序排列,

现要求将 La 和 Lb 归并为一个新的线性表 Lc,且 Lc 中的数据元素扔按值非递减有序排列
在这里插入图片描述

算法步骤

(1) 创建一个空表 Lc

(1) 依次从 La 或 Lb 中 “摘取” 元素值较小的结点插入到 Lc 表的最后,直至其中一个表变为空为止

(2) 继续将 La 或 Lb 其中一个表的剩余结点插入在 Lc 表的最后。

示例图1

青岛大学_王卓老师【数据结构与算法】Week04_09_线性表的应用2_学习笔记_第1张图片

示例图2

青岛大学_王卓老师【数据结构与算法】Week04_09_线性表的应用2_学习笔记_第2张图片

示例图3

青岛大学_王卓老师【数据结构与算法】Week04_09_线性表的应用2_学习笔记_第3张图片

算法描述
void MergeList Sq(SqList LA,SqList LB,SqList &LC){
    // 指针pa和pb的初值分别指向两个表的第一个元素
    pa=LA.elem;
    pb=LB.elem;		
    // 新表长度为待合并两表的长度之和
    LC.length=LA.length+LB.length;		
    // 为合并后的新表分配一个数组空间
    LC.elem=newElemType[LC.length]	
    // 指针 pc 指向新表的第一个元素
    pc=LC.elem;		
    // 指针pa last指向LA表的最后一个元素
    pa last=LA.elem+LA.length-1;	
    // 指针pb last指向LB表的最后一个元素
    pb last=LB.elem+LB.length-1;	
    // 两个表都非空
    while(pa<=pa last && pb<=pb last){		
    // 依次“摘取”两表中值较小的结点
    if(*pa<=*pb)
        *pc++=*pa++;		
    else 
        *pc++=*pb++;
    }
    while(pa<=pa last) 
        // Lb表已到达表尾,将LA中剩余元素加入Lc
        *pc++=*pa++; 
    while(pb<=pb last) 
        //La表已到达表尾,将LB中剩余元素加入Lc
        *pc++=*pb++;
}//MergeList_Sq
算法时间复杂度:O(ListLength(La) + ListLength(Lb))
算法空间复杂度:O(ListLength(La) + ListLength(Lb))

你可能感兴趣的:(【数据结构与算法】王卓老师,学习,笔记)