首页 > 其他分享 >合并顺序表

合并顺序表

时间:2023-09-09 10:34:58浏览次数:36  
标签:顺序 last LC LA ++ 合并 element LB

例2.3

有两个顺序表LA和LB,其元素均为非递减有序排列,编写算法,将它们合并成一个顺序表LC,要求LC也是非递减有序排列。
例如,LA=(2,2,3),LB=(1,3,3,4),则LC=(1,2,2,3,3,3,4)。

【算法思想】设表LC是一个空表,为使LC也是非递减有序排列,可设两个指针i、j分别指向表LA和LB中的元素,若LA.elem[i]>LB.elem[j],则当前先将LB.elem[j]插入到表LC
中,若LA.elem[i]≤LB.elem[j],则当前先将LA.elem[]插入到表LC中,如此进行下去,直到其中一个表被扫描完毕,然后再将未扫描完的表中剩余的所有元素放到表LC中。

我的代码:

#include <stdio.h>
#define MAX 100
typedef struct
{
    int element[MAX];
    int last;
} SeqList;

void initSeqList(SeqList *list)
{
    list->last = -1;
}

void insertList(SeqList *list, int value)
{
    if (list->last <= MAX - 1)
    {
        list->last++;
        list->element[list->last] = value;
    }
    else
        printf("顺序表已满,无法继续存储");
}

void printList(SeqList list)
{
    if (list.last == -1)
        printf("顺序表为空");
    else
    {
        printf("该表元素为:");
        for (int i = 0; i <= list.last; i++)
            printf("%d ", list.element[i]);
    }
}

void mergeList(SeqList LA, SeqList LB, SeqList *LC)
{
    int j = 0, k = 0;
    LC->last = LA.last + LB.last + 1;
    for (int i = 0; i <= LC->last; i++)
    {   
        
        if (LA.element[j] < LB.element[k])
            LC->element[i] = LA.element[j++];
        else
            LC->element[i] = LB.element[k++];
    }
}

int main()
{
    SeqList LA, LB, LC;
    initSeqList(&LA);
    initSeqList(&LB);
    initSeqList(&LC);
    insertList(&LA, 2);
    insertList(&LA, 2);
    insertList(&LA, 3);
    insertList(&LB, 1);
    insertList(&LB, 3);
    insertList(&LB, 3);
    insertList(&LB, 4);
    mergeList(LA, LB, &LC);
    printList(LC);
    return 0;
}

结果错误:

原因:

未考虑到当某个顺序表被遍历完之后,之后存取的随机数依旧小于另一个顺序表的情况。
增加判断:

void mergeList(SeqList LA, SeqList LB, SeqList *LC)
{
    int j = 0, k = 0;
    LC->last = LA.last + LB.last + 1;
    for (int i = 0; i <= LC->last; i++)
    {

        if (j <= LA.last && k <= LB.last)
        {
            if (LA.element[j] < LB.element[k])
                LC->element[i] = LA.element[j++];
            else
                LC->element[i] = LB.element[k++];
        }

        else
        {
            if (j <= LA.last)
                LC->element[i] = LA.element[j++];
            else
                LC->element[i] = LB.element[k++];
        }
    }
}

总结:

1.这里比较关键的一点是理解LC->last = LA.last + LB.last + 1;

可以理解为在LA顺序表的基础上加上了LB元素的个数,元素个数=下标+1

2.注意这里你设置的是MAX 100,所以实际上你定义这些数组时,这些对应的存储空间都存上了随机数

而不是说只有你自己存进去的数,所以要限制遍历顺序表元素的个数

标签:顺序,last,LC,LA,++,合并,element,LB
From: https://www.cnblogs.com/trmbh12/p/17688989.html

相关文章

  • HTML5表格标签和单元格合并
    表格标签<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=,initial-scale=1.0"><title>Document</title></head&g......
  • 并行编程(二)Julia中的顺序和异步编程
    概述这节课的主要目标是开始使用Julia编程,实现并行算法,本次课程中,特别关注语言的部分(函数式和异步编程)。 学习目标运行Julia代码安装Julia软件包编写连续的Julia代码使用Julia的函数式编程功能使用Julia的异步编程功能 WhyJulia?与高性能计算相关的课程通常使用C、C......
  • linux 中 awk命令实现文件按列精确匹配合并
     001、[root@pc1test01]#cata.txtA:10B:5C:12[root@pc1test01]#catb.txt100A50B88K99Y42C[root@pc1test01]#awk'{if(NR==FNR){ay[$1]=$2}else{print$2,$1,ay[$2]}}'FS=":"a.txtFS=""b.txtA10010......
  • 单词搜索 II(字典树、数组)、合并两个有序数组(数组、双指针)、验证回文串(双指针、字
    单词搜索II(字典树、数组)给定一个mxn二维字符网格board****和一个单词(字符串)列表words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一......
  • linux中实现去重复且保持原来的顺序
     001、去重复保持原来的顺序[root@pc1test01]#lsa.txt[root@pc1test01]#cata.txt##测试数据125533774[root@pc1test01]#awk'ay[$0]++'a.txt##输出重复项,且保持原来的顺序537[root@pc1test01]#awk'!ay[$0]++'a.txt##去除......
  • element-ui合并单元格
    当你需要在Vue.js中创建一个表格并实现单元格合并功能时,可以使用以下代码作为参考。这个示例假设你已经有一个包含表格数据的data数组和一个字段名数组fieldNameArray,用于确定哪些字段需要合并。<template><div><el-table:data="data"style="width:100%"><!--需......
  • Qt图形视图框架事件传递顺序
     全文链接:http://www.fearlazy.com/index.php/post/111.html Qt为我们提供的图形视图框架真的是非常好用,它通过分解出视图、场景和图元降低了我们绘制图形的难度。它提供了强大图元控制能力,如快速查找图元、检测图元位置、检测图元碰撞等。除此以外图形视图框架还有一个很强大......
  • SourceTree 解决 git 合并冲突
    本文主要根据以下两个场景,介绍SourceTree解决冲突的三种情形本地分支代码合入test、beta分支拉取master代码分支合入本地分支,1、使用他人版本解决冲突(拉取master代码合入本地分支)使用他人版本解决冲突,会自动将当前分支对应文档更改成他人文档内容,此时该文档从未暂存文件......
  • pandas-数据合并和拆分
    pandas-数据合并和拆分目录pandas-数据合并和拆分数据拆分拆分行拆分列按条件拆分数据合并appendmergeconcatjoin参考资料数据集拆分是将一个大型的数据集拆分为多个较小的数据集,可以让数据更加清晰易懂,也方便对单个数据集进行分析和处理。同时,分开的数据集也可以分别应用不同......
  • 如何用小红书掌握护肤品正确使用顺序?
    嘿,亲爱的小红书探索者们!今天我要和你们分享一些关于护肤品正确使用顺序的小技巧。我们都知道在护肤过程中,选择合适的产品是非常重要的,但同样重要的是使用它们的正确顺序。通过掌握正确的使用顺序,你可以最大限度地发挥每种产品的功效,使你的肌肤焕发出自然光彩。快来跟我一起学习......