【数据结构】顺序表:简单而实用(比较水

前言

最近开始学习数据结构 就重新拾起写博客的习惯 来记录一下 今天就来学一下顺序表和链表
小提示:引用的部分可看可不看 以及 这篇文章使用的是C语言

引入:线性表

在学习顺序表之前 我们先来了解一下线性表

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

需要注意的是:
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,(比如数组和链表)
线性表在物理上存储时,通常以数组和链式结构的形式存储。

顺序表

概念及结构

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

分类

顺序表可以分为静态顺序表动态顺序表

静态顺序表:使用定长数组存储元素

比如下面这个例子

	int arr[10];

补充:
静态顺序表并不常用 因为他是定长的 在实际情况中 长度给小了是不够 给大了是浪费

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

给出一个例子:

	int* array;size_t size;size_t capicity;

大概意思是
array是头部
size记录的是有效的数据个数
capacity记录的是空间容量
(扩容倍数一般是2倍或者1.5倍数

题目

下面来看两道题

题目一

题干


题目链接

题干分析

非严格递增 :表示的是非递减 即有可能出现两个元素相等的情况 并且 数组是已经排序好的元素
比如 1 2 2 3 4 5这种

代码示例
int removeDuplicates(int* nums, int numsSize) {int p1 = 1, p2 = 0;while (p1 < numsSize){if (nums[p2] != nums[p1]) {nums[++p2] = nums[p1++];}else {++p1;}} return p2 + 1;
}
代码解析

我们可以用双指针来实现去重

分为两种情况
1、p1 == p2
p1++

2、p1 != p2
p2++
arr[p2] = arr[p1]
p1++

实际上就是让p1 从前向后一次寻找与p2位置不相同的值 并进行覆盖存储

题目二

题干

题目链接

代码示例
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int i1 = m - 1, i2 = n - 1;int j = m + n - 1;while (i1 >= 0 && i2 >= 0){if (nums1[i1] > nums2[i2]){nums1[j--] = nums1[i1--];}else{nums1[j--] = nums2[i2--];}}while (i2 >= 0){nums1[j--] = nums2[i2--]; }
}
代码解析

两种做法:
依次比较 将小的元素尾插到新的数组中

依次比较 将大的从后往前放

上面的代码采取的是第二种方式

需要注意的是:

注意点1

结束条件不能写j>0
因为i1 和 i2有可能越界可以看下面这个例子
i1还没有遍历完 但i2已经越界了
在这里插入图片描述

注意点2

当i1和i2中有一个小于0就结束循环

但在循环中写的是能使循环继续的条件
所以是&&

	while (i1 >= 0 && i2 >= 0)
注意点3

当i1<0 是需要处理的
当i2<0就结束了 是不需要处理的

总结

效率

尾部插入的效率还不错 但头部插入或者中间插入删除就需要挪动数据 效率低下

扩容

扩容时 是存在着一定的消耗的(空间浪费
比如 从100扩容到200 但我只插入120个数据 那剩下的80个就浪费了

结语

就简单的介绍一下顺序表 再做几道题 做一个引入
(至于顺序表的模拟 (有时间再做

链表再见~

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

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

相关文章

el-table树状表格末行合计

首先,由于我的表头是动态的,所以就稍微复杂一点 效果图 表头数据格式是这样的 表格的数据格式是这样的 然后用合并的方法,此处就需要递归去计算,根据props去匹配每一列的数据,然后加起来,关键代码 //合计处理getSummaries(param) {const { columns, data } param;const su…

怎么让小程序排名靠前?小程序搜索排名问题

小程序的排名是十分重要的&#xff0c;因为这会直接影响到用户的点击率&#xff0c;用户在搜索小程序时&#xff0c;会看到搜索引擎的前几条搜索结果&#xff0c;如果您的小程序不在这些位置上&#xff0c;很可能就会被忽略&#xff0c;所以&#xff0c;想要让用户能够看到您的…

【HeidiSql_01】python在heidisql当中创建新表的注意事项

python在heidisql当中创建新表的注意事项 假设你已经在python当中弄好了所有的结果&#xff0c;并且保存在df_all这个dataframe当中&#xff0c;然后要将其导入数据库当中并创建一张新的表进行保存。 # 构建数据库连接,将merged_df写回数据库 from sqlalchemy import create_e…

VS2017制作安装包如何将整个文件夹添加进依赖项中

找到安装项目右键view-文件系统 找到Application Folder 右键Add-Folder 如Python38 选中创建的 Python38 在右侧的空白处粘贴要复制的文件即可。文件多&#xff0c;等待时间较长

【LVS实战】03 LVS负载均衡-DR模式实验

本文介绍&#xff0c;如何通过ipvsadm配置负载均衡&#xff0c;并且转发模式为DR直接路由模式 一、网络拓扑 如下图&#xff1a; LVS负载均衡的机器&#xff0c;配置了一个VIP&#xff1a;10.1.0.7 二、前置准备 每台机器关闭防火墙 systemctl stop firewalldRS装好nginx…

京东h5st逆向 h5st代码之拓展

知识点 node安装模块 crypto-js JavaScript 中的加密库 则更偏向于消息摘要算法、对称加密和简单的哈希函数&#xff0c;支持 AES、DES、SHA-1、HMAC 等诸多算法&#xff0c;适用于对客户端本地存储的数据进行加密、散列或签名处理等场景 axios 一旦安装成功&#xff0c;我们就…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

vue3写nav滚动事件中悬停在顶部

1. 防抖类Animate, 使用requestAnimationFrame代替setTimeout 也可以使用节流函数, lodash有现成的防抖和节流方法 _.debounce防抖 _.throttle节流 export default class Animate {constructor() {this.timer null;}start (fn) > {if (!fn) {throw new Error(需要执行…

Web安全系列——CSRF攻击

文章首发公众号&#xff1a; 海天二路搬砖工 前言 CSRF 攻击是Web应用中最常见的攻击方式之一。 CSRF攻击给网站身份验证、用户账户和个人隐私带来极大威胁。了解 CSRF 攻击的流程、原理与防御措施&#xff0c;是构建安全可靠的Web应用程序的必要条件。 什么是CSRF攻击 CS…

Python框架之Flask入门和视图

一、Flask入门和视图 需要安装Pycharm专业版 1. Flask简介 Python后端的2个主流框架 Flask 轻量级框架Django 重型框架 Flask是一个基于Python实现的web开发微框架 官方文档&#xff1a;https://flask.palletsprojects.com/ 中文文档&#xff1a;https://dormousehole.readthe…

dbeaver查看表,解决证书报错current license is non-compliant for [jdbc]

http://localhost:9200/_license { “license” : { “status” : “active”, “uid” : “b91ae0e0-b04d-4e20-8730-cf0bca7b2035”, “type” : “basic”, “issue_date” : “2023-02-22T14:33:27.648Z”, “issue_date_in_millis” : 1677076407648, “max_nodes” : 10…

在线数据库关系图设计工具,选Itbuilder

一旦数据库超出了人类可消化的大小&#xff0c;使用关系图工具来辅助其设计就变得至关重要。创建数据库听起来像是一个复杂的过程&#xff0c;但使用现代数据库图表工具&#xff0c;情况并非如此。 itbuilder在线数据库设计工具使用户可以创建和导入数据库关系图以查看数据库对…