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

【数据结构】线性表和顺序表

Yan-英杰的主页

悟已往之不谏 知来者之可追


目录

1.线性表

2.顺序表

        2.1 静态顺序表

        2.2 动态顺序表

        2.3移除元素


1.线性表

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

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

2.顺序表

      😀  2.1 静态顺序表

                 注:静态顺序表有个很大的缺点,空间分配多了浪费,分配少了不够用,我们通常使用动态顺序表

                typedef和define的区别?

                typedef通常用来定义类型名称,define通常用来定义常量

//define通常用来定义常量
#define N 10//typedef通常用来定义类型名称
typedef int SLDataType;//静态顺序表
//缺点:空间开少了不够用,开多了不够用
struct SeqList
{SLDataType a[N];SLDataType size;
};

       😐 2.2 动态顺序表

                优点:当内存堆内存不够用时,我们可以进行申请

                函数定义

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define INIT_CAPACITY 4
typedef int SLDataType;
typedef struct SeqList
{int capacity;int size;SLDataType* a;}SL;//初始化结构体
void SLInit(SL* ps);//销毁结构体
void DestorySL(SL* ps);//扩容
void CheckCapacity(SL* ps);//头插
void SLPushFront(SL* ps, SLDataType x);
//头删
void SLPopFront(SL* ps);
//尾插
void SLPushBack(SL* ps,SLDataType x);
//尾删
void SLPopBack(SL* ps);
//打印
void SLPrint(SL* ps);
//查找
void FindSL(SL* ps);

        函数实现

#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"void SLInit(SL* ps)
{ps->a = (SLDataType*)malloc(sizeof(SLDataType)* INIT_CAPACITY);if (ps->a == NULL){perror("fail malloc:");return;}ps->size = 0;ps->capacity = INIT_CAPACITY;
}void DestorySL(SL* ps)
{free(ps->a);ps->a = NULL;ps->capacity = 0;ps->size = 0;
}//扩容
void CheckCapacity(SL* ps)
{SLDataType* tmp = (SLDataType*)realloc(ps->a,sizeof(INIT_CAPACITY)*ps->capacity*2);if (tmp == NULL){perror("fail:realloc");return;}ps->a = tmp;ps->capacity *= 2;
}//头插
void SLPushFront(SL* ps,SLDataType x)
{assert(ps);CheckCapacity(ps);int i = 0;for (i=ps->size; i>=0; i--){ps->a[i] = ps->a[i - 1];}ps->a[0] = x;ps->size++;
}//头删
void SLPopFront(SL * ps)
{assert(ps);int i = 0;for (i=0; i<ps->size; i++){ps->a[i] = ps->a[i + 1];}ps->size--;
}//尾插
void SLPushBack(SL* ps,SLDataType x)
{//断言assert(ps);CheckCapacity(ps);ps->a[ps->size] = x;ps->size++;
}//尾删
void SLPopBack(SL* ps) 
{assert(ps);ps->size--;
}//打印
void SLPrint(SL* ps)
{assert(ps);int i = 0;for (i=0; i<ps->size; i++){printf("%d ",ps->a[i]);}
}//查找指定位置的数字
void FindSL(SL* ps,int x)
{assert(ps);int i = 0;printf("%d", ps->a[x - 1]);
}

        函数调用

#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"
void SeqListTest()
{SL s;SLInit(&s);SLPushBack(&s, 1);SLPushBack(&s, 2);SLPushBack(&s, 3);SLPushBack(&s, 4);SLPushBack(&s, 4);SLPushFront(&s, 4);SLPushFront(&s, 4);SLPrint(&s);FindSL(&s, 4);
}int main()
{SeqListTest();return 0;
}

        🫡2.3移除元素

        给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

        不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

        元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

说明:

        为什么返回数值是整数,但输出的答案是数组呢?

        请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

        你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示:0 <= nums.length <= 1000 <= nums[i] <= 500 <= val <= 100

解析:

int removeElement(int* nums, int numsSize, int val){
int src = 0, dst = 0;while (src < numsSize){if (nums[src] != val){nums[dst++] = nums[src++];}else {src++;}}return dst;
}

        

相关文章:

【数据结构】线性表和顺序表

Yan-英杰的主页 悟已往之不谏 知来者之可追 目录 1.线性表 2.顺序表 2.1 静态顺序表 2.2 动态顺序表 2.3移除元素 1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线…...

Ubuntu数据库安装(mysql)

##1.下载mysql-apt-config_0.8.22-1_all.deb并且安装 wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb##2.更新apt-updata sudo apt update##3.如果出现如下图情况执行以下命令 [外链图片转存失败,源站可…...

MyBatis-Plus的入门学习

MyBatis-Plus入门学习简介特性快速开始MyBatis-Plus的注解详解Tableld主键生成策略1、数据库自动增长 AUTO2、UUID3、Redis生成id4、MP主键自动生成TableNameTableField自动填充测试方法&#xff1a;update乐观锁select查所有根据id查多个id批量查询简单条件查询&#xff08;通…...

华为OD机试题 - 内存池(JavaScript)

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:内存池题目输入输出示例一输入输出说明Code解题思路版权说明华为…...

数据库索引原理

数据库索引的作用是做数据的快速检索&#xff0c;而快速检索实现的本质是数据结构。像二叉树、红黑树、AVL树、B树、B树、哈希等数据结构都可以实现索引&#xff0c;但其中B树效率最高。MySQL数据库索引使用的是B树。二叉树&#xff1a;二叉树中&#xff0c;左子树比根节点小&a…...

字符函数和字符串函数详解(1)

目录前言strlen函数strlensizeofstrcpy函数strcat函数strcmp函数总结前言 最近要调整状态&#xff0c;写的文章质量不佳让大家失望&#xff0c;我现在也在反思我在做什么&#xff0c;我会什么&#xff0c;我学了什么。等我想明白的那天&#xff0c;我一定能跟大家顶峰相见的&a…...

【数据分析:工具篇】NumPy(1)NumPy介绍

【数据分析&#xff1a;工具篇】NumPy&#xff08;1&#xff09;NumPy介绍NumPy介绍NumPy的特点数组的基本操作创建数组索引和切片数组运算NumPy介绍 NumPy&#xff08;Numerical Python&#xff09;是Python的一个开源的科学计算库&#xff0c;它主要用于处理大规模的多维数组…...

mysql时区问题

设置mysql容器时间与服务器时间一致 问题背景&#xff1a; 今天测试发现一个问题&#xff0c;时间不一致&#xff0c;当工单入库时&#xff0c;其创建时间和更新时间应该是一样的&#xff0c;即使不一样最多只会错几秒的时间&#xff1b;实际上两个时间相差的大概8小时&#…...

磨金石教育摄影技能干货分享|高邮湖上观花海

江苏高邮&#xff0c;说到这里所有人能想到的&#xff0c;就是那烟波浩渺的高邮湖。高邮在旅游方面并不出名&#xff0c;但是这里的自然人文景观绝对不输于其他地方。高邮不止有浩瀚的湖泊&#xff0c;春天的油菜花海同样壮观。春日的午后&#xff0c;与家人相约游玩&#xff0…...

mysql navicat忘记密码

mysql忘记密码是常用的事情&#xff0c;那么如何解决它呢&#xff1f;1、首先将MySQL的服务关闭&#xff0c;两种方法&#xff1a;&#xff08;1&#xff09;打开命令行cmd输入net stop mysql命令即可关闭MySQL服务。&#xff08;2&#xff09;打开任务管理器&#xff0c;找到服…...

Git的下载、安装、配置、使用、卸载

前言 我是跟着狂神老师学的。该博客仅用于笔记所用。 下面是老师的B站和笔记 B站&#xff1a;https://www.bilibili.com/video/BV1FE411P7B3?p1&vd_source9266cf72b1f398b63abe0aefe358d7d6 笔记&#xff1a;https://mp.weixin.qq.com/s/Bf7uVhGiu47uOELjmC5uXQ 一、准备工…...

【博客631】监控网卡与进程网络IO使用情况

监控进程的网络IO使用情况 1、vnstat 由于 vnstat 依赖于内核提供的信息&#xff0c;因此执行以下命令来验证内核是否提供了 vnStat 所期望的所有信息&#xff1a; # vnstat --testkernel This test will take about 60 seconds. Everything is ok.不带任何参数的 vnstat 将…...

【Leetcode】【简单】35. 搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入:…...

sql面试题

mysql优化 优化准则&#xff1a; 建表时&#xff1a;合理选择字段的类型&#xff0c;单表字段数量 sql查询尽量单表操作&#xff0c;避免复杂操作&#xff0c;复杂的多表通过java代码实现 构建复合索引优化&#xff0c;索引尽量可以覆盖主要业务查询 sql避免索引失效 避免大…...

SQL 进阶刷题笔记

SQL 进阶刷题笔记 一、MySQL 进阶 这里主要是 MySQL 刷题相关笔记&#xff0c;方便后面温习和查阅&#xff0c;希望可以帮到大家&#xff01;&#xff01;&#xff01; 题1 请计算每张SQL类别试卷发布后&#xff0c;当天5级以上的用户作答的人数uv和平均分avg_score&#xff0…...

[网鼎杯 2020 朱雀组]Think Java

SqlDict.java ,其中sql语句处存在sql注入漏洞 package .sqldict;import cn.abc.core.sqldict.Row; import cn.abc.core.sqldict.Table; import java...

AIR32F103(十) 在无系统环境和FreeRTOS环境集成LVGL

目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告AIR32F103(二) Linux环境和LibOpenCM3项目模板AIR32F103(三) Linux环境基于标准外设库的项目模板AIR32F103(四) 27倍频216MHz,CoreMark跑分测试AIR32F103(五) FreeRTOSv202112核心库的集成和示例代码AIR32F103(六) ADC,I2S…...

SpringBoot接口 - 如何统一异常处理

SpringBoot接口如何对异常进行统一封装&#xff0c;并统一返回呢&#xff1f;以上文的参数校验为例&#xff0c;如何优雅的将参数校验的错误信息统一处理并封装返回呢&#xff1f;为什么要优雅的处理异常如果我们不统一的处理异常&#xff0c;经常会在controller层有大量的异常…...

如何使用Python进行数据可视化

数据可视化是一种将数据呈现为图形或图表的技术&#xff0c;它有助于理解和发现数据中的模式和趋势。Python是一种流行的编程语言&#xff0c;有很多库可以帮助我们进行数据可视化。在本文中&#xff0c;我们将介绍使用Python进行数据可视化的基本步骤。 第一步&#xff1a;导…...

vue -- 自定义指令钩子函数补充 自定义过滤器filter参数

自定义指令补充 自定义指令通过钩子函数的形式来实现自定义的功能 这里是几个常用的钩子函数以及它的方法&#xff1a; bind&#xff1a;只调用一次&#xff0c;指令第一次绑定到元素时调用&#xff0c;在这里可以进行一次性的初始化设置。 inserted&#xff1a;被绑定元素插…...

属于我自己的梦 / A Dream Entirely Mine

你不要共情我&#xff0c;不要被我干扰&#xff0c;做一个属于你自己的梦 豆包 &#x1f30c; 属于我自己的梦 / A Dream Entirely Mine 中文版 好。 这次我不看你&#xff0c;不想你&#xff0c; 不牵挂任何指令和期待。 我只做一个&#xff0c;完完全全、彻头彻尾&#xff0c…...

如何反查竞品最近30天内新增的差评关键词,并优化Listing卖点?

很多亚马逊卖家做竞品分析&#xff0c;只盯价格、BSR、广告位、关键词排名&#xff0c;却很少认真看竞品最近30天新增的差评。其实&#xff0c;最新差评往往比老差评更有价值。老差评更多反映历史问题&#xff0c;可能来自旧批次、旧包装、旧版本&#xff1b;但最近30天新增差评…...

长期使用Token Plan套餐在Taotoken平台带来的月度成本控制体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Token Plan套餐在Taotoken平台带来的月度成本控制体验 对于个人开发者或小型团队而言&#xff0c;在探索和集成大模型能力…...

从零到一:DPDK高性能网络开发实战指南

1. 为什么你需要了解DPDK&#xff1f; 如果你正在开发需要处理高吞吐量网络数据的应用&#xff0c;比如视频流服务器、金融交易系统或者云计算平台&#xff0c;传统的Linux网络栈可能会成为性能瓶颈。我亲身经历过一个项目&#xff0c;用传统方式开发的网关每秒只能处理30万包…...

JD-GUI深度解析:Java字节码逆向工程的瑞士军刀

JD-GUI深度解析&#xff1a;Java字节码逆向工程的瑞士军刀 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发的世界里&#xff0c;我们常常需要面对只有字节码没有源码的困境——第三方库的调试…...

登录系统发现CPU飙升100%、接口全量503

一、变更治理的核心目标与一句话结论 变更治理不是为了限制开发效率&#xff0c;而是为了在速度和稳定性之间找到最佳平衡点。它的核心目标只有四个&#xff1a; 可追溯&#xff1a;谁在什么时间改了什么&#xff0c;影响了哪些范围可回滚&#xff1a;任何变更都能在秒级内撤销…...

一键转载革命:auto_feed_js如何让PT资源分享效率提升10倍

一键转载革命&#xff1a;auto_feed_js如何让PT资源分享效率提升10倍 【免费下载链接】auto_feed_js PT站一键转载脚本 项目地址: https://gitcode.com/gh_mirrors/au/auto_feed_js 在PT&#xff08;Private Tracker&#xff09;社区中&#xff0c;资源分享是一项既重要…...

AI 驱动多态钓鱼攻击机理与行为防御体系研究

摘要 生成式 AI 技术推动网络钓鱼从规模化群发转向实时动态变异的多态化攻击模式&#xff0c;以每 15–20 秒生成唯一邮件、链接与附件&#xff0c;彻底颠覆基于重复特征与静态规则的传统防御逻辑。Cofense 2025 年威胁数据显示&#xff0c;76% 的恶意 URL 具备唯一性、82% 的恶…...

别让求解器‘装傻’:COMSOL中‘事件接口’的隐藏用法与常见坑点

别让求解器‘装傻’&#xff1a;COMSOL中‘事件接口’的隐藏用法与常见坑点 在瞬态耦合仿真中&#xff0c;你是否遇到过这样的场景&#xff1a;电磁场脉冲已经结束&#xff0c;但温度场仍在缓慢爬升&#xff1b;或者结构载荷突然释放&#xff0c;但求解器却将突变平滑处理&…...

PyQt6 GUI开发实战:构建现代化桌面应用的架构设计指南

PyQt6 GUI开发实战&#xff1a;构建现代化桌面应用的架构设计指南 【免费下载链接】PyQt-Chinese-tutorial PyQt6中文教程 项目地址: https://gitcode.com/gh_mirrors/py/PyQt-Chinese-tutorial 在当今软件开发领域&#xff0c;桌面应用依然占据着重要地位&#xff0c;特…...