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

线性表和顺序表

顺序表

1.线性表 

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使
用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,
线性表在物理上存储时,通常以数组和链式结构的形式存储。

 


2.顺序表 

2.1概念及结构
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存
储。在数组上完成数据的增删查改。

顺序表一般可以分为:
1. 静态顺序表:使用定长数组存储元素。

 

2. 动态顺序表:使用动态开辟的数组存储。

2.1动态顺序表---按需申请

 

2.2 接口实现 

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空
间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间
大小,所以下面我们实现动态顺序表

对这个动态顺序表进行处理
增删查改
初始化:

 

检查顺序表空间,如果满了进行增容

 

顺序表的尾插

 

 顺序表的尾删

顺序表的头插

 

顺序表的头删

 

顺序表的查找

 

顺序表在pos位置处插入x

 

顺序表删除pos处的值

 

顺序表的销毁

 

顺序表的打印

 

2.3 顺序表的问题及思考 
问题:
1. 中间 / 头部的插入删除,时间复杂度为O(N)
2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗
3. 增容一般是呈2倍的增长,势必会有一定的空间浪费。例如当前容量为100,满了以后增容到
200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间 

 

2.4 数组相关面试题 
1. 原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。
题目:
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素
元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

思路:用两个指针进行完成,一个指针往后遍历,只要该数不是val,那么两个指针都往后移动
如果这个数是val,一个指针向后移动,找到不是Val的数,然后赋值给另一个指针,如此循环

 

 

 

2. 删除排序数组中的重复项,要求时间复杂度为O(N),空间复杂度为O(1)。
题目:
给你一个 非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次 
返回删除后数组的新长度。元素的 相对顺序应该保持一致 。然后返回nums中唯一元素的个数。
更改数组 nums ,使nums的前 k 个元素包含唯一元素,并按照它们最初在 nums中出现的顺序排列
nums的其余元素与nums的大小不重要

思路:用两个下标来完成,一个下标走在最前面,如果两个下标的数字相同,那么就继续往后遍历
如果不相同,那么这个位置的数等于零一个下标下一个位置的数字

 

3. 合并两个有序数组,要求时间复杂度为O(N)
题目:
给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中
为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,
后n个元素为0 应忽略,nums2 的长度为n

思路:第一个数组后面应该留有num2元素个数的空位置,然后从num1的最后开始往前进行两个数组比较
依次放两个数组的最大值在num后面

 

 

 

http://www.xdnf.cn/news/19294.html

相关文章:

  • 数据存储——数据库
  • 安卓开发---SimpleAdapter
  • ansible的playbook练习题
  • shell学习(二)
  • 【完整源码+数据集+部署教程】传送带建筑材料识别系统源码和数据集:改进yolo11-AFPN-P345
  • 网站酷炫换皮肤?——PC 端 H5 换肤方案实战分享
  • PCIe 6.0 TLP结构解析:深入理解事务层数据包的设计与实现
  • IDEA编译报错:Error:(3, 28) java: 程序包com.alibaba.fastjson不存在
  • 图解帕累托前沿(pareto frontier)
  • 海康相机开发---设备布防(Setup Alarm)
  • python 解码 视频解码
  • RAG教程6:cohere rerank重排
  • openEuler系统实现MySQL数据库主从复制
  • 基于站点、模式、遥感多源降水数据融合与评估;Python驱动下,从基础处理、机器学习建模到气候态产品生成的全流程解析
  • 2.ImGui-搭建一个外部绘制的窗口环境(使用ImGui绘制一个空白窗口)
  • python 2025/7/28
  • 03.《交换的底层逻辑:从基础到应用》
  • edgeone 边缘加速平台使用“坑”记录
  • 洛谷P1090 [NOIP 2004 提高组] 合并果子 详解
  • 三维动画渲染农场哪家便宜?
  • 【69页PPT】智慧方案智慧医疗产业园区规划设计方案(附下载方式)
  • vscode优化合集 - Visual Studio Code
  • 【51单片机】【protues仿真】 基于51单片机叫号系统
  • NLP:驱动人工智能迈向 “理解” 与 “对话” 的核心引擎
  • 香港电讯与Microsoft香港推出新世代“Teams Phone” 解决方案
  • 理想汽车智驾方案介绍专题 3 MoE+Sparse Attention 高效结构解析
  • 将自己的jar包发布到maven中央仓库(2025-08-29)
  • 循环高级(1)
  • 期权杂记(二)
  • java数据结构--排序