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

合并两个顺序表

时间:2022-09-24 11:14:35浏览次数:49  
标签:顺序 LB LC LA ++ 合并 length 两个 data

合并两个顺序表

已知有两个顺序表LA和LB(代码如下所示),并且两个表的储存的两个相邻元素,后者要大于或等于前者。合并这两个表。

LA,LB的初始化
#include <stdio.h>
#define MaxSize 100
typedef struct {
int data[MaxSize];
int length;
}Sqlist;

int main(){
Sqlist LA, LB;
LA.data[0] = 1;
LA.data[1] = 1;
LA.data[2] = 5;
LA.data[3] = 7;
LA.data[4] = 9;
LA.length = 5;

LB.data[0] = 1;
LB.data[1] = 4;
LB.data[2] = 4;
LB.data[3] = 5;
LB.length = 4;
   
   return 0;
}

 

1.创建表LC 在LC中和并LA和LB。

1.1算法思想

  设表LC为一个空表,分别用两个指示器i,j指向LA和LB中的元素,如果LA.data[i]>=LB.data[j],就将LB.data[j]插入LC中,反之

就把LA.data[i]插入LC中。如果LA,LB中有一个表全部插入LC中 ,但另外一个表还有剩余,直接将剩余的部分直接插入LC中

1.2算法设计

void mergeList(Sqlist LA,Sqlist LB,Sqlist &LC) 
/*从下标为零开始比较LA,LB中元素的大小,小的先赋值给LC*/
{
int i, j,k;//分别记录表LA,LB,LC中数据的下标。
i = 0; j = 0; k = 0;
while (i <= LA.length - 1 && j <= LB.length - 1)
{
if (LA.data[i] >= LB.data[j])
{
LC.data[k] = LB.data[j];
j++;
}
else
{
LC.data[k] = LA.data[i];
i++;
}
k++;
}

while (i <= LA.length-1)
/*已经将LB表中的所有值都赋值给 LC 但LA中还有剩余*/
{
LC.data[k] = LA.data[i];
k++;
i++;
}

while (j <= LB.length-1)
/*已经将LA表中的所有值都赋值给 LC 但LB中还有剩余*/
{
LC.data[k] = LB.data[j];
k++;
j++;
}

LC.length = LA.length + LB.length;
}

2.在表LB中插入LA的各个元素

2.1算法思想

  分别用两个指示器i,j指向LA和LB中的元素,如果LA.data[i]<=LB.data[j],就将LA.data[i]插入到LB.data[j]之前,反之就比较

LA.data[i+1]和LB.data[j]。如果LA从i个元素开始,后面每个元素都大于LB的最后一个元素,直接将LA剩余的部分直接插入LB的后面。

2.2算法设计

int  InsList(Sqlist& L, int i, int e)
/*插入函数*/
{
int k;
for (k = L.length; k >= i; k--)   /*为插入元素而移动位置*/
L.data[k + 1] = L.data[k];
L.data[i] = e;
L.length++;//LB表长+1
return true;
}


void merge(Sqlist LA, Sqlist& LB)
{
int i, j;
for (i = 0, j = 0; i < LA.length; j++)
{
if (LA.data[i] <= LB.data[j])
{
InsList(LB, j, LA.data[i]);//调用函数InsLIst 将LA.data[i]插入到LB.data[j]前
i++;
}
if (j == LB.length - 1)
{
//从LA.data[i]开始之后 LA每个元素都大于LB表的最后一个元素
for (; i < LA.length; i++, j++)
{
LB.length++;//LB表长+1
LB.data[j + 1] = LA.data[i];   //将LA从LA.data[i]开始每个元素都依次插入LB表的最后面
}
break;//结束最外层循环
}
}
}

标签:顺序,LB,LC,LA,++,合并,length,两个,data
From: https://www.cnblogs.com/wlb429/p/16725151.html

相关文章

  • Vue父子组件生命周期触发顺序是怎样的?
    挂载阶段父beforecreated->父created->父beforemounted->子beforecreated->子created->子beforemounted->子mounted->父mounted更新阶段父beforeUpdate->子beforeUpda......
  • 88. 合并两个有序数组
    题目给你两个按非递减顺序排列的整数数组 nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同......
  • 比较两个list
    List<string>list1=newList<string>(){"4ee","wf","6yh","gg","wjjgf","vvc"};List<string>list2=newList<string>(){"p4ee","wpf"......
  • m3u8文件后缀jpg,png等处理方法及视频合并
    处理#解析伪装成png的tsdefresolve_ts(src_path,dst_path):'''如果m3u8返回的ts文件地址为https://p1.eckwai.com/ufile/adsocial/7ead0935-dd4f-4d2......
  • 前端合并单元格
     <!--合并单元格场景:将水平或垂直多个单元格合并成一个单元格1.明确合并哪几个单元格2.通过左上原则,确定保留谁删除谁上下合并-只保留最上的,删除其他左右合并-只......
  • Excel合并多个Excel工作簿
    Excel(powerquery)汇总多个Excel工作簿材料背景:多个Excel文件的表名(即字段)需要相同,如不相同,则会部分数据缺失需要被汇总的Excel文件放在同一个文件夹中,不需要放其他......
  • JAVA基础Day3-用户交互Scanner/顺序结构/选择结构/循环结构
    一、用户交互ScannerJAVA提供了一个工具类,可以用来获取用户的输入。java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入。基本语法:Scanners=new......
  • 力扣21(java&python)-合并两个有序链表(简单)
    题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。  示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1......
  • BM42 用两个栈实现队列
    描述用两个栈来实现一个队列,使用n个元素来完成n次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。队列中的元素为int类型。保证操作合法,即保证pop操......
  • Vue 的父组件和子组件生命周期钩子函数执行顺序?
    Vue的父组件和子组件生命周期钩子函数执行顺序可以归类为以下4部分:加载渲染过程父beforeCreate->父created->父beforeMount->子beforeCreate->子crea......