数据结构--线性表2-1

目录

 一、线性结构的定义

二、线性表的表示

三、顺序表的实现(或操作)

1、修改:

2、插入:

四、顺序表的运算效率分析:时间效率分析:


 一、线性结构的定义

        若结构时非空有限集,则有且仅有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。可表示为:(a1,a2,a3,……,an)

1,2,3,……,n:下标,即元素的序号,表示元素在表中的位置。

n为元素总个数,即表长。n>=0当n=0时,称为 空表。

特点1、只有一个首结点和尾结点;

特点2、除首尾结点外,其它结点只有一个直接前驱和一个直接后继。

线性结构包括:线性表、堆栈、队列、字符串、数组等。其中最典型、最常用的是-----线性表。

注意:同一线性表中的元素必定具有相同特性!

二、线性表的表示

        线性表的顺序表示又称为顺序存储结构顺序映像

        顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

特点:逻辑上相邻的元素,物理上也相邻。

        顺序存储方法:用一组地址连续的存储单元一次存储线性表的元素。

例如,可以利用数组V[n]来实现。

注意:在C语言中数组的下标是从0开始的,即:V[n]的有效范围是从V[0]~V[n-1]。

三、顺序表的实现(或操作)

数据结构的基本操作:        修改、插入、删除、查找、排序

1、修改

通过数组的下标便可访问某个特定的元素并修改之。核心语句:V[i]=x;

显然,顺序表修改操作的时间效率是O(1)

2、插入

在线性表的第i个位置前插入一个元素

实现步骤:(1) 将第n至第i位的元素向后移动一个位置;

                  (2) 将要插入的元素写到第i个位置;

                  (3) 表长加1。

注意:事先应判断:插入位置i是都合法?表里是否已满?

应当符合条件:1<=i<=n+1      或 i = [1,n+1]

核心语句:

for(j=n;j>=1;j--)

        a[j+1]=a[j];

a[i]=x;

n++;

将上述插入与删除写完整:

 

#include <stdio.h>
#include <stdlib.h>
#define N 100
int arry[]={};int main()
{int num=0;int num1=0;int wei;printf("%d\n",arry[num]);printf("请输入数组元素:\n");while(arry[num]>=0){num=num1;scanf("%d",&arry[num]);num1++;}printf("输入完成!!!\n");for(int i=0;i<num;i++){printf("%d\t",arry[i]);}num1=0;
插入操作 num1为需要插入的数据wei,位置 printf("\n进行插入操作:\n");printf("请输入需要插入的位置:");scanf("%d",&wei);if(wei<0||wei>num){printf("位置输入错!!!");exit(0);	}else{printf("请输入需要插入的数值:");scanf("%d",&num1); for(int j=num;j>=wei;j--){arry[j+1]=arry[j];}num++;arry[wei]=num1;}printf("打印元素:\n");for(int i=0;i<num;i++)printf("%d\t",arry[i]);
///删除操作///wei需要删除的位置 printf("\n进行删除操作:\n");printf("请输入需要删除的数的位置:");scanf("%d",&wei);for(int j=wei;j<num;j++)arry[j]=arry[j+1];num--;printf("打印元素:\n");for(int i=0;i<num;i++)printf("%d\t",arry[i]);	return 0;
}

 

 

四、顺序表的运算效率分析:
时间效率分析:

算符时间主要耗费在移动元素的操作上,因此计算时间复杂度的基本操作(最深层语句频度)

T(n)= o (移动元素的次数)

而移动元素的个数取决于插入或删除元素的位置。

假如:若在长度为n的线性表的第i位前插入一个元素,则向后移动元素的次数f(n)为:
                                        f(n)= n-i+1;

若插入在尾结点之后,则根本无需移动(特别快)

若插入在首结点之前,则表中元素全部要后移(特别慢)

应当考虑各种未知插入(共n+1种可能)的平均次数才合理。

推导:假定在每个元素未知上插入x的可能性都一样。

若在首结点前插入,需要移动的元素最多,后移次数为n;

若在a(1)后面插入,则需要移动n-1个元素,后移次数为n-1;

……

若在a(n-1)后面插入,则需要移动1个元素,后移次数为1; 

若在a(n)后面插入,则需要移动0个元素,后移次数为0;

所有可能的元素移动次数合计:0+1+2+……+n-1+n = (n+0)(n+1)/2

共有n+1(连头带尾)种插入形式!!!

故插入时的平均移动次数为:n(n+1))/2 ÷(n+1)=n/2≈ O(n)   【n只跟次数有关与前面的系数无关】。

同理,推导出顺序表删除一元素的时间效率为:T(n)= (n-1)/2≈O(n)。

总结:对于顺序表,插入、删除操作平均需要移动一半元素(n/2),时间的复杂度为O(n)。由于在操作时,只需要提供辅助变量,因此空间复杂度为O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8 个线程池最佳实践和坑!使用不当直接生产事故!!

这篇文章我会简单总结一下我了解的使用线程池的时候应该注意的坑以及一些优秀的实践。拿来即用&#xff0c;美滋滋&#xff01; 1、正确声明线程池 线程池必须手动通过 ThreadPoolExecutor 的构造函数来声明&#xff0c;避免使用Executors 类创建线程池&#xff0c;会有 OOM …

基于深度学习淡水鱼体重智能识别模型研究

工作原理为&#xff1a;首先对大众淡水鱼图片进行数据清洗并做标签分类&#xff0c;之后基于残差网络ResNet50模型进行有监督的分类识别训练&#xff0c;获取识别模型。其次通过搭建回归模型设计出体重模型&#xff0c;对每一类淡水鱼分别拟合出对应的回归方程&#xff0c;将获…

Android OpenGL ES Camera2 实现实时抠图效果

前面文章人像抠图 + OpenGL ES 还能这样玩?没想到吧,我们介绍了利用人像抠图算法生成的 mask 图,然后结合 OpenGL 可以产生一些有趣的效果。 抠图技术应用很广泛,比如很多手机的相机自带“人像留色”滤镜:人体区域保留彩色,人体区域之外灰度化。所以人像留色的关键技术在…

【vue】Vue中解读关于this.$emit()的用法:

文章目录 一、Vue.sync修饰符与this.$emit(‘update:xxx‘, newXXX)二、this.$emit()传多个参数 一、Vue.sync修饰符与this.$emit(‘update:xxx‘, newXXX) 二、this.$emit()传多个参数

Qt Core学习日记——第八天QMetaObject(下)

QMetaObject::normalizedType 将名称规范化。 例如&#xff1a; QByteArray normType QMetaObject::normalizedType(" int const *"); // normType is now "const int*" QMetaObject::connect(const QObject *sender, int signal_index, const QObject…

Jmeter性能测试配置

Jmeter检查点/断言 在上一章节中&#xff0c;我们通过调试脚本&#xff0c;通过人工验证脚本可以完成业务功能&#xff0c; 但在性能测试中&#xff0c;我们希望能通过自动验证脚本是否完成业务功能&#xff0c;在Jmeter 中我们可以通过检查点&#xff0c;也就是断言来实现自动…

VR全景在酒店的发展状况如何?酒店该如何做营销?

现阶段&#xff0c;VR全景技术已经被酒店、民宿、旅游景区、房产楼盘、校园等行业所应用&#xff0c;每天都有不少人通过VR全景展示来了解酒店的设施环境&#xff0c;而酒店也可以借此机会&#xff0c;详细展示自身优势&#xff0c;更大范围吸引顾客。 VR酒店拥有真实、立体的全…

Git Gui相关术语

文章目录 Git Gui主界面相关术语- Amend Last Commit&#xff08;修正最后一次提交&#xff09;- Rescan&#xff08;重新扫描&#xff09;- Sign Off&#xff08;签名&#xff09;- Stage Changed Git Gui Commit菜单相关术语- Stage to Commit&#xff08;暂存到提交&#xf…

opencv hand openpose

使用opencv c 来调用caffemodel 使用opencv 得dnn 模块调用 caffemodel得程序&#xff0c;图片自己输入就行&#xff0c;不做过多得解释&#xff0c;看代码清单。 定义手指关节点 const int POSE_PAIRS[20][2] { {0,1}, {1,2}, {2,3}, {3,4}, // thumb {0,5}, {5,6}, {6,7}…

Pytest框架 之【用例执行顺序】

今天在使用pytest执行用例过程中&#xff0c;使用了debug调试代码时&#xff0c;偶然发现&#xff0c;执行用例时不是自上而下的&#xff0c;pytest 中的用例执行顺序与unittest 是不一样的&#xff0c;pytest有默认的执行顺序&#xff0c;还可以自定义执行顺序。而在unittest框…

Linux 学习记录58(ARM篇)

Linux 学习记录58(ARM篇) 本文目录 Linux 学习记录58(ARM篇)一、GIC相关寄存器1. 系统框图2. 中断号对应关系 二、GICD寄存器1. GICD_CTLR2. GICD_ISENABLERx3. GICD_IPRIORITYRx4. GICD_ITARGETSRx5. GICD_ICPENDRx 三、GICC寄存器1. GICC_PMR2. GICC_CTLR3. GICC_IAR4. GICC_…

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作&#xff0c;如ER图、数据流图、状态转换图、数据字典的书写等&#xff0c;对初学者来说比较生僻&#xff0c;本贴只介绍基础的轮廓&#xff0c;后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法&#xff1a;结构化的分析、设计、…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知&#xff0c;其主要通过 Ding…

Log4j源码解析

Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…

如何提高自动化测试覆盖率

实施自动化测试最重要的就是要保证其可用性&#xff0c;而不少同学写了不少自动化测试用例&#xff0c;但感觉到其可用性不高。究其原因&#xff0c;不是自动化测试本身的问题&#xff0c;是实施自动化测试的时候没有考虑周全。 第一&#xff0c;不合事宜地引入自动化测试 在公…

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!

ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具&#xff0c;采用拖拽式设计模式&#xff0c;不需任何服务器和组件支持&#xff0c;即可在 Mac、Linux 和 Windows 操作系统中&#xff0c;设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…

将Python远控隐藏在文档图片中的行动分析

1、概述 ** **近日&#xff0c;安天CERT通过网络安全监测发现了一起恶意文档释放Python编写的远控木马事件。通过文档内容中涉及的组织信息和其中攻击者设置的诱导提示&#xff0c;安天CERT判断该事件是一起针对阿塞拜疆共和国国家石油公司进行的定向攻击活动。此次事件中&…

13、ffmpeg使用nvidia显卡对OAK深度相机进行解码和编码

基本思想&#xff1a;简单使用nvidia的硬件解码进行oak相机的编码和解码学习 一、在本机rtx3060配置好显卡驱动和cuda之后进行下面操作50、ubuntu18.04&20.04CUDA11.1cudnn11.3TensorRT7.2/8.6Deepsteam5.1vulkan环境搭建和YOLO5部署_ubuntu18.04安装vulkan_sxj731533730的…

Redis 基础知识和核心概念解析:探索 Redis 的数据结构与存储方式

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Python-Go python模块与包 - GO问题 - GO容量测试

目录 go 模块与包复习&#xff08;Init函数 - go mod&#xff09; init函数有什么用&#xff1f;init函数是什么&#xff1f; go.mod文件是什么&#xff1f;有什么作用&#xff1f; python的模块与包 python中包的分类 1、内置模块&#xff1a;不需要安装&#xff0c;直接…