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

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

文章目录

  • 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.lryc.cn/news/431458.html

相关文章:

  • pod基础和镜像拉取策略
  • 53 mysql pid 文件的创建
  • 前端---对MVC MVP MVVM的理解
  • 深度学习 --- VGG16能让某个指定的feature map激活值最大化图片的可视化(JupyterNotebook实战)
  • 1990-2022年各地级市gdp、一二三产业gdp及人均gdp数据
  • c++ 原型模式
  • 论tomcat线程池和spring封装的线程池
  • 阿里P7大牛整理自动化测试高频面试题
  • vue如何实现路由缓存
  • 基于Openjdk容器打包运行jar程序
  • DNN学习平台(GoogleNet、SSD、FastRCNN、Yolov3)
  • HTTP协议(超文本传输协议)
  • FFmpeg的日志系统(ubuntu 环境)
  • 浅析VO、DTO、DO、PO
  • android kotlin基础复习 enum
  • 个股场外期权怎么交易?场外期权交易流程是怎样的?
  • 企业选ETL还是ELT架构?
  • 【Spring Boot 3】【Web】同时启用 HTTP 和 HTTPS
  • 【Android】最好用的网络库:Retrofit
  • SpringBoot自动化配置原理
  • 2024级新生数组字符串专题题解
  • C++学习 虚函数,容器
  • MacTalk 测评通义灵码,如何实现“微信表情”小功能?
  • Canvas Confetti - 免费开源的五彩纸屑飞舞特效的 JS 库,多用于在网页上实现欢乐庆祝的场景
  • [数据集][目标检测]智慧牧场猪只检测数据集VOC+YOLO格式16245张1类别
  • GS-SLAM论文阅读笔记--LoopSplat
  • Mysql数据库表结构迁移PostgreSQL
  • 店匠科技携手Stripe共谋电商支付新篇章
  • 大众(奥迪)汽车继电器编号对照表
  • 《佛脚闪卡watch》——Apple Watch上的高效学习助手