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

【C语言-数据结构】顺序表的基本操作

顺序表的基本操作

【建议:如果对结构体还不太理解的话可以先看 C语言-结构体 这篇文章】

插入操作

ListInsert(&L,i,e):插入操作,在表 L 中的第 i 个位置上插入指定元素 e

代码实现

#include <stdio.h>
#include <stdbool.h>
#define MaxSize 10typedef struct{int data[MaxSize];int length;
}SqList;void InitList(SqList* L){L->length = 0;
}bool ListInsert(SqList* L, int i, int e){if(i<1 || i>length+1){return false;}if(L->length >= MaxSize){return false;}for(int j = L.length; j >= i; j--){		//将第i个元素及之后的元素后移L->data[j] = L->data[j-1];}L->data[i-1] = e;L->length++;return true;
}int main(){SqList L;InitList(&L);//...向顺序表中插入一些元素...ListInsert(&L,3,3);return 0;
}

时间复杂度分析

  • 最好情况:新元素插入到表尾,不需要移动元素
    i = n+1,循环 0 次 ➡️ 最好时间复杂度 = O(1)
  • 最坏情况:新元素插入到表头,需要将原有的 n 个元素全都向后移动
    i = 1,循环 n 次 ➡️ 最坏时间复杂度 = O(n)
  • 平均情况:假设新元素插入到任何一个位置的概率相同,即 i = 1,2,3,…,length+1 的概率都是 p = 1 n + 1 p=\frac{1}{n+1} p=n+11
    i = 1 时,循环 n 次;i = 2 时,循环 n-1 次,…… ,i = n+1 时,循环 0 次
    平均循环次数 = np + (n-1)p + …… + 1·p = n ( n + 1 ) 2 1 n + 1 \frac{n(n+1)}{2}\frac{1}{n+1} 2n(n+1)n+11 = n 2 \frac{n}{2} 2n ➡️ 平均时间复杂度 = O(n)

删除操作

ListDelete(&L,i,&e)删除操作,删除表 L 中第 i 个位置的元素,并用 e 返回删除元素的值

代码实现

#include <stdio.h>
#include <stdbool.h>
#define MaxSize 10typedef struct{int data[MaxSize];int length;
}SqList;void InitList(SqList* L){L->length = 0;
}bool ListDelete(SqList* L, int i, int* e){if(i<1 || i>L->length){return false;}e = L->data[i-1];for(int j = i; j < L; j++){L->data[j-1] = L->data[j];}L->length--;return true;
}int main(){SqList L;InitList(&L);//...向顺序表中插入一些元素...int e = -1;if(ListDelete(&L, 3, &e)){printf("已删除第3个元素,删除元素值为%d\n",e);}else{printf("位序i不合法,删除失败\n");}return 0;
}

时间复杂度分析

  • 最好情况:删除表尾元素,不需要移动元素
    i = n,循环 0 次 ➡️ 最好时间复杂度 = O(1)
  • 最坏情况:删除表头元素,需要将后续的 n-1 个元素全都向前移动
    i = 1,循环 n-1 次 ➡️ 最坏时间复杂度 = O(n)
  • 平均情况:假设删除任何一个元素的概率相同,即 i = 1,2,3,…,length 的概率都是 p = 1 n p=\frac{1}{n} p=n1
    i = 1 时,循环 n-1 次;i = 2 时,循环 n-2 次,…… ,i = n 时,循环 0 次
    平均循环次数 = (n-1)p + …… + 1·p = n ( n − 1 ) 2 1 n \frac{n(n-1)}{2}\frac{1}{n} 2n(n1)n1 = n − 1 2 \frac{n-1}{2} 2n1 ➡️ 平均时间复杂度 = O(n)

按位查找操作

GetElem(L,i)按位查找操作,获取表 L 中第 i 个位置的元素的值

代码实现

ElemType GetElem(SqList* L, int i){return L->data[i-1];
}

时间复杂度:O(1)

按值查找操作

LocateElem(L,e)按值查找操作,在表 L 中查找具有给定关键字值的元素

代码实现

//在顺序表L中查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SqList* L, int e){for(int i = 0; i < L.length; i++){if(L->data[i] == e){return i+1;}}return 0;
}

时间复杂度分析

  • 最好情况:目标元素在表头
    循环 1 次 ➡️ 最好时间复杂度 = O(1)
  • 最坏情况:目标元素在表尾
    循环 n 次 ➡️ 最坏时间复杂度 = O(n)
  • 平均情况:假设目标元素出现在任意一个位置的概率相同,即都是 p = 1 n p=\frac{1}{n} p=n1
    平均循环次数 = n + 1 2 \frac{n+1}{2} 2n+1 ➡️ 平均时间复杂度 = O(n)

本文主要参考《王道计算机考研 数据结构》课程视频

相关文章:

【C语言-数据结构】顺序表的基本操作

顺序表的基本操作 【建议&#xff1a;如果对结构体还不太理解的话可以先看 C语言-结构体 这篇文章】 插入操作 ListInsert(&L,i,e)&#xff1a;插入操作&#xff0c;在表 L 中的第 i 个位置上插入指定元素 e 代码实现 #include <stdio.h> #include <stdbool.…...

使用Renesas R7FA8D1BH (Cortex®-M85)实现多功能UI

目录 概述 1 系统框架介绍 1.1 模块功能介绍 1.2 UI页面功能 2 软件框架结构实现 2.1 软件框架图 2.1.1 应用层API 2.1.2 硬件驱动层 2.1.3 MCU底层驱动 2.2 软件流程图 4 软件功能实现 4.1 状态机功能核心代码 4.2 页面功能函数 4.3 源代码文件 5 功能测试 5.1…...

【java】常见限流算法原理及应用

目录 前言 限流的作用 4种常见限流算法 固定窗口限流 基本原理 简单实现 优点和缺点 滑动窗口限流 基本原理 简单实现 优点和缺点 漏桶限流 基本原理 简单实现 优点和缺点 令牌桶限流 基本原理 简单实现 优点和缺点 算法比较与选择 前言 在现代分布式系统…...

Git 原理(提交对象)(结合图与案例)

Git 原理&#xff08;提交对象&#xff09; 这一块主要讲述下 Git 的原理。 在进行提交操作时&#xff0c;Git 会保存一个提交对象&#xff08;commit object&#xff09;&#xff1a; 该提交对象会包含一个指向暂存内容快照的指针&#xff1b; 该提交对象还包含了作者的姓…...

STM32如何修改外部晶振频率和主频

对于STM32F10x系列的单片机&#xff0c;除了STM32F10x_CL单片机&#xff0c;其它的单片机一般外部晶振HSE的时钟频率都默认是8MHz。如果我们使用的外部晶振为12Mhz&#xff0c;那么可以把上图绿色标记改为:12000000 72MHz的主频8MHz的外部晶振HSE*倍频系数9。当然如果像上面把外…...

【JAVA入门】Day48 - 线程池

【JAVA入门】Day48 - 线程池 文章目录 【JAVA入门】Day48 - 线程池一、线程池的主要核心原理二、自定义线程池三、线程池的大小 我们之前写的代码都是&#xff0c;用到线程的时候再创建&#xff0c;用完之后线程也就消失了&#xff0c;实际上这是不对的&#xff0c;它会浪费计算…...

图像亮度均衡算法

图像亮度均衡算法 图像亮度均衡算法的作用是提升图像的对比度和细节&#xff0c;使得图像的亮度分布更加均匀&#xff0c;从而改善视觉效果。通过调整亮度值&#xff0c;可以更好地揭示图像中的细节&#xff0c;尤其在低光或高光条件下的图像处理。 常见的图像亮度均衡算法包括…...

C++中的new与delete

目录 1.简介 2.底层 1.简介 new是升级版的malloc&#xff0c;它会先开空间再去调用构造函数。 delete是升级版的free&#xff0c;它会先调用析构函数再free掉空间。 class A { public:A(int a10, int b10){a a1;b b1;}private:int a;int b; };int main() {//new会先开空间…...

在HTML中添加视频

在HTML中添加视频&#xff0c;你可以使用<video>标签。这个标签允许你在网页上嵌入视频内容&#xff0c;并支持多种视频格式&#xff0c;如MP4、WebM和Ogg等。不过&#xff0c;由于浏览器对视频格式的支持程度不同&#xff0c;因此通常建议提供多种格式的视频文件&#x…...

YoloV10 训练自己的数据集(推理,转化,C#部署)

目录 一、下载 三、开始训练 train.py detect.py export.py 超参数都在这个路径下 四、C#读取yolov10模型进行部署推理 如下程序是用来配置openvino 配置好引用后就可以生成dll了 再创建一个控件&#xff0c;作为显示 net framework 4.8版本的 再nuget工具箱里下载 …...

Science Robotic 内在触觉实现直观的物理人机交互

触觉传感器和电子皮肤是为机器人提供物理交互感的常见设备&#xff0c;但当用于机器人的大面积覆盖时&#xff0c;它们会变得复杂且昂贵。德国宇航中心近期发表的Science Robotics研究工作&#xff0c;使用内部高分辨率关节力扭矩传感器&#xff0c;在机械臂中实现了固有的全身…...

string类(C++)

哈喽各位&#xff01;&#xff0c;久违了&#xff0c;最近怎么样捏&#xff0c;本次进入C的string类&#xff0c;加油加油呀&#xff01; 随记&#xff1a;鼓励创新&#xff0c;宽容失败&#xff01; 1.标准库的string类 1.1string类的了解 string的文献参考链接-->strin…...

【C语言】自定义类型——结构体

目录 一、结构体的类型的声明 二、结构体变量的创建和初始化 三、匿名结构体类型 四、结构体自引用 五、结构体内存对齐 &#xff08;1&#xff09;对齐规则 &#xff08;2&#xff09;计算结构体大小练习 &#xff08;3&#xff09;需要内存对齐的原因 &#xff08;4…...

MySQL练手题--日期连续类型(困难)

一、准备工作 Create table If Not Exists Failed (fail_date date); Create table If Not Exists Succeeded (success_date date); Truncate table Failed; insert into Failed (fail_date) values (2018-12-28); insert into Failed (fail_date) values (2018-12-29); inser…...

【AD24报错】运行DRC后出现 Un-Routed Net Constraint ### Net Not Assigned 的解决方案

AD24在运行PCB设计规则检查&#xff08;DRC&#xff09;后报错 Un-Routed Net Constraint ### Net Not Assigned 的解决方案 一、解决方案二、可能会报错Dead Copper的因素三、可能会报错Un-Routed Net Constraint的因素 Un-Routed Net Constraint ### Net Not Assigned 的解决…...

Linux嵌入式驱动开发指南(速记版)---Linux基础篇

第一章 Ubuntu系统入门 1.1 Linux磁盘管理 1.1.1 Linux磁盘管理基本概念 关键词&#xff1a; Linux 磁盘管理 挂载点 /etc/fstab文件 分区 ls /dev/sd* 联系描述&#xff1a; Linux 磁盘管理体系通过“挂载点”概念替代了 Windows 中的“分区”概念&#xff0c;将硬盘部分以文…...

PDF——压缩大小的方法

方法一&#xff1a;QQ浏览器->格式转换->PDF转纯图PDF...

无监督神经组合优化的扩散模型框架

文章目录 Abstract1. Introduction2. Problem Description2.1 无监督神经组合优化3. Neural Probabilistic Optimization Objective for Approximate Likelihood Models3.1 具有联合变分上界的训练扩散模型Abstract 从离散集合的不可处理分布中进行采样,而不依赖相应的训练数据…...

Web前端开发

首先打开&#xff0c;VS code新建文件夹&#xff0c;命名为index.HTML&#xff0c;然后先对内容进行输入&#xff0c;也就是在波蒂里面进行输入&#xff0c;将社会主义核心价值观的基本内容输入好&#xff0c;然后在页面呈现的效果是这样的 因为有一个alert警告框标签&#xff…...

transformer模型进行英译汉,汉译英

上面是在测试集上的表现 下面是在训练集上的表现 上面是在训练集上的评估效果 这是在测试集上的评估效果,模型是transformer模型,模型应该没问题,以上的是一个源序列没加结束符和加了结束符的情况。 transformer源序列做遮挡填充的自注意力,这就让编码器的输出中每个token的语…...

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强

Cursor 1.0 版本 GitHub MCP 全面指南:从安装到工作流增强 简介 GitHub MCP (Machine Coding Protocol) 是一种强大的工具,能够自动化代码生成、管理和分析,从而显著提升开发效率。本文将全面介绍 GitHub MCP 的安装、配置、使用以及如何将其融入您的工作流。 本文介绍两种…...

8天Python从入门到精通【itheima】-69~70(字符串的常见定义和操作+案例练习)

目录 69节-字符串的定义和操作 1.学习目标 2.数据容器视角下的字符串 3.字符串的下标索引 4.字符串是一个无法修改的数据容器 5.字符串的常用操作 【1】index方法 【2】replace方法&#xff1a;进过替换&#xff0c;得到一个新的字符串 【3】split方法&#xff1a;将字…...

用电脑控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点&#xff1a; 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比&#xff0c;使用 14 位模数转换器 &#xff08;ADC&#xff09; 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS …...

【数据库】关系数据理论--规范化

1.问题的提出 关系模式由五部分组成&#xff0c;是一个五元组&#xff1a; R(U, D, DOM, F) &#xff08;1&#xff09;关系名R是符号化的元组语义 &#xff08;2&#xff09;U为一组属性 &#xff08;3&#xff09;D为属性组U中的属性所来自的域 &#xff08;4&#xff09;DOM…...

CppCon 2015 学习:A C++14 Approach to Dates and Times

Big Picture — 日期库简介 扩展 标准库 这个库是对 C 标准库中 <chrono> 的自然延伸&#xff0c;专注于处理“日历”相关的功能&#xff08;比如年月日、闰年、节假日等&#xff09;&#xff0c;而不仅仅是时间点和时长。极简设计 它是**单头文件&#xff08;header-on…...

接口自动化测试之pytest接口关联框架封装

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一般情况下&#xff0c;我们是通过一个yaml文件进行关联实现 在根目录下新建一个文件yaml&#xff0c;通过上述conftest.py文件实现全局变量的更新: 1.首先需要建…...

02-Redis常见命令

02-Redis常见命令 Redis数据结构介绍 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a; 贴心小建议&#xff1a;命令不要死记&#xff0c;学会查询就好啦 Redis为了方便学习&#xff0c;将操作不同数据类型的命…...

MySQL 中 char 与 varchar 的区别

在 MySQL 的字段类型中&#xff0c;char和varchar是用来处理字符串。本文来学习二者区别 一、本质区别&#xff1a;空间分配的 “固执” 与 “灵活” 1. char&#xff1a;空间占满 固定长度特性&#xff1a; 定义时指定长度&#xff08;如char(10)&#xff09;&#xff0c;无…...

C语言_预处理详解

1. 预定义符号 C语言设置了一些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的 1 __FILE__ //进行编译的源文件 2 __LINE__//文件当前的行号 3 __DATE__ //文件被编译的日期 4 __TIME__//文件被编译的时间 5 __STDC__//如果编译器遵循ANSI…...

「Java教案」Java程序的构成

课程目标 1&#xff0e;知识目标 能够按照Java标识符的命名规则&#xff0c;规范变量的命名。能够区分Java中的关键字与保留字。能够对注释进行分类&#xff0c;根据注释的用途合理的选择注释方式。 2&#xff0e;能力目标 能编写符合规范的标识符。能识别Java中的关键字和…...