顺序表合并

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 顺序表合并
/*.已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值非递减有序的顺序表C。
要求:
从键盘输入顺序表A和B的各元素,编程实现上述算法,输出顺序表A、顺序表B和顺序表C 的所有元素值 。*/
//群:970353786
#include<stdio.h>
#include <stdlib.h>
#include<iomanip>
#include<iostream>
#pragma warning(disable:4996)
typedef int ElemType;
#define MAXSIZE 100
typedef struct shun
{
  ElemType data[MAXSIZE];
  int len;
}SqList;
void Mergelist_sq(SqList La, SqList Lb, SqList& Lc)//合并算法
{
  int i = 0, j = 0, k = 0;
  while (i < La.len && j < Lb.len)//当两个表都为扫描完的时候
  {
    if (La.data[i] < Lb.data[j])//如果表A的数据比表B的数据小
    {
      Lc.data[k] = La.data[i];  //把小的那个丢到C里面
      i++;//表A的位置也要+1,挪到下一个位置
      k++;//移动过去了,长度肯定+1
    }
    else if (La.data[i] > Lb.data[j])//同理
    {
      Lc.data[k] = Lb.data[j];
      j++;
      k++;
    }
    else//等于情况咯,两个都可以移动过去
    {
      Lc.data[k] = La.data[i]; i++; k++;
      Lc.data[k] = Lb.data[j]; j++; k++;
    }
  }//三次排序
  while (i < La.len)//如果前面几次的移动还没移动完A,剩下的再插到C中
  {
    Lc.data[k] = La.data[i]; i++; k++;//为什么i,k加一?同上
  }
  while (j < Lb.len)//同理
  {
    Lc.data[k] = Lb.data[j]; j++; k++;
  }
  Lc.len = k;// C顺序表合并后的实际长度
}
int main()//编写主函数,传入数据
{
  SqList sqa, sqb, sqc;//定义结构体变量
  int a, b;
  printf("请输入顺序表A的元素个数:");
  scanf_s("%d", &a);
  printf("请输入顺序表A的数据:");
  for (int i = 0; i < a; i++)//依次输入A数据
  {
    scanf_s("%d", &sqa.data[i]);
  }
  sqa.len = a;//A顺序表的长度
  printf("A顺序表的长度为:%d\n", sqa.len);
  printf("请输入顺序表B的元素个数:");
  scanf_s("%d", &b);
  printf("请输入顺序表B的数据:");
  for (int j = 0; j < b; j++)//依次输入B数据
  {
    scanf_s("%d", &sqb.data[j]);
  }
  sqb.len = b;//B顺序表的长度
  printf("B顺序表的长度为:%d", sqb.len);
  printf("\n");
  Mergelist_sq(sqa, sqb, sqc);//A,B的数据有了,调用函数把这两个表合并到空顺序表C中,C是空!!
  printf("A顺序表的元素为:");
  for (int i = 0; i < sqa.len; i++)
  {
    printf("%2d", sqa.data[i]);
  }
  printf("\n");
  printf("B顺序表的元素为:");
  for (int j = 0; j < sqb.len; j++)
  {
    printf("%2d", sqb.data[j]);
  }
  printf("\n");
  printf("C顺序表的元素为:");
  for (int n = 0; n < sqc.len; n++)
  {
    printf("%2d", sqc.data[n]);
  }
}
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
顺序表应用5:有序顺序表归并
顺序表应用5:有序顺序表归并
【剑指offer】-合并两个排序的链表-16/67
【剑指offer】-合并两个排序的链表-16/67
|
11月前
|
Linux C++
合并k个已排序的链表
合并k个已排序的链表
29 0
|
存储
顺序表oj--移除元素&&删除重复项&&合并两个有序数组
顺序表oj--移除元素&&删除重复项&&合并两个有序数组
|
C++
【C/C++练习】合并k个已排序的链表(一)
【C/C++练习】合并k个已排序的链表(一)
75 0
|
5月前
|
Python
leetcode-23:合并K个排序链表
leetcode-23:合并K个排序链表
37 0
|
5月前
|
存储 索引
两个非递减顺序表合并成一个非递减顺序表
两个非递减顺序表合并成一个非递减顺序表
65 0
|
C++
【C/C++练习】合并k个已排序的链表(二)
【C/C++练习】合并k个已排序的链表(二)
80 0
【C/C++练习】合并k个已排序的链表(二)
|
存储 前端开发 程序员
合并两个排序的链表
合并两个排序的链表
合并两个排序的链表