C语言顺序表,合并并排序(代码注释讲解)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: C语言顺序表,合并并排序(代码注释讲解)
/*.已知有两个按元素值递增有序的顺序表A和B,设计一个算法将表A和表B的全部元素归并为一个按元素值非递减有序的顺序表C。
要求:
从键盘输入顺序表A和B的各元素,编程实现上述算法,输出顺序表A、顺序表B和顺序表C 的所有元素值 。*/
#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("%d", sqa.data[i]);
    }
    printf("\n");
    printf("B顺序表的元素为:");
    for (int j = 0; j <sqb.len; j++)
    {
      printf("%d", sqb.data[j]);
    }
    printf("\n");
    printf("C顺序表的元素为:");
    for (int n = 0; n < sqc.len; n++)
    {
      printf("%d", sqc.data[n]);
    } 
}

有兴趣一起学习欢迎加群:

970353786
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
220 4
|
10月前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
本任务要求从键盘输入三个数,并按从小到大的顺序排序后输出。主要内容包括: - **任务描述**:实现三个数的排序并输出。 - **编程要求**:根据提示在编辑器中补充代码。 - **相关知识**: - 选择结构(if、if-else、switch) - 主要语句类型(条件语句) - 比较操作与交换操作 - **测试说明**:提供两组测试数据及预期输出。 - **通关代码**:完整代码示例。 - **测试结果**:展示测试通过的结果。 通过本任务,你将掌握基本的选择结构和排序算法的应用。祝你成功!
179 4
|
11月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
12月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
414 1
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
412 7
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
540 8
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
357 3
|
算法 C语言
【C语言】排序查找
【C语言】排序查找
|
C语言
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
105 0
深入C语言指针,使代码更加灵活(三)