当前位置: 首页 > news >正文

数据结构每日一题day9(顺序表)★★★★★

题目描述:将两个有序顺序表A和B合并为一个新的有序顺表返回 true,合并失败则返回 false。

算法思想:

输入检查:若A、B或C为空指针,或合并后总长度超过顺序表最大容量,返回false。

双指针遍历:使用两个指针分别遍历A和B,比较当前元素大小,将较小者插入C,直至其中一个表遍历完毕。

剩余元素处理:将未遍历完的表中剩余元素全部追加到C中。

更新表长:设置C的length为合并后总长度,返回true。

复杂度分析:

时间复杂度:O(m+n),其中m、n为A、B的长度,需遍历所有元素。
空间复杂度:O(1),仅需常数级辅助变量。

代码实现:

#include <stdbool.h>
#define MAXSIZE 100  // 假设顺序表最大容量

typedef struct {
    int data[MAXSIZE];
    int length;
} SeqList;

bool Merge(SeqList *A, SeqList *B, SeqList *C) {
    // 检查空指针或合并后长度超限
    if (A == NULL || B == NULL || C == NULL || 
        (A->length + B->length) > MAXSIZE) {
        return false;
    }

    int i = 0, j = 0, k = 0;  // i遍历A,j遍历B,k填充C
    // 双指针遍历,按序插入较小元素
    while (i < A->length && j < B->length) {
        if (A->data[i] <= B->data[j]) {
            C->data[k++] = A->data[i++];
        } else {
            C->data[k++] = B->data[j++];
        }
    }

    // 处理A或B的剩余元素
    while (i < A->length) {
        C->data[k++] = A->data[i++];
    }
    while (j < B->length) {
        C->data[k++] = B->data[j++];
    }

    C->length = k;  // 更新C的实际长度
    return true;
}

相关文章:

  • Thrust库中,host_vector和device_vector数据之间如何高效传输,有异步传输方式吗?
  • Linux 企业项目服务器组建(附脚本)
  • C++学习笔记(三十二)——priority_queue
  • Java基础 4.1
  • OpenLayers:海量图形渲染之矢量切片
  • 07-01-自考数据结构(20331)- 排序-内部排序知识点
  • 【14】Selenium的基本使用
  • 一道积分_4
  • DJI上云API使用与配置
  • spring打包,打包错误
  • 供应链管理-经济指数:GDP、GNP、NNP、NDP、PPI、CPI、DPI...
  • WordPress汉主题
  • 二、基本应用工具
  • 云原生周刊:Kubernetes v1.33 要来了
  • 针对单台浪潮服务器运行Windows Server 2019和SQL Server的MES系统场景、高效能监控策略(兼顾软硬件健康)
  • golang 的channel
  • 函数类型声明
  • 大模型-提示词(Prompt)技巧
  • 大模型AI Agent的工作原理与安全挑战
  • Android 中集成 Google 应用内评分
  • 日本航空自卫队一架练习机在爱知县坠毁
  • 远如《月球背面》,近似你我内心
  • 中国至越南河内国际道路运输线路正式开通
  • 通化市委书记孙简升任吉林省副省长
  • 线下哪些商家支持无理由退货?查询方法公布
  • 干部任职公示:陕西宁强、镇安两县县长拟进一步使用