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

备考蓝桥杯:顺序表详解(静态顺序表,vector用法)

目录

1.顺序表的概念

2.静态顺序表的实现

总代码

3.stl库动态顺序表vector

测试代码


1.顺序表的概念

要理解顺序表,我们要先了解一下什么是线性表

线性表是n个具有相同特征的数据元素的序列

这就是一个线性表 a1是表头 a4是表尾 a2是a3的前驱 a3是a2的后继

空表表示一个元素也没有,用空寂表示

用顺序存储的方式实现的线性表就叫顺序表

用链式存储的方式实现的线性表就是链表

2.静态顺序表的实现

由于实现动态顺序表要很多很多delete和new,消耗很多的时间复杂度,而且我们已经有vecor这个东西了,所以我们就不实现动态的顺序表了,我们只实现一下静态顺序表

创建静态顺序表

const int N = 1e6 + 10;
int a[N],n;

静态顺序表的尾插

void push_back(int x)
{a[++n]=x;
}

测试尾插

由此可见,尾插的时间复杂度为O(1)

静态顺序表的头插

void push_front(int x)
{//我们头插要把所有元素向右移动一位,给我们要插入的元素腾出位置出来//但是如果我们从第一个元素右移,就会有覆盖的情况,所以我们从最后一个元素开始右移//把[1,n]的元素统一后移1位 for(int i = n;i>=1;i--){a[i+1] = a[i];} a[1] = x;n++; 
}

头插的时间复杂度是O(N)

测试头插

任意位置插入

void insert(int p,int x)
{//和我们头插保持一致,在p之前插入 ,头插是在下标为0之前插入//把[p,n]的元素统一右移 for(int i =n;i>=p;i--) {a[i+1] = a[i];}a[p] = x;
}

最坏情况下就是头插,所以我们的时间复杂度还是O(N)

测试任意位置插入

尾删

我们直接把有效元素减1,就能实现尾删操作,我们尾删的时间复杂度是O(1)

void pop_back()
{n--;} 

测试尾删

头删

void pop_front()
{for(int i = 2;i<=n;i++){a[i-1] = a[i];}n--;}

我们头删的时间复杂度是O(N)

测试代码

任意位置删除

void erase(int p)
{for(int i = p+1;i<=n;i++){a[i-1] = a[i];}n--;
}

按值查找

int find(int x)
{for(int i = 1;i<=n;i++){if(a[i]==x)return i;}
return 0;
}

测试查找操作

按位查找

int at(int p)
{return a[p];
}

清空操作

void clear()
{n = 0;
}

修改操作

void change(int p,int x)
{a[p] = x;
}

总代码

#include <iostream>
using namespace std;const int N = 1e6 + 10;
int a[N],n;
void push_back(int x)
{a[++n]=x;
}
void push_front(int x)
{//我们头插要把所有元素向右移动一位,给我们要插入的元素腾出位置出来//但是如果我们从第一个元素右移,就会有覆盖的情况,所以我们从最后一个元素开始右移//把[1,n]的元素统一后移1位 for(int i = n;i>=1;i--){a[i+1] = a[i];} a[1] = x;n++; 
}
void insert(int p,int x)
{//和我们头插保持一致,在p之前插入 ,头插是在下标为0之前插入//把[p,n]的元素统一右移 for(int i =n;i>=p;i--) {a[i+1] = a[i];}a[p] = x;
}
void pop_back()
{n--;} 
void Print()
{for(int i = 1;i<=n;i++){cout << a[i] << " ";}cout << endl;
}
void pop_front()
{for(int i = 2;i<=n;i++){a[i-1] = a[i];}n--;}
void erase(int p)
{for(int i = p+1;i<=n;i++){a[i-1] = a[i];}n--;
}
int find(int x)
{for(int i = 1;i<=n;i++){if(a[i]==x)return i;}return 0;
}
void clear()
{n = 0;
}
void change(int p,int x)
{a[p] = x;
}int at(int p)
{return a[p];
}
int main()
{push_back(2);Print();push_back(5);push_back(1);push_back(3);Print();push_front(10);Print();insert(3,0);Print();
//	cout << "尾删" << ": ";
//	pop_back();
//	Print();
//	cout << "头删" << ": ";
//	pop_front();
//	Print();
//cout << "删除" << ":";
//erase(3);
//Print(); 
for(int i = 1;i<=10;i++)
{cout << "查找" << i << ":";cout << find(i)<<" ";} 
}

3.stl库动态顺序表vector

创建vector

除此之外,我们vector的<>里还可以放stl和各种数据类型,vector<int> a[5]表示的就是创建一个元素为vector <int>的数组

三种打印方式 1 size()返回元素个数

2.迭代器

3.范围for

resize(可以扩充元素个数,也可以缩容)

扩大的元素值默认为0

尾插和尾删,和上面静态的差不多的

不多陈述

empty()判空

front和back分别是取头元素和尾元素

clear()清空元素

测试代码

#include <iostream>
#include <vector>
using namespace std;
const int N = 10;
void Print(vector<int>& pa)
{//用size返回元素个数for (int i = 0; i < pa.size(); i++){cout << pa[i] << " ";}cout << endl;//用begin() end()迭代器
//	for (auto it = pa.begin(); it != pa.end(); it++)
//	{
//		cout << *it << " ";
//	}
//	cout << endl;
//	//范围for (C++11支持)
//	for (auto e : pa)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}
}int main()
{vector <int> a1;//创建一个a1 的可变长数组,size为0vector <int> a2(N);//创建一个a2的可变长数组,size为N,元素值初始化为0vector <int> a3(N, 2);//创建一个a3的可变长数组,size为N 元素初始化为2vector <int> a4 = { 1,2,3,4,5 };vector <string> s1;vector <int> a[5];vector <int> aa(5, 1);aa.resize(10);aa.resize(3);for (int i = 3; i <= 6; i++){a1.push_back(i);}Print(a1);a1.pop_back();cout << "头为" << a1.front() << "尾为" << a1.back();Print(a1);//while (!a1.empty())//{//	a1.pop_back();//}a1.clear();cout << a1.size() << endl;return 0;
}

相关文章:

备考蓝桥杯:顺序表详解(静态顺序表,vector用法)

目录 1.顺序表的概念 2.静态顺序表的实现 总代码 3.stl库动态顺序表vector 测试代码 1.顺序表的概念 要理解顺序表&#xff0c;我们要先了解一下什么是线性表 线性表是n个具有相同特征的数据元素的序列 这就是一个线性表 a1是表头 a4是表尾 a2是a3的前驱 a3是a2的后继 空…...

OA系统如何做好DDOS防护

OA系统如何做好DDOS防护&#xff1f;在数字化办公蔚然成风的当下&#xff0c;OA&#xff08;办公自动化&#xff09;系统作为企业内部管理与协作的神经中枢&#xff0c;其安全性和稳定性直接关系到企业的日常运营效率、信息流通效率以及长远发展。OA系统不仅承载着企业内部的日…...

使用 Python 的 pyttsx3 库进行文本转语音

1. 什么是 pyttsx3&#xff1f; 1.1 pyttsx3 是一个 Python 库&#xff0c;它可以将文本转换为语音。与其他文本转语音库&#xff08;如 gTTS&#xff09;不同&#xff0c;pyttsx3 不依赖于网络服务&#xff0c;它使用本地的 TTS&#xff08;Text-to-Speech&#xff09;引擎&a…...

如何在Windows上编译OpenCV4.7.0

前言 ​ 参考&#xff1a;Win10 下编译 OpenCV 4.7.0详细全过程&#xff0c;包含xfeatures2d 这里在其基础上还出现了一些问题&#xff0c;仅供参考。 正文 一、环境 1、win10 2、cmake-gui 3、opencv4.7.0 4、VS2019 二、编译过程 1、下载需要的文件&#xff1a; 通…...

【玩转全栈】----Django连接MySQL

阅前先赞&#xff0c;养好习惯&#xff01; 目录 1、ORM框架介绍 选择建议 2、安装mysqlclient 3、创建数据库 4、修改settings&#xff0c;连接数据库 5、对数据库进行操作 创建表 删除表 添加数据 删除数据 修改&#xff08;更新&#xff09;数据&#xff1a; 获取数据 1、OR…...

25/1/4 算法笔记<强化学习> 生成对抗模仿学习

基于生成对抗网络的模仿学习&#xff0c;假设存在一个专家智能体&#xff0c;其策略可以看成最优策略&#xff0c;我们就可以通过直接模仿这个专家在环境中交互的动作数据来训练一个策略&#xff0c;并不需要用到环境提供的奖励信息。 生成对抗模仿学习GAIL实质上就是模仿了专家…...

Flink维表方案选型

Iceberg Iceberg 采用全量预加载数据的方式将维度表数据全部加载到内存中进行关联&#xff0c;虽然可以避免频繁访问外部数据库&#xff0c;但对计算节点的内存消耗很高&#xff0c;不能适用于数量很大的维度表。除此之外&#xff0c;当 Iceberg 维表数据更新后&#xff0c;可…...

Oracle Database 23ai 新特性: UPDATE 和 DELETE 语句的直接联接

Oracle Database 23c 引入了一系列令人振奋的新特性&#xff0c;其中一项尤为引人注目的是对 UPDATE 和 DELETE 语句支持直接联接&#xff08;Direct Join&#xff09;。这一新功能极大地简化了复杂数据操作的实现&#xff0c;提升了性能&#xff0c;并为数据库开发者提供了更强…...

机器学习之随机森林算法实现和特征重要性排名可视化

随机森林算法实现和特征重要性排名可视化 目录 随机森林算法实现和特征重要性排名可视化1 随机森林算法1.1 概念1.2 主要特点1.3 优缺点1.4 步骤1.5 函数及参数1.5.1 函数导入1.5.2 参数 1.6 特征重要性排名 2 实际代码测试 1 随机森林算法 1.1 概念 是一种基于树模型的集成学…...

网络安全图谱以及溯源算法

​ 本文提出了一种网络攻击溯源框架&#xff0c;以及一种网络安全知识图谱&#xff0c;该图由六个部分组成&#xff0c;G <H&#xff0c;V&#xff0c;A&#xff0c;E&#xff0c;L&#xff0c;S&#xff0c;R>。 1|11.知识图 ​ 网络知识图由六个部分组成&#xff0c…...

单片机-外部中断

中断是指 CPU 在处理某一事件 A 时&#xff0c;发生了另一事件 B&#xff0c;请求 CPU 迅速去处理(中断发生)&#xff1b;CPU 暂时停止当前的工作(中断响应)&#xff0c; 转去处理事件 B(中断服务)&#xff1b;待 CPU 将事件 B 处理完毕后&#xff0c;再回到原来事件 A 被中断的…...

《解锁计算机视觉智慧:编程实现图片场景文字描述的开源宝藏》

《解锁计算机视觉智慧&#xff1a;编程实现图片场景文字描述的开源宝藏》 一、MiniGPT-4&#xff1a;小模型撬动大视觉理解&#xff08;一&#xff09;项目概览&#xff08;二&#xff09;核心亮点&#xff08;三&#xff09;上手体验 二、ClipCap-Chinese&#xff1a;中文场景…...

onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制

文章目录 1. 页面跳转方式2. 你的场景分析3. 页面生命周期4. 总结5. 建议 在微信小程序中&#xff0c;页面跳转时&#xff0c; onLoad 生命周期函数是否执行取决于跳转的方式和小程序的页面栈管理机制。以下是详细说明&#xff1a; 1. 页面跳转方式 微信小程序提供了多种页面…...

Visio 画阀门 符号 : 电动阀的画法

本篇文章介绍阀门&#xff0c;很多朋友在利用Visio绘画管道流程简图时&#xff0c;需要进行阀门符号的绘画&#xff0c;而Visio提供的阀门符号种类并不是很齐全。 本篇文章给出电动阀的画法&#xff1a; 下图是液动阀的符号&#xff1a; 首先&#xff0c;找到“更多形状”中的…...

OOM排查思路

K8S 容器的云原生生态&#xff0c;改变了服务的交付方式&#xff0c;自愈能力和自动扩缩等功能简直不要太好用。 有好的地方咱要夸&#xff0c;不好的地方咱也要说&#xff0c;真正的业务是部署于容器内部&#xff0c;而容器之外&#xff0c;又有一逻辑层 Pod 。 对于容器和…...

《Spring Framework实战》10:4.1.4.2.详细的依赖和配置

欢迎观看《Spring Framework实战》视频教程 集合 <list/>、<set/>、<map/>和<props/>元素分别设置Java集合类型list、set、map和properties的属性和参数。以下示例显示了如何使用它们&#xff1a; <bean id"moreComplexObject" class&qu…...

网络安全-XSS跨站脚本攻击(基础篇)

漏洞扫描的原理 1.跨站脚本攻击介绍 xss跨站脚本攻击&#xff1a; xSS 全称&#xff08;Cross site Scripting &#xff09;跨站脚本攻击&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年度分别为第三名和第七名&#xff0c;XSS是指攻…...

Git的学习和常见问题

文章目录 1.初始化配置2.新建仓库3.添加和提交文件4.git reset 回退版本5.git diff 查看差异6.git rm 删除文件7.文件 .gitigonre8.克隆远程仓库9.将已有的本地仓库关联到远程仓库10.分支的基本操作11.解决合并冲突配置问题 最近基于GeekHour的视频学习Git&#xff0c;记录了一…...

Flink源码解析之:Flink on k8s 客户端提交任务源码分析

Flink on k8s 客户端提交任务源码分析 当我们需要在代码中提交Flink job到kubernetes上时&#xff0c;需要如何做呢&#xff1f;要引入什么第三方依赖&#xff1f;需要提供什么内容&#xff1f;flink是如何将job提交到k8s上的&#xff1f;经过了什么样的流程&#xff0c;内部有…...

STLG_02_02_MS SQL - SSMS的安装和使用

SQL Server Management Studio (SSMS) 是 Microsoft 提供的一个集成环境&#xff0c;用于管理、开发和维护 SQL Server 数据库和 Analysis Services 数据库。 一、安装 SSMS 下载 SSMS: 访问 Microsoft 官方网站的 SSMS 下载页面。选择适合你操作系统的版本进行下载。SSMS 支持…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...