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

【考研数据结构知识点详解及整理——C语言描述】第二章 线性表顺序存储结构上的基本操作——顺序表的插入操作

25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!

目录

一.插入操作

1.算法思想

2.算法描述

3.算法分析


一.插入操作

顺序表的插入运算是指在表的第i(1≤i≤n+1)个位置插入一个新元素e,使长度为n的顺序表(e_{1},…,e_{i-1}e_{i},…,e_{n})变成长度为n+1的顺序表(e_{1},…,e_{i-1},e,e_{i},…,e_{n})(其中n为L的表长度)。 

1.算法思想

用顺序表作为线性表的存储结构时,由于结点的物理顺微视频 2-2序必须和结点的逻辑顺序保持一致,因此必须将原表中位置n,n-1,…,i上顺序表插入的结点,依次后移到位置n+1,n,…,i+1上,空出第i个位置,然后在该位置插入新结点e。当i=n+1时,是指在顺序表的末尾插人结点,所以无须移动结点,直接将e插人表的末尾即可。

2.算法描述

#define OK 1
#define ERROR O
int InsList( SeqList * L,int i,ElemType e)
/*在顺序表L中第i个数据元素之前插入一个元素e,i的合法取值范围是1≤i≤L->last+2*/
{int k;if((i<1)||(i>L->last+2))  /*首先判断插入位置是否合法*/{printf("插人位置i值不合法");return(ERROR);}if(L->last>=MAXSIZE-1){printf("表已满,无法插人");return(ERROR);}for(k=L->last;k>=i-1;k--) /*为插入元素而移动位置,i-1为最后一个元素移动的下标*/L->elem[k+1]=L->elem[k]; //插入位置及之后的元素后移动L->elem[i-1]=e; //在c语言数组中,第i个元素的下标为i-1,将新元素e放入第i个元素L->last++; //表长增1return(OK);
}

3.算法分析

最好情况:当在表尾(i=L->last+2)插人元素时,因为循环的终值大于初值,此时不需要移动元素,可直接在表尾插人e,元素后移语句将不执行,时间复杂度为O(1)。

最坏情况:在表头(i=1)插入元素时,移动元素的语句L->elem[k+1]=L->elem[k]需执行n次,即将表中已存在的n个元素依次后移一个位置才能将e插入,时间复杂度为O(n)。因此,语句L->elem[k+1]=L->elem[k]的语句执行频度与插入位置i有关。

平均情况:E_{ins}为在长度为n的表中插入一个元素所需移动元素的平均次数,假设P_{i}为在第i个元素之前插入元素的概率,并假设在任何位置上插人的概率相等,P_{i }=1/(n+1),i=1,2,n+1,则有

因此,顺序表的插入算法的平均时间复杂度为O(n) 

相关文章:

  • 【ZZULI数据结构实验四】:C语言排序算法大比拼
  • 计算机网络期末知识总结(第一章)
  • Kylin入门教程介绍
  • 雪花算法详解及源码分析
  • 爬虫面试手册
  • HTML基本元素包含HTML表单验证
  • 自友科技破解走班教育排课难题
  • 尚品汇项目
  • c++与c
  • 云原生和“可移植性”到底意味着什么
  • @vue-office/excel 解决移动端预览excel文件触发软键盘
  • docker命令 docker ps -l 命令在 Docker 中用于列出最近一次创建的容器
  • Vue3生命周期
  • 【深度学习】温故而知新4-手写体识别-多层感知机+CNN网络-完整代码-可运行
  • 没有知网资源如何快速下载知网论文
  • 「译」Node.js Streams 基础
  • canvas 高仿 Apple Watch 表盘
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • jquery cookie
  • k8s如何管理Pod
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • node和express搭建代理服务器(源码)
  • Octave 入门
  • Python - 闭包Closure
  • react-native 安卓真机环境搭建
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 解决iview多表头动态更改列元素发生的错误
  • 警报:线上事故之CountDownLatch的威力
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • #QT(串口助手-界面)
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (AngularJS)Angular 控制器之间通信初探
  • (Java数据结构)ArrayList
  • (八)Flask之app.route装饰器函数的参数
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (六)Flink 窗口计算
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (正则)提取页面里的img标签
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .gitignore文件---让git自动忽略指定文件
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core 项目指定SDK版本
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net mvc部分视图
  • .NET 设计模式—简单工厂(Simple Factory Pattern)