详解数据结构中的顺序表的手动实现,顺序表功能接口【数据结构】
文章目录
- 线性表
- 顺序表
- 接口实现
- 尾插
- 尾删
- 头插
- 头删
- 指定位置插入
- 指定位置删除
- 练习
线性表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储
顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改
(顺序表就是数组,但是是在数组的基础上,另外还要求数据是从头开始存储 ,并且数据是连续存储的,不能跳跃间隔)
顺序表一般可以分为:
- 静态顺序表:使用定长数组存储元素
- 动态顺序表:使用动态开辟的数组存储
接口实现
尾插
typedef struct SeqList
{SLDaTaType * a;int size; // 数组中存了多少个数int capacity; //数组实际容量个数
}SL;void SeqListPushBack(SL* ps, SLDaTaType x) //尾插
{assert(ps);//空间不足则扩容 if (ps->capacity == ps->size){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2; // 若空间为0 就放4个字节 , 否则capacity *2 SLDaTaType * tmp = ( SLDaTaType* )realloc(ps->a, newcapacity * sizeof(SLDaTaType));if (tmp == NULL) //开辟失败{printf("realloc fail \n");exit(-1); }ps->a = tmp;ps->capacity = newcapacity;}ps->a[ps->size] = x; // 空间足够 ps->size++;
}
void SeqListDestory(SL* ps) //销毁 ,防止内存泄露
{assert(ps);free(ps->a);ps->a = NULL; ps->size = ps->capacity = 0;
}
尾删
void SeqListPopBack(SL* ps)// 尾删
{assert(ps);// ps->a[ps->size - 1] = 0;assert(ps->size > 0);ps->size--;
}
头插
最后一个数向后挪动
void SeqListPushFront(SL* ps, SLDaTaType x) // 头插
{assert(ps);// 挪动 int end = ps->size - 1;while (end >= 0){ps->a[end + 1] = ps->a[end];end--;}ps->a[0] = x;ps->size++;
}
头删
void SeqListPopFront(SL* ps) // 头删
{assert(ps);assert(ps->size > 0);//挪动数据int begin =1 ;while (begin<=ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}
找到了返回x位置下标 若没有找到返回-1
int SeqListFind(SL* ps, SLDaTaType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->a[i] == x){return i;}}return -1;
}
指定位置插入
void SeqListInsert(SL* ps, int pos, SLDaTaType x) // 指定位置插入
{assert(ps);assert(pos >=0 && pos <= ps->size);int end = ps->size -1 ;SeqListCheckCapacity(ps); //防止后面空间不足 挪动的时候越界访问while (end >= pos){//挪动 ps->a[end + 1] = ps->a[end];end--;}//插入数据ps->a[pos] = x;ps->size++;
}
指定位置删除
void SeqListErase(SL* ps, int pos) // 指定位置删除
{assert(ps);assert(pos >= 0 && pos < ps->size);int begin = pos + 1;while (begin < ps->size){ps->a[begin - 1] = ps->a[begin];begin++;}ps->size--;
}
练习
https://leetcode.cn/problems/remove-element/
思路一 : 找到所有的val ,一次挪动数据覆盖删除
时间复杂度最坏的情况是数组中绝大部分值是val甚至全部是val
假设数组中有N个数据 第一个数据是val ,这时候需要挪动N-1 个元素 ,
第二个数据是val ,得挪动N-2个元素
依次类推 第n个数据是val ,得挪动N-n
不难发现是一个等差数列 ,时间复杂度为O(N^2)
思路二:
依次遍历整个数组 ,把不是val 得值放到tmp 数组中 ,再把tmp数组得值拷贝到nums数组中 ,这样我们将时间复杂度优化到 O(N) ,但是空间复杂度 为O(N)
思路三 src去找nums 数组中不是val 的值 , 放到dst 指向的位置中 ,再++src ++dst
这样时间复杂度是O(N) ,空间复杂度是O(1)
int removeElement(int* nums, int numsSize, int val)
{int src = 0;int dst =0 ;while (src < numsSize ){if( nums[src]!=val ){nums[dst] = nums[src];src++ ;dst ++ ; }else {src++;}}return dst;
}
https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
int removeDuplicates(int* nums, int numsSize)
{if (numsSize==0 ){return 0 ;}int j =1;int i = 0;int dst = 0 ;// j 没有越界 while( j<numsSize){// 判断 i和j是否相等 不相等就继续往下找if(nums[i] ==nums[j]){j++ ;}else // 不相等就把 nums[dst]=nums[i]{nums[dst]=nums[i];i=j;dst++;j++;}}//j越界nums[dst]=nums[i];++dst;return dst ; // 返回dst的下标
}
如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!!
相关文章:
详解数据结构中的顺序表的手动实现,顺序表功能接口【数据结构】
文章目录线性表顺序表接口实现尾插尾删头插头删指定位置插入指定位置删除练习线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…...
【二】kubernetes操作
k8s卸载重置 名词解释 1、Namespace:名称用来隔离资源,不隔离网络 创建名称空间 一、命名空间namesapce 方式一:命令行创建 kubectl create ns hello删除名称空间 kubectl delete ns hello查询指定的名称空间 kubectl get pod -n kube-s…...
如何在 C++ 中调用 python 解析器来执行 python 代码(五)?
本节研究如何对 import 做白名单 目录 如何在 C 中调用 python 解析器来执行 python 代码(一)?如何在 C 中调用 python 解析器来执行 python 代码(二)?如何在 C 中调用 python 解析器来执行 python 代码&…...
八 SpringMVC【拦截器】登录验证
目录🚩一 SpringMVC拦截器✅ 1.配置文件✅2.登录验证代码(HandlerInterceptor)✅3.继承HandlerInterceptorAdapter(不建议使用)✅4.登录页面jsp✅5.主页面(操作页面)✅6.crud用户在访问页面时 只…...
PhotoShop基础使用
49:图片分类 1:像素图 特点:放大后可见,右一个个色块(像素)组合而成。 优点:容量小,纯天然 JPG、JPEG、png、GIF 2:矢量图 面向对象图像 绘图图像 特点:不…...
借助阿里云 AHPA,苏打智能轻松实现降本增效
作者:元毅 “高猛科技已在几个主要服务 ACK 集群上启用了 AHPA。相比于 HPA 的方案,AHPA 的主动预测模式额外降低了 12% 的资源成本。同时 AHPA 能够提前资源预热、自动容量规划,能够很好的应对突发流量。” ——赵劲松 (高猛科技高级后台工…...
美团2面:如何保障 MySQL 和 Redis 数据一致性?这样答,让面试官爱到 死去活来
美团2面:如何保障 MySQL 和 Redis 的数据一致性? 说在前面 在尼恩的(50)读者社群中,经常遇到一个 非常、非常高频的一个面试题,但是很不好回答,类似如下: 如何保障 MySQL 和 Redis…...
react hooks学习记录
react hook学习记录1.什么是hooks2.State Hook3.Effect Hook4.Ref Hook1.什么是hooks (1). Hook是React 16.8.0版本增加的新特性/新语法 (2). 可以让你在函数组件中使用 state 以及其他的 React 特性 貌似现在更多的也是使用函数式组件的了,重要 2.State Hook imp…...
创新型中小企业认定评定标准
一、公告条件评价得分达到 60 分以上(其中创新能力指标得分不低于 20 分、成长性指标及专业化指标得分均不低于 15 分),或满足下列条件之一:(一)近三年内获得过国家级、省级科技奖励。(二&#…...
记录一次nginx转发代理skywalking白屏 以及nginx鉴权配置
上nginx代码 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; …...
如何使用FarsightAD在活动目录域中检测攻击者部署的持久化机制
关于FarsightAD FarsightAD是一款功能强大的PowerShell脚本,该工具可以帮助广大研究人员在活动目录域遭受到渗透攻击之后,检测到由攻击者部署的持久化机制。 该脚本能够生成并导出各种对象及其属性的CSV/JSON文件,并附带从元数据副本中获取…...
Python - 操作txt文件
文章目录打开txt文件读取txt文件写入txt文件删除txt文件打开txt文件 open(file, moder, bufferingNone, encodingNone, errorsNone, newlineNone, closefdTrue)函数用来打开txt文件。 #方法1,这种方式使用后需要关闭文件 f open("data.txt","r&qu…...
老杜MySQL入门基础 1
1 数据库:DataBase(存储数据的仓库) 2 数据库管理系统:DataBaseManagementSystem(DBMS)(管理数据库中的数据的) DBMS可以对数据库中的数据进行增删改查常见的数据库管理系统:MySQL、Oracle、SQLserver 3 SQL:结构化查询语言 编…...
Vue中splice的使用
splice(index,len,[item])它也可以用来替换/删除/添加数组内某一个或者几个值(该方法会改变原始数组) index:数组开始下标 len: 替换/删除的长度 item:替换的值,删除操作的话 item为空 删除: //删除起始下标为1&…...
Ubuntu通过rsync和inotify实现双机热备
Rsync Inotify双机热备 一、备份机操作 备份机:主服务器或主机文件将需要备份的文件同步到此服务器上,即从主服务器上同步过来进行备份。 1.1安装rsync sudo apt-get install rsync1.2修改/etc/dault/rsync文件 sudo vim /etc/default/rsync修改如…...
【python】异常详解
注:最后有面试挑战,看看自己掌握了吗 文章目录错误分类捕捉异常实例finally的使用捕捉特定异常抛出异常用户自定义异常🌸I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢:木芯工作室 、I…...
pc、移动端自适应css
第一步按照vant官网给的rem适配,安装 postcss-pxtorem:npm install postcss-pxtorem; 第二步安装lib-flexible:npm i -S amfe-flexible,记得在main.js文件引入 import ‘amfe-flexible’; 第三步进行 postc…...
Threejs 教程1
threejs核心概念场景、照相机、对象、光、渲染器等1.1.场景Scene 场景是所有物体的容器,对应着显示生活中的三维世界,所有的可视化对象级相关的动作均发生在场景中。1.2.照相机Camera照相机是三维世界中的观察者,类似与眼睛。为了观察这个世界…...
WuThreat身份安全云-TVD每日漏洞情报-2023-02-23
漏洞名称:VMware vRealize Orchestrator 安全漏洞 漏洞级别:中危 漏洞编号:CVE-2023-20855,CNNVD-202302-1754 相关涉及:VMware Cloud Foundation 4.0 漏洞状态:未定义 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-04396 漏洞名称:TP-LINK Archer C50 WE…...
C语言--模拟实现库函数qsort
什么是qsort qsort是一个库函数,是用来排序的库函数,使用的是快速排序的方法(quicksort)。 qsort的好处在于: 1,现成的 2,可以排序任意类型的数据。 在之前我们已经学过一种排序方法:冒泡排序。排序的原理…...
面向专业课教学和学习的《计算机数学》点播工具
本文是面向大学和高职的《计算机数学》课程的配套资料,全部为知识点或练习题的讲解视频,目的是如下2个场景: 1、专业课教师备课前,可以直接从本页的资源中选择,作为学生的预习资料 2、专业课教师上课过程中ÿ…...
域权限维持之创建DSRM后门
DSRM(目录服务还原模式),在初期安装域控的时候会让我们设置DSRM的管理员密码,这个密码是为了在后期域控发生问题时修复、还原或重建活动目录。DSRM账户实际上是administrator账户,并且该账户的密码在创建之后很少使用。…...
【苹果内购支付】关于uniapp拉起苹果内购支付注意事项、实现步骤以及踩过的坑
前言 Hello!又是很长时间没有写博客了,因为最近又开始从事新项目,也是第一次接触关于uniapp开发原生IOS应用的项目,在这里做一些关于我在项目中使用苹果内购支付所实现的方式以及要注意的事项,希望能给正在做uniapp开…...
一:BT、BLE版本说明及对比
蓝牙版本说明1.常见名词说明2.BT&BLE特性对比3.BT各版本对比4.BLE各版对比1.常见名词说明 名称说明BR(Basic Rate)基本码率EDR(Enhanced Data Rate)增强码率BLE(Bluetooth Low Energy)低功耗蓝牙HS(High Speed)高速蓝牙BT(BlueTooth)蓝牙技术LE(Low Energy)低能耗AFH(Adap…...
php宝塔搭建部署实战多模板cms管理系统源码
大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套php开发的多模板cms管理系统源码。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.0 nginx mysql5.7 JS CSS HTMLcnetos7以上 宝塔面板 文字搭建教程 下载源码,宝塔添加一…...
【数据结构初阶】手把手带你实现栈
前言 在进入数据结构初阶的学习之后,我们学习了顺序表和链表,当然栈也是一种特殊的数据结构,他的特点是后进先出。 栈的概念及结构 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删…...
liunx 端口号开放和关闭
1.先查看防火墙是否开启的状态,以及开放端口的情况: systemctl status firewalld.service(查看防火墙开启还是关闭) sudo firewall-cmd --list-all(可以查看端口开放情况) 2.使用以下命令来开启或者关闭虚拟机的防火墙 systemctl stop firewalld.ser…...
【oracle】问题分析常用查询语句
1、查看当前的数据库连接数 select count(*) from v$process ; --当前的数据库连接数2、数据库允许的最大连接数 select value from v$parameter where name processes; --数据库允许的最大连接数3、查看当前有哪些用户正在使用数据 select osuser, a.username, cpu_time/ex…...
将vue-devtools打包成edge插件
文章目录一、从github拉vue-devtools源码二、用npm安装yarn三、使用yarn安装并编译源码四、将vue-devtools打包成edge插件五、离线安装edge插件一、从github拉vue-devtools源码 目前最新的版本是v6.5.0,地址:https://github.com/vuejs/devtools 二、用n…...
SpringBoot常见面试题汇总(超详细回答)
1.什么是SpringBoot?Spring Boot 是一个基于 Spring 框架的开源框架,用于快速创建独立的、生产级别的、可运行的 Spring 应用程序。它采用了约定优于配置的理念,使开发者可以不需要手动配置大量的 Spring 配置文件,而快速搭建出符…...
网站建设+荆州/seo教程最新
文章目录1.示例代码2.监听不回调问题参考博客:相关博客:1.示例代码 class PersonKVO: NSObject { objc dynamic var name "li"objc dynamic var age 12}class ViewController: UIViewController {var person: PersonKVO PersonKVO()IBA…...
登录注册网站怎么做/近期国际热点大事件
2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/938986/blog/299545...
建站开发软件/seo网站推广助理
编译安装mysql-5.7.17 1.打开官方网站下载最新的mysql-5.7.17源码包 注意:选择源码下载 2.在自定义目录保存 boost/mysql 或者mysql-boost https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.17.tar.gz http://sourceforge.net/projects/boost/files/…...
如何自己免费创建网站/百度广告一天多少钱
宝塔自动备份网站到FTP空间 上次分享了宝塔自动备份网站到阿里云oss中,但是阿里云的oss是要收存储费用的,而且我非常在意的一点就是这样会把阿里云的API密码明文存储在面板后台,感觉这样也不太好,就一直在想其他的自动备份方案&am…...
最近新闻热点国家大事/赣州seo排名
引言OCR 的全称是光学字符识别,如其名,主要利用了图像信息进行识别。然而人类在识字的时候,除了眼睛看,还会自动理解文字背后的含义。例如上面这个流传甚广的“测字”游戏,你一定不会说认不出来,而是给出“…...
找合伙做网站的/拼多多怎么查商品排名
编写一个程序,此程序在运行时要求用户输入一个 整数,代表某门课的考试成绩,程序接着给出“不及格”、“及格”、“中”、“良”、“优”的结论。 要求程序必须具备足够的健壮性,不管用户输入什 么样的内容,都不会崩溃。…...