C++-----线性结构

C++线性结构模板

  • 概念:线性结构是一种数据元素之间存在一对一线性关系的数据结构,如数组、链表、栈、队列等。C++中的模板可以让我们编写通用的代码,适用于不同的数据类型,而不必为每种数据类型都重复编写相同的代码结构。
  • 作用:通过使用模板,我们可以创建出可重用、灵活的线性结构代码,提高代码的可维护性和效率。例如,我们可以编写一个通用的线性表模板类,然后根据需要实例化为存储不同类型数据的线性表,如整数线性表、字符串线性表等。

栈的实现

  • 概念:栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作,这一端被称为栈顶,另一端则被称为栈底。栈遵循后进先出(LIFO)的原则,即最后插入的元素最先被删除。
  • 实现方法
    • 顺序存储实现:可以使用数组来实现栈。定义一个数组来存储栈元素,以及一个变量来记录栈顶元素的位置。入栈操作就是将元素放入数组中栈顶位置的下一个位置,并更新栈顶位置;出栈操作则是取出栈顶元素,并将栈顶位置减1。
    • 链式存储实现:通过链表来实现栈。定义一个链表节点结构体,包含数据域和指向下一个节点的指针域。入栈操作就是在链表头部插入新节点,出栈操作则是删除链表头部节点。

队列的实现

  • 概念:队列也是一种线性表,它允许在表的一端进行插入操作,在另一端进行删除操作。插入元素的一端称为队尾,删除元素的一端称为队头。队列遵循先进先出(FIFO)的原则,即最先插入的元素最先被删除。
  • 实现方法
    • 顺序存储实现:使用数组来实现队列时,需要定义两个指针,一个指向队头,一个指向队尾。入队操作就是将元素放入队尾指针所指的位置,并更新队尾指针;出队操作则是取出队头指针所指的元素,并更新队头指针。为了避免队列空间的浪费和实现循环队列,通常需要对数组进行一些特殊的处理。
    • 链式存储实现:通过链表来实现队列,定义一个链表节点结构体,包含数据域和指向下一个节点的指针域。入队操作就是在链表尾部插入新节点,出队操作则是删除链表头部节点。

矢量类的实现

  • 概念:矢量类通常指的是类似于C++标准库中的std::vector的类,它是一个动态大小的数组,可以方便地进行元素的插入、删除和访问等操作。
  • 实现方法
    • 成员变量:通常需要定义一个指针来指向存储元素的数组,以及一个变量来记录当前数组的大小和容量。
    • 构造函数和析构函数:构造函数用于初始化矢量类的对象,可能包括分配内存、设置初始大小等操作。析构函数则用于释放动态分配的内存。
    • 元素访问:可以通过重载下标运算符[]来实现对矢量中元素的访问,还可以提供at()函数进行边界检查的访问。
    • 插入和删除操作:提供push_back()函数在矢量末尾插入元素,insert()函数在指定位置插入元素,erase()函数删除指定位置的元素等。
    • 其他操作:还可以实现获取矢量大小、容量、判断是否为空等操作,以及对矢量进行排序、查找等算法的封装。

下面是一个简单的栈的顺序存储实现示例代码:

template<typename T, int MAX_SIZE>
class Stack {
private:T data[MAX_SIZE];int top;public:Stack() : top(-1) {}bool isEmpty() const {return top == -1;}bool isFull() const {return top == MAX_SIZE - 1;}void push(const T& value) {if (isFull()) {throw std::runtime_error("Stack is full");}data[++top] = value;}T pop() {if (isEmpty()) {throw std::runtime_error("Stack is empty");}return data[top--];}T peek() const {if (isEmpty()) {throw std::runtime_error("Stack is empty");}return data[top];}
};

在这里插入图片描述

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

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

相关文章

探究音频丢字位置和丢字时间对pesq分数的影响

丢字的本质 丢字的本质是在一段音频中一小段数据变为0 丢字对主观感受的影响 1. 丢字位置 丢字的位置对感知效果有很大影响。如果丢字发生在音频信号的静音部分或低能量部分&#xff0c;感知可能不明显&#xff1b;而如果丢字发生在高能量部分或关键音素上&#xff0c;感知…

支持向量机入门指南:从原理到实践

目录 1 支持向量机的基本概念 1.2 数学表达 2 间隔与支持向量 2.1 几何间隔 2.2 支持向量的概念 2.3 规范化超平面 2.4 支持向量的深入分析 2.4.1 支持向量的特征 2.4.2 支持向量的作用 2.4.3 支持向量的代数表示 2.5 KKT条件 3 最优化问题 3.1 问题的形成 3.2 规…

使用Webpack构建微前端应用

英文社区对 Webpack Module Federation 的响应非常热烈&#xff0c;甚至被誉为“A game-changer in JavaScript architecture”&#xff0c;相对而言国内对此热度并不高&#xff0c;这一方面是因为 MF 强依赖于 Webpack5&#xff0c;升级成本有点高&#xff1b;另一方面是国内已…

SQLite本地数据库的简介和适用场景——集成SpringBoot的图文说明

前言&#xff1a;现在项目普遍使用的数据库都是MySQL&#xff0c;而有些项目实际上使用SQLite既足矣。在一些特定的项目中&#xff0c;要比MySQL更适用。 这一篇文章简单的介绍一下SQLite&#xff0c;对比MySQL的优缺点、以及适用的项目类型和集成SpringBoot。 1. SQLite 简介 …

游戏引擎学习第62天

回顾 我们目前正在开发一把虚拟剑&#xff0c;目的是让角色可以用这把剑进行攻击。最初的工作中&#xff0c;我们使用了一个摇滚位图作为虚拟剑的模型&#xff0c;并且实现了一个基本的功能&#xff1a;角色可以丢下剑。但这个功能并没有达到预期的效果&#xff0c;因为我们想…

spring专题笔记(六):bean的自动装配(自动化注入)-根据名字进行自动装配、根据类型进行自动装配。代码演示,通俗易懂。

目录 一、根据名字进行自动装配--byName 二、根据类型进行自动装配 byType 本文章主要是介绍spring的自动装配机制&#xff0c; 用代码演示spring如何根据名字进行自动装配、如何根据类型进行自动装配。代码演示&#xff0c;通俗易懂。 一、根据名字进行自动装配--byName Us…

petalinux 中 cmake 需要用到的环境变量

自定义修改部分环境变量, 实测可用

深入解析MySQL索引结构:从数组到B+树的演变与优化

前言&#xff1a; 在数据库查询中&#xff0c;索引是一种关键的性能优化工具。然而&#xff0c;索引的失效可能导致查询效率大幅下降。为了更好地理解索引的工作原理及规避其失效&#xff0c;深入了解索引结构的演变过程尤为重要。 MySQL 的索引数据结构从简单到复杂&#xff0…

43. Three.js案例-绘制100个立方体

43. Three.js案例-绘制100个立方体 实现效果 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; WebGLRenderer是Three.js中最常用的渲染器之一&#xff0c;用于将3D场景渲染到网页上。 构造器 WebGLRenderer(parameters : Object) 参数类型描述parametersObject…

Python vs PHP:哪种语言更适合网页抓取

本文将比较 Python 和 PHP&#xff0c;以帮助读者确定哪种语言更适合他们的需求。文章将探讨两种语言的优点和缺点&#xff0c;并根据读者的经验水平分析哪种语言可能更容易上手。接下来&#xff0c;文章将深入探讨哪种语言在抓取网页数据方面更胜一筹。 简而言之&#xff0c;…

python+reportlab创建PDF文件

目录 字体导入 画布写入 创建画布对象 写入文本内容 写入图片内容 新增页 画线 表格 保存 模板写入 创建模板对象 段落及样式 表格及样式 画框 图片 页眉页脚 添加图形 构建pdf文件 reportlab库支持创建包含文本、图像、图形和表格的复杂PDF文档。 安装&…

打造两轮差速机器人fishbot:从零开始构建移动机器人

大家好&#xff0c;我是梦笔生花&#xff0c;我们一起来动手创建一个两轮差速的移动机器人fishbot。 机器人除了雷达之外&#xff0c;还需要IMU加速度传感器以及可以驱动的轮子&#xff0c;我们曾介绍过机器人学部分&#xff0c;曾对两差速模型进行过介绍&#xff0c;所以我们…

Python函数(十二):函数的创建和调用、参数传递、返回值

前言&#xff1a;在编程的世界里&#xff0c;函数是一种基本的构建块&#xff0c;它允许我们将代码封装成可重复使用的单元。在Python中&#xff0c;函数的使用尤为重要&#xff0c;因为它不仅有助于代码的模块化&#xff0c;还提高了代码的可读性和可维护性。本章节&#xff0…

UE5 崩溃问题汇总!!!

Using bundled DotNet SDK version: 6.0.302 ERROR: UnrealBuildTool.dll not found in "..\..\Engine\Binaries\DotNET\UnrealBuildTool\UnrealBuildTool.dll" 在你遇到这种极奇崩溃的BUG &#xff0c;难以解决的时候。 尝试了N种方法&#xff0c;都不行的解决方法。…

nginx Rewrite 相关功能

一、Nginx Rewrite 概述 定义 Nginx 的 Rewrite 模块允许对请求的 URI 进行重写操作。它可以基于一定的规则修改请求的 URL 路径&#xff0c;然后将请求定向到新的 URL 地址&#xff0c;这在很多场景下都非常有用&#xff0c;比如实现 URL 美化、网站重构后的 URL 跳转等。主要…

GA-Kmeans-Transformer时序聚类+状态识别组合模型

创新研究亮点&#xff01;GA-Kmeans-Transformer时序聚类状态识别组合模型 目录 创新研究亮点&#xff01;GA-Kmeans-Transformer时序聚类状态识别组合模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.创新研究亮点&#xff01;GA-Kmeans-Transformer时序聚类状态识…

最新的强大的文生视频模型Pyramid Flow 论文阅读及复现

《PYRAMIDAL FLOW MATCHING FOR EFFICIENT VIDEO GENERATIVE MODELING》 论文地址&#xff1a;2410.05954https://arxiv.org/pdf/2410.05954 项目地址&#xff1a; jy0205/Pyramid-Flow&#xff1a; 用于高效视频生成建模的金字塔流匹配代码https://github.com/jy0205/Pyram…

阻塞队列BlockingQueue实战及其原理分析

1. 阻塞队列介绍 1.1 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。 数据结构演示网站&#xff1a;https://www.cs.usfca.edu/~galles/visualization/Algorithms.ht…

hadoop搭建

前言 一般企业中不会使用master slave01 slave02来命名 vmware创建虚拟机 打开vmware软件&#xff0c;新建虚拟机 典型 稍后安装系统 选择centos7 虚拟机名称和安放位置自行选择&#xff08;最小化安装消耗空间较少&#xff09; 默认磁盘大小即可 自定义硬件 选择centos7的i…

测试 - 1 ( 9000 字详解 )

一&#xff1a; 测试入门 测试是指运用特定的方法、手段或工具&#xff0c;对某一对象进行验证、检查或评估&#xff0c;判断其是否符合预期标准或目标。例如&#xff0c;修理好一盏灯后通过按开关测试其是否正常工作&#xff1b;通过一次数学测验评估学生对代数知识的掌握程度…