有序顺序表的插入

2023-11-19

下面看问题场景


 如图是一个有序表,有序表是用数组承载的,然后我想把 元素 8插入到有序表 ,

怎么实现呢?

下面开始用人脑模拟?

要把 8 插入到有序表 ,先从有序表的第一个元素和8进行比较 ,依次看到了7 ,下一个元素9大于8,停止遍历,

我们就把 8 插入到7和 9 之间,但是没有空位了,所以先把15往后移动一格 ,9也向后移动一格,然后把空位腾出来, 把8 插入到有序表标号为3 的位置.

这样一个有序表的插入就完成了.

下面构造有序表插入的成员方法:

传入 有序表 , 传入要插入的元素

void ListInsert(SqList *&L, ElemType e){

int i =0 ;       //从有序表的0号元素开始遍历

int  j;           //从有序表的末位元素开始往后腾位置,直到把要插入的元素的位置腾出来

开启循环,遍历,先找到一个区间, 插入元素比前一个元素大,比后一个元素小, 后一个元素需要向后移动.

while( i < L->length  &&  L->data[i] < e)

{

        i++;                //当 标号为 i 的元素 ,大于等于插入元素的时候,就会跳出循环,我们此时的 i 的标号是新元素插入的位置,下面我们需要为插入元素腾位置

}

for(j = ListLength(L); j>i; j--)

{

        L->data[j] = L ->data[j-1];

}

这可能不容易理解,我们要把末尾元素 往后移动一位,直到把标号为 i 的位置腾出来给新插入的元素,  所以要先把末尾元素往后移动,

末尾元素的位序是 ,表元素个数减去 1 ,               L-> data[j-1]

然后移动到 ,位序加一的位置                                 L->data[j]  


那何时移动到呢? 最后一个元素就是 位序为 i 的元素, 往后移动一位 ,

也就是

L->data[ i+1 ]  = L->data [ i ] ;

所以当  j-1 = i 的时候,即 j = i +1 执行完这一步, 就要退出了

因为 j每次都是 j-- ,所以 , j != i  ,顶多执行到 j 比 i 大一这一步就结束了,

所以循环结束的条件 , 是 j != i ,或者 j> i 都可以,   j 一旦等于 i  ,就跳出循环,不参加运算,

 接下来 , 位置也腾出来了,把 新插入的元素给 i 就行了

列表长度自然加一

L -> data[i] = e;
L -> length++;

}

这样我们就完成了插入操作,下面是完整代码:

void ListInsert(SqList *&L, ElemType e)
{
	int i= 0,j;
	while(i<L->length && L->data[i]<e)
	{
		i++;
	}
	for(j = ListLength(L); j>i ; j--)
	{
		L->data[j] = L->data[j-1];
	}
	L ->data[i] = e;
	L ->length++;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有序顺序表的插入 的相关文章

随机推荐

  • Linux常用命令之文件管理命令

    目录 1 ls 2 gt 输入 输出重定向和 管道命令 3 chmod命令 4 cd命令 5 mkdir和rmdir命令 6 cp命令 7 rm命令 8 mv命令 9 cat命令 10 pwd命令 11 ln命令 12 grep命令 13
  • http协议学习系列

    1 基础概念篇 1 1 介绍 HTTP是Hyper Text Transfer Protocol 超文本传输协议 的缩写 它的发展是万维网协会 World Wide Web Consortium 和Internet工作小组IETF Inte
  • 数据集加载--load_digits

    目录 主要参数 n class return X y as frame 返回值 return X y True return X y False Bunch对象的属性 data target feature names list targe
  • 100天精通Python(爬虫篇)——第47天:selenium自动化操作浏览器(基础+代码实战)

    文章目录 一 Selenium框架环境搭建 1 下载模块 2 安装浏览器驱动WebDriver 二 基础操作 1 打开浏览器 2 无界面模式 3 元素定位 4 元素操作 5 前进后退 6 执行js 7 页面等待 隐式等待 常用 显式等待 了
  • SPI、I2C、UART、CAN

    一 简介 1 SPI SPI Serial Peripheral Interface 串行外设接口 是Motorola公司提出的一种同步串行数据传输标准 在很多器件中被广泛应用 接口 SPI接口经常被称为4线串行总线 以主 从方式工作 数据
  • Go内存管理及性能观测工具

    内存管理 TCMalloc Golang内存分配算法主要源自Google的TCMalloc算法 TCMalloc将内存分成三层最外层Thread Cache 中间层Central Cache 最里层Page Heap Thread Cach
  • 利用hbase api在本地访问并操作服务器的hbase数据库

    最近因为实验室项目需要 开始研究了hbase 然后想一次性往集群服务器上写入大量的数据 并存到hbase中 考虑到在hbase shell下只能单个数据put 这样对于批量插入数据的要求完全不合适 于是就研究起hbase的java api
  • 只要 3 个注解,优雅的实现微服务鉴权!

    原创 不才陈某 码猿技术专栏 2023 04 17 08 50 发表于山东 大家好 我是不才陈某 前面的文章中介绍了网关集成Spring Security实现网关层面的统一的认证鉴权 有不清楚的可以看之前的文章 实战干货 Spring Cl
  • Java面向对象编程(建议收藏)

    面向对象编程是一种方法 被广泛引用与Java中 接下来我将从 包 继承 组合 多态 抽象类和接口这几个方面进行全面的讲解 一 包 包是组织类的一种方式 包从直观上看就是一个文件夹 jar包中包含的都是字节码文件 包一般分为导入默认包 静态导
  • obs 之 OBSObj

    从实例学习c 之 1 内联构造 虚构2 移动构造 移动赋值3 禁用拷贝构造和赋值4 该类虚构不为 virtual 5 使用实例 using OBSDisplay OBSObj
  • 【一键卸载mysql-5.7.38数据库+dos命令bat脚本】

    一键彻底卸载mysql 5 7 38数据库 echo off color 0e echo Start Delete MySQL Process echo Author LSJ echo echo 删除注册表开始 Regedit echo r
  • smali语法及参考说明

    smali语法可以参考官方说明 因为google服务器经常无法访问 这里把重要点摘抄出来 文章挺浅显的 就不翻译了 TypesMethodsAndFields Some general information about how types
  • 计算机数据的存储-编码(补码,移码)

    在计算机系统中 补码是最重要的编码 数值一律用补码来表示 存储 主要原因 使用补码 可以将符号位和其它位统一处理 同时 减法也可按加法来处理 另外 两个用补 码表示的数相加时 如果最高位 符号位 有进位 则进位被舍弃 2 补码与原码的转换过
  • Hive order by,sort by,distribute by,cluster by 区别

    假设有一个表a 结构如下 par id c 3 c 7 b 8 b 6 a 1 a 4 a 5 c 9 a 10 b 2 order by 全排序 只会启动一个reduce执行任务 select from a order by id 在hd
  • 【C++】怎么接受未知数量的参数?

    2023年9月8日 周五下午 目录 第一种方式 可变参数函数 Variadic Function 头文件 使用方法 详解va start宏 详解va arg宏 示例程序 第一种方式 可变参数函数 Variadic Function 可变参数
  • 第2讲 Hi3861的WiFi实验-Station模式

    引言 在本文中 带大家编写一个程序 测试Hi3861的WiFi Station模式 进一步熟悉相关API的使用 请先按照本专栏第一讲中的第四部分准备好实验环境 一 编写程序 首先 打开 DevEco Device Tool 在鸿蒙项目 hi
  • Mysql JDBC Driver参数配置

    1 建立连接配置 1 user 连接的用户 默认值 无 2 Password 连接时使用的密码 默认值 无 3 socketFactory 驱动程序用于创建与服务器套接字连接的类的名称 该类必须实现了接口 com mysql jdbc So
  • 问题解决:io.lettuce.core.RedisCommandTimeoutException: Command timed out after

    环境 spring boot starter 2 x 和 sprig data starter data redis 2 x 在使用 connection bRPop timeout rawKey 方法时 如果这里的timeout大于spr
  • 飞桨AI Studio(星河社区)推出文心大模型的SDK功能

    随着大模型的涌现 我们喜悦于其远远超越小模型的性能 但又不得不面临大模型开发难的困境 训练难 微调难 部署难 开发者难以将其投入实际生产 不仅面临资源的限制 更面临高精数据难寻 时间成本过高等问题 为了让平台更多开发者可以进行大模型开发 体
  • 有序顺序表的插入

    下面看问题场景 如图是一个有序表 有序表是用数组承载的 然后我想把 元素 8插入到有序表 怎么实现呢 下面开始用人脑模拟 要把 8 插入到有序表 先从有序表的第一个元素和8进行比较 依次看到了7 下一个元素9大于8 停止遍历 我们就把 8