【数据结构】顺序表和链表——顺序表(包含丰富算法题)

news2024/9/23 11:27:19

文章目录

  • 1. 线性表
  • 2. 顺序表
    • 2.1 概念与结构
    • 2.2 分类
      • 2.2.1 静态顺序表
      • 2.2.2 动态顺序表
    • 2.3 动态顺序表的实现
    • 2.4 顺序表算法题
      • 2.4.1 移除元素
      • 2.4.2 删除有序数组中的重复项
      • 2.4.3 合并两个有序数组
    • 2.5 顺序表问题与思考

1. 线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串…

线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

2. 顺序表

2.1 概念与结构

概念:顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。

在这里插入图片描述

顺序表和数组的区别?

顺序表的底层结构是数组,对数组的封装,实现了常用的增删改查等接口

在这里插入图片描述

2.2 分类

2.2.1 静态顺序表

概念:使用定长数组存储元素

在这里插入图片描述

静态顺序表缺陷:空间给少了不够用,给多了造成空间浪费

2.2.2 动态顺序表

概念:使用动态开辟的连续空间存储元素

在这里插入图片描述

2.3 动态顺序表的实现

SeqList.h

#define INIT_CAPACITY 4
typedef int SLDataType;
// 动态顺序表 -- 按需申请
typedef struct SeqList
{
	SLDataType * a;
	int size; // 有效数据个数
	int capacity; // 空间容量
}SL;

//初始化和销毁
void SLInit(SL * ps);
void SLDestroy(SL * ps);
void SLPrint(SL * ps);
//扩容
void SLCheckCapacity(SL * ps);

//头部插⼊删除 / 尾部插⼊删除
void SLPushBack(SL * ps, SLDataType x);
void SLPopBack(SL * ps);
void SLPushFront(SL * ps, SLDataType x);
void SLPopFront(SL * ps);

//指定位置之前插⼊/删除数据
void SLInsert(SL * ps, int pos, SLDataType x);
void SLErase(SL * ps, int pos);
int SLFind(SL* ps, SLDataType x);

[!NOTE]

💡 代码小提示

编写代码过程中要勤测试,写一部分测试一部分,避免写出大量代码后再测试而导致出现问题,问题定位无从下手。

2.4 顺序表算法题

2.4.1 移除元素

https://leetcode.cn/problems/remove-element/description/

2.4.2 删除有序数组中的重复项

https://leetcode.cn/problems/remove-duplicates-from-sorted-array/description/

2.4.3 合并两个有序数组

https://leetcode.cn/problems/merge-sorted-array/description/

2.5 顺序表问题与思考

  • 中间/头部的插入删除,时间复杂度为 O ( N ) O(N) O(N)

  • 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。

  • 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到200。

我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。

思考:如何解决以上问题呢?
❤️❤️❤️之后的博客内容将会进行讲解❤️❤️❤️

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

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

相关文章

vivado 定义时间约束

定义时间约束和 例外情况 在本实验中,您将学习两种为设计创建约束的方法。您必须使用 AMD Vivado™IDE中包含的AMD Kintex™7 CPU网表示例设计。 第一步:打开示例项目 1.打开Vivado IDE。 •在Linux上: 1.更改实验室材料的存储目录。 cd&…

HarmonyOS--后台代理提醒

一、概述 HarmonyOS提供后台代理提醒功能,在应用退居后台或退出后,计时和提醒通知功能被系统后台代理接管。后台代理提醒就是由系统后台进程代理应用的提醒功能。后台代理提醒服务通过reminderAgentManager模块提供提醒定义、创建提醒、取消提醒等能力。…

zdppy+vue3+onlyoffice文档管理系统实战 20240902 上课笔记 登录功能优化

遗留问题 1、登录以后跳转最近文档2、如果用户没有登录应该自动跳转登录页面3、如果用户的token校验失败,应该自动调整登录界面4、按回车键自动跳转登录页面 登录以后跳转最近文档 const router useRouter() router.push("/")实际代码: c…

C++篇:C向C++迈进(下)

目录 引言 缺省参数 1.缺省参数的概念 2.缺省参数的分类 2.1 全缺省 2.2 半缺省 3.注意事项 函数重载 1.函数重载的定义 2.函数重载的基本规则 3.函数重载的运用场景 引用 1.引用的概念 2.引用的主要特性 3.常引用 4.引用的使用场景 4.1 函数参数传递 4.2 函…

计算机网络-VRRP基础概念

回顾一下以前我们学习的网络通信基础,终端通过交换机可以相互进行通信,而如果是不同网段间的通信需要经过三层网关,网关进行路由寻址和转发,所以基本的网络结构就是终端--交换机--路由器网关--网络出口--Internet。 一、VRRP虚拟路…

逻辑回归算法详解

目录 原理推导 逻辑回归求解 项目实战--信用卡欺诈检测 数据分析与预处理 数据读取与分析 样本不均衡解决方案 特征标准化 下采样方案 交叉验证 模型评估方法 正则化惩罚 逻辑回归模型 参数对结果的影响 混淆矩阵 分类阈值对结果的影响 过采样方案 SMOTE数据生…

点击率预测模型Embedding层的学习和训练

导读: 本文将简要介绍推荐模型的发展历史,现状,和下一步的研究趋势。并重点介绍针对embedding数据的模型训练及优化。主要包含以下几大部分内容: CTR预测模型(CTR Models)连续值处理(Continuou…

OpenAI“草莓项目”最快今年秋季发布!苹果将于9月10号推出首款AI iPhone|AI日报

文章推荐 吴恩达辞任Landing AI CEO,专注AI投资?数学家斯蒂芬预言哲学家引领AI未来|AI日报 与人类产生情感共鸣?数字华夏推出“夏澜”人形机器人;微软Azure AI语音服务推出虚拟人形象|AI日报 今日热点 …

行程问题

某直升机原定以260公里的时速飞往目的地,因任务紧急,飞行时速提高到360公里,结果提前1小时到达,则总的航程是( )公里。 A 900 B 936【正确答案】 C 1200 D 1296 第一步,本题考察行程问题&#x…

自行车租赁管理系统设计与实现

第三章 系统分析 3.1 系统可行性分析 可行性研究(Feasibility Study)是通过对项目的主要内容和配套条件,如市场需求、资源供应、建设规模、工艺路线、设备选型、环境影响、资金筹措、盈利能力等,从技术、经济、工程等方面进行调查研究和分析比较&…

使用mybatis对学生管理系统的完整功能实现

一、什么是mybatis: MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Pla…

大赛题目公布,鸣志电器,对不起了

大家好,我是博主,夏目 即9/2发布组织第一届 电机电磁仿真大赛后,有很多朋友跃跃欲试,但也有不少顾虑。 跃跃欲试的原因是,对于这种新颖的活动,参与其中,也是一种乐趣,一种经验的积…

什么是I2C总线?

1.什么是I2C? 1.1 I2C的由来 在电视机内部电路中,众多功能需要用到许多集成电路IC来实现,包括主控器件微控制器和众多外围设备器件。这些器件相互之间要传递数据信息,那么就需要用导线相互连接,如此众多IC器件的互连&…

ArcGIS Pro 发布松散型切片

使用ArcGIS Pro发布松散型切片问题,有时候会出现切片方案写了松散型,但是自动切片完成后依然是紧凑型的问题,这时候可以采用手动修改然后再切片的方式。 1. 发布切片服务 选择手动切片方式 2. 手动修改服务的切片方案文件 修改cache服务…

htop的使用详解

1. htop简介: htop 是一个基于 ncurses 的跨平台进程查看器。 它与 top 类似,但允许您垂直和水平滚动,并使用指针设备(鼠标)进行交互。您可以观察系统上运行的所有进程及其命令行参数,以及以树形格式查看它…

Golang | Leetcode Golang题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; func isSubsequence(s string, t string) bool {n, m : len(s), len(t)f : make([][26]int, m 1)for i : 0; i < 26; i {f[m][i] m}for i : m - 1; i > 0; i-- {for j : 0; j < 26; j {if t[i] byte(j a) {f[i][j] i} else {…

Python | Leetcode Python题解之第392题判断子序列

题目&#xff1a; 题解&#xff1a; class Solution:def isSubsequence(self, s: str, t: str) -> bool:n, m len(s), len(t)f [[0] * 26 for _ in range(m)]f.append([m] * 26)for i in range(m - 1, -1, -1):for j in range(26):f[i][j] i if ord(t[i]) j ord(a) el…

软件工程-图书管理系统的需求分析

软件需求规格说明书 目录 软件需求规格说明书 一、引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 二、任务概述 2.1目标 2.2用户特点 2.3假定和约束 三、需求规定 3.1功能划分 3.1.1系统功能组成 3.1.2功能编号和优先级 3.2功能描述 3.3性能 3.4输入输出 …

VUE2.0 elementUI el-input-number 数据更新,视图不更新——基础积累

今天遇到一个问题&#xff0c;是关于el-input-number组件的&#xff0c;发现数据明明已经更改了&#xff0c;但是页面上组件输入框中还是之前的值。 比如上方输入框中&#xff0c;我输入120.5&#xff0c;就会出现下面的诡异现象 回显此值是120.779&#xff0c;但是页面上输入…

WPF MVVM如何在ViewModel直接操作控件对象

早些年在WPF中使用COM组件时&#xff0c;需要在ViewModel中操作COM组件中的控件对象&#xff0c;但是这个控件对象又不支持绑定&#xff0c; 后面的解决办法是在窗口加载时&#xff0c;将控件对象以参数传递到Loaded事件的处理命令中&#xff0c;然后将这个对象记录下来&#…