数据结构:递增排列的数组 union all 算法 2.1

简介: 递增排列的数组 union all 假设有2个线性表,递增排列的数组,如 char a[20]="abbcopqtuwz"; char b[20]="bcfgjmtv"; 我们需要实现一个union all,将两个字符串中的字符合并到 一个新的线性表c中,其中也是按照递增排列的。
递增排列的数组 union all
假设有2个线性表,递增排列的数组,如
char a[20]="abbcopqtuwz";
char b[20]="bcfgjmtv";
我们需要实现一个union all,将两个字符串中的字符合并到

一个新的线性表c中,其中也是按照递增排列的。
那么按照我们要求输出应该为
abbbccfgjmopqttuvwz


那么算法如下:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. #include <string.h>


  3. int main(void)
  4. {
  5.         char a[20]="abbcopqtuwz";
  6.         char b[20]="bcfgjmtv";

  7.         char c[30];
  8.         memset(c,0,30);

  9.         int n=0;
  10.         int m=0;
  11.         int h=0;

  12.         int a_len=strlen(a);
  13.         int b_len=strlen(b);

  14.         while(n<a_len && m<b_len)
  15.         {
  16.                 if(a[n]< b[m])
  17.                 {
  18.                         c[h]=a[n];
  19.                         n++;
  20.                 }
  21.                 else if(a[n]==b[m])
  22.                 {
  23.                         c[h]=a[n];
  24.                         n++;
  25.                 }
  26.                 else
  27.                 {
  28.                         c[h]=b[m];
  29.                         m++;
  30.                 }
  31.                 h++;
  32.         }

  33.         if(a[n] != 0)
  34.         {
  35.                 while(n<a_len)
  36.                 {
  37.                         c[h]=a[n];
  38.                         n++;
  39.                         h++;
  40.                 }
  41.         }

  42.         if(b[m] != 0 )
  43.         {
  44.                 while(m<b_len)
  45.                 {
  46.                         c[h]=b[m];
  47.                         m++;
  48.                         h++;
  49.                 }
  50.         }

  51.   
  52.         printf("%s\n",c);
  53. }



运行程序输出为:abbbccfgjmopqttuvwz
可以看到和预期一模一样。
分析这个算法的渐进时间复杂度,实际上我们发现他只是一个单循环,很明显我们原操作只是 c [ h ] = a [ n ] ;这样的复制
所以时间复杂度为:
T(n)=O(n)
但是这样的算法明显依赖于两个数组排序好了的情况
相关文章
|
3天前
|
存储 算法 Java
算法系列之数据结构-二叉树
树是一种重要的非线性数据结构,广泛应用于各种算法和应用中。本文介绍了树的基本概念、常见类型(如二叉树、满二叉树、完全二叉树、平衡二叉树、B树等)及其在Java中的实现。通过递归方法实现了二叉树的前序、中序、后序和层次遍历,并展示了具体的代码示例和运行结果。掌握树结构有助于提高编程能力,优化算法设计。
32 9
 算法系列之数据结构-二叉树
|
2天前
|
算法 Java
算法系列之数据结构-二叉搜索树
二叉查找树(Binary Search Tree,简称BST)是一种常用的数据结构,它能够高效地进行查找、插入和删除操作。二叉查找树的特点是,对于树中的每个节点,其左子树中的所有节点都小于该节点,而右子树中的所有节点都大于该节点。
43 22
|
3天前
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
20 7
|
1月前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》算法题基础篇—链表(下)
408考研——《数据结构》算法题基础篇之链表(下)。
88 29
|
1月前
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
99 25
|
1月前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
72 23
|
2月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
55 2
|
4月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
381 9
|
4月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
64 1
|
2月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
158 77