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

C28.【C++ Cont】顺序表的实现

🧨🧨🧨🧨🧨🧨🧨🧨🧨初二篇🧨🧨🧨🧨🧨🧨🧨🧨🧨

目录

1.知识回顾

2.静态方式实现顺序表

创建和初始化

打印

尾插

头插

任意位置插入

尾删

头删

任意位置删除

查找指定下标位置的元素(即随机访问,不需要从数组的起始位置逐个遍历)

查找指定的值是否存在

修改元素

清空顺序表

3.封装静态顺序表

4.测试代码

运行结果


1.知识回顾

82.【C语言】数据结构之顺序表的初始化和销毁

83.【C语言】数据结构之顺序表的尾部插入和删除

84.【C语言】数据结构之顺序表的头部插入和删除

85.【C语言】数据结构之顺序表的中间插入和删除及遍历查找

上面是用动态申请的方法实现的,在竞赛中不使用,竞赛中使用STL库,下篇会讲

2.静态方式实现顺序表

在竞赛中由于动态申请内存空间操作过多(空间的申请和释放,数据的拷贝)运行速度慢,效率低,因此使用静态实现,创建一个足够大空间的数组

实现时注意特殊情况:

1.顺序表已满,不能插入

2.无论是指定位置插入、删除还是修改,指定位置index的取值一定要合理!

3.空表不能删除

创建和初始化

const int N = 1e6;//控制数组的大小,按实际情况而定
class SeqList
{int a[N];int num;//记录数组元素的个数
public:SeqList()//构造函数初始化{num = 0;}//......
}

下面直接写自定义函数

打印

	void print_seqlist(){if (num == 0){cout << "NULL" << endl;return;}for (int i = 0; i < num; i++){cout << arr[i] << " ";}cout << endl;}

尾插

	void push_back(int data)//尾插{if (num > N){cout << "顺序表已满,禁止尾插" << endl;return;}arr[++num] = data;//注意是前置++!!!}

注意是前置++!!!

头插

从后向前覆盖

	void push_front(int data)//头插{if (num > N){cout << "顺序表已满,禁止头插" << endl;return;}for (int i = num; i >= 0; i--){arr[i+1] = arr[i];//最后一次是arr[0]=arr[1],以此来确定循环结束的条件}arr[0] = data;num++;}

任意位置插入

	void insert(int index, int data)//中间插入,在index处插入(index最小取0){if (num > N){cout << "顺序表已满,禁止头插" << endl;return;}if (index < 0 || index >= num)//排除index的非法取值{cout << "index的取值非法,禁止插入" << endl;return;}for (int i = num; i >= index; i--){arr[i + 1] = arr[i];//最后一次是arr[index+1]=arr[index],以此来确定循环结束的条件}arr[index] = data;num++;}

尾删

	void pop_back()//尾删{if (num == 0){cout << "顺序表为空,禁止尾删" << endl;return;}num--;//不用改动arr[num-1]}

头删

	void pop_front()//头删{if (num == 0){cout << "顺序表为空,禁止尾删" << endl;return;}for (int i = 1; i <= num-1; i++){arr[i-1] = arr[i];//最后一次为arr[num-2]=arr[num-1],以此来确定循环结束的条件}num--;}

任意位置删除

	void erase(int index)//任意位置index删除{if (index < 0 || index >= num){cout << "index的取值非法, 禁止删除" << endl;return;}if (num == 0){cout << "顺序表为空,禁止删除" << endl;return;}for (int i = index+1; i <= num-1; i++){arr[i - 1] = arr[i];//最后一次是arr[num-2]=arr[num-1],以此来确定循环结束的条件}num--;}

查找指定下标位置的元素(即随机访问,不需要从数组的起始位置逐个遍历)

	int find_index(int index)//查找指定下标位置的元素{if (index < 0 || index >= num){cout << "index的取值非法, 无法查找" << endl;return -1;}if (num == 0){cout << "顺序表为空, 无法查找" << endl;return -1;}return arr[index];}

查找指定的值是否存在

	void find_data(int data)//查找指定的值是否存在{if (num == 0){cout << "顺序表为空, 无法查找" << endl;return;}for (int i = 0; i < num; i++){if (arr[i] == data){cout << data << "在下标为" << i << "处" << endl;}}}

修改元素

void change(int index, int data)//修改指定下标处的元素
{if (num == 0){cout << "顺序表为空, 无法修改" << endl;return;}if (index < 0 || index >= num){cout << "index的取值非法, 无法查找" << endl;return;}arr[index] = data;
}

清空顺序表

写入析构函数

	~SeqList(){num = 0;}

3.封装静态顺序表

直接使用结构体或类封装

const int N = 1e2;//控制数组的大小,按实际情况而定
class SeqList
{int arr[N];int num;//记录数组元素的个数public:SeqList()//构造函数初始化{num = 0;}void print_seqlist(){//......}void push_back(int data)//尾插{//......}void push_front(int data)//头插{//......}void insert(int index, int data)//中间插入,在index处插入(index最小取0){//......}void pop_back()//尾删{//......}void pop_front()//头删{//......}void erase(int index)//任意位置index删除{//......}int find_index(int index)//查找指定下标位置的元素{//......}void find_data(int data)//查找指定的值是否存在{//......}void change(int index, int data)//修改指定下标处的元素{//......}~SeqList(){num = 0;}
};

4.测试代码

int main()
{SeqList sq;sq.push_front(2);sq.push_front(1);sq.push_front(3);sq.push_front(4);sq.print_seqlist();sq.pop_front();sq.pop_front();sq.pop_front();sq.pop_front();sq.pop_front();sq.insert(2, 5);sq.erase(2);sq.print_seqlist();sq.push_front(2);sq.push_front(1);sq.push_front(3);sq.push_front(4);sq.insert(2, 5);sq.erase(2);sq.print_seqlist();
}

类似上方代码,STL也可以通过 "." 调用各种各样的接口

运行结果

🎉❤️🎉❤️🎉❤️🎉❤️🎉❤️祝各位码农们蛇年大吉 巳巳如意!❤️🎉❤️🎉❤️🎉❤️🎉❤️🎉

相关文章:

C28.【C++ Cont】顺序表的实现

&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;初二篇&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8;&#x1f9e8; 目录 1.知识回顾…...

【电工基础】低压电器元件,低压断路器(空开QF),接触器(KM)

一.低压电器元件定义 电器可分为高压电器和低压电器两大类&#xff0c;我国现行标准是将工作在交流1200V(50Hz)以下、直流1500V以下的电器设备称为低压电器。 二.低压断路器&#xff0c;空开&#xff0c;空气断路器 1.空开图片与使用方式 当电路中发生严重过载、短路及失压等故…...

从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案

在编程世界里&#xff0c;从 UTC 日期时间字符串获取 Unix 时间戳&#xff0c;看似简单&#xff0c;实则暗藏玄机。你以为输入一个像 “Fri, 17 Jan 2025 06:07:07” 这样的 UTC 时间&#xff0c;然后轻松得到 1737094027&#xff08;从 1970 年 1 月 1 日 00:00:00 UTC 开始经…...

[前端开发]记录国内快速cdn库,用于在线引入JavaScript第三方库

字节跳动的两个库,官网地址如下,搜索时优先找第一个,可用来链接axios,Boostrap等等第三方库 1. 字节跳动静态资源公共库 比如说搜索lodash,用于节流防抖的库,点击复制即可,一般是****.js或****.min.js这样的为后缀名的链接 点击复制即可, <script src"https://lf9-cd…...

留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB

您列出了一系列编程语言和技术&#xff0c;这些可能是您在留学期间需要学习或完成作业的内容。以下是对每个项目的简要说明和它们可能涉及的领域或用途&#xff1a; Scratch&#xff1a; Scratch是一种图形化编程语言&#xff0c;专为儿童和初学者设计&#xff0c;用于教授编程…...

CF 766A.Mahmoud and Longest Uncommon Subsequence(Java实现)

题目分析 (小何同学语文不太好&#xff0c;看这个题弯弯绕绕&#xff0c;看不懂一点&#xff0c;哈哈哈。)在尝试示例中分析之后&#xff0c;题目的意思大概就是&#xff0c;两个字符串相同就输出-1&#xff0c;不同就输出最长的那个字符串长度 思路分析 数据输入存值之后&…...

React 的 12 个核心概念

文章目录 一、JSX&#xff1a;逻辑与视图的桥梁二、组件&#xff1a;模块化构建的核心三、Props&#xff1a;单向数据流的基石四、State&#xff1a;动态交互的核心五、useEffect&#xff1a;副作用管理的利器六、Context&#xff1a;跨层级数据共享的利器七、React.memo&#…...

玩转大语言模型——使用langchain和Ollama本地部署大语言模型

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…...

【数据结构】(2)时间、空间复杂度

一、衡量算法好坏的指标 时间复杂度衡量算法的运行速度&#xff0c;空间复杂度衡量算法所需的额外空间。这些指标&#xff0c;是某场景中选择使用哪种数据结构和算法的依据。如今&#xff0c;计算机的存储器已经变得容易获得&#xff0c;所以不再太关注空间复杂度。 二、渐进表…...

分享14分数据分析相关ChatGPT提示词

数据分析 在研究过程中数据分析扮演着至关重要的角色&#xff0c;它能够帮助研究者从海量数据中提取有价值的信息&#xff0c;从而为研究结论提供坚实的依据。而ChatGPT在数据分析领域展现出了强大的辅助能力&#xff0c;为研究者提供了全方位的支持。当研究者提供清晰且具体的…...

dify实现原理分析-rag-数据检索的实现

数据检索的总体执行步骤 数据检索总体步骤如下&#xff1a; #mermaid-svg-YCRNdSE7T1d0Etyj {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-YCRNdSE7T1d0Etyj .error-icon{fill:#552222;}#mermaid-svg-YCRNdSE7T1d…...

Day30-【AI思考】-错题分类进阶体系——12维错误定位模型

文章目录 错题分类进阶体系——12维错误定位模型**一、认知层错误&#xff08;根源性缺陷&#xff09;****二、操作层错误&#xff08;执行过程偏差&#xff09;****三、心理层错误&#xff08;元认知障碍&#xff09;****四、进阶错误&#xff08;专业级陷阱&#xff09;** 错…...

全国31省空间权重矩阵(地理相邻空间、公路铁路地理距离空间、经济空间)权重矩阵数据-社科数据

中国31个省份空间权重矩阵-社科数据https://download.csdn.net/download/paofuluolijiang/90028597 https://download.csdn.net/download/paofuluolijiang/90028597 空间权重矩阵是反映个体在空间中依赖关系的矩阵&#xff0c;本数据计算全国31个省三种标准化处理的空间权重矩…...

Docker容器数据恢复

Docker容器数据恢复 1 创建mongo数据库时未挂载数据到宿主机2 查找数据卷位置3 将容器在宿主机上的数据复制到指定目录下4 修改docker-compose并挂载数据&#xff08;注意端口&#xff09;5 重新运行新容器 以mongodb8.0.3为例。 1 创建mongo数据库时未挂载数据到宿主机 versi…...

Visual Studio使用GitHub Copilot提高.NET开发工作效率

GitHub Copilot介绍 GitHub Copilot 是一款 AI 编码助手&#xff0c;可帮助你更快、更省力地编写代码&#xff0c;从而将更多精力集中在问题解决和协作上。 GitHub Copilot Free包含哪些功能&#xff1f; 每月 2000 代码补全&#xff0c;帮助开发者快速完成代码编写。 每月 …...

【matlab】绘图 离散数据--->连续函数

matlab绘图练习 离散数据及离散函数对离散区间进行细划分 达到连续效果画plot(y)图 与 复数的应用 离散数据及离散函数 例1 x1[1 2 4 6 7 8 10 11 12 14 16 17 18 20] y1[1 2 4 6 7 8 10 10 8 7 6 4 2 1] figure(1); plot(x1,y1,o,MarkerSize,15); x21:20; y2log(x2); figure…...

Python大数据可视化:基于python的电影天堂数据可视化_django+hive

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 电影数据 看板展示 我的信息 摘要 电影天堂数据可视化是…...

几种K8s运维管理平台对比说明

目录 深入体验**结论**对比分析表格**1. 功能对比****2. 用户界面****3. 多租户支持****4. DevOps支持** 细对比分析1. **Kuboard**2. **xkube**3. **KubeSphere**4. **Dashboard****对比总结** 深入体验 KuboardxkubeKubeSphereDashboard 结论 如果您需要一个功能全面且适合…...

YOLO11/ultralytics:环境搭建

前言 人工智能物体识别行业应该已经饱和了吧&#xff1f;或许现在并不是一个好的入行时候。 最近看到了各种各样相关的扩展应用&#xff0c;为了理解它&#xff0c;我不得不去尝试了解一下。 我选择了git里非常受欢迎的yolo系列&#xff0c;并尝试了最新版本YOLO11或者叫它ultr…...

Effective Objective-C 2.0 读书笔记—— 消息转发

Effective Objective-C 2.0 读书笔记—— 消息转发 文章目录 Effective Objective-C 2.0 读书笔记—— 消息转发前言消息转发机制概述动态方法解析处理dynamic的属性用于懒加载 消息转发快速消息转发完整消息转发 总结 前言 在前面我学习了关联对象和objc_msgSend的相关内容&a…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...