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

C++类模板实现顺序表SeqList

main函数

#include<iostream>
#include<stdlib.h>
#include"SeqList.cpp"using namespace std;typedef int ElementType;
int main(void)
{SeqList< ElementType, 10> SeqList(1);cout << SeqList.ListLength() << endl;bool result;int* item = NULL;item = (int*)malloc(sizeof(int));for (int i = 0; i <5; i++){*item = i;result = SeqList.AppendElement(item);if (result == false){cout << "数据插入失败" << endl;break;}}cout << SeqList.ListLength() << endl;cout << "查找3位置的元素:" ;cout << SeqList.GetElement(3, item);cout << "在位置3插入元素9" << endl;int num = 9;int* itemdata = &num;SeqList.InsertElement(itemdata, 3);SeqList.GetElement(3, item);cout << "删除插入元素" << endl;int* deletElement = NULL;deletElement = (int *)malloc(sizeof(int));SeqList.DeleteElement(3, deletElement);cout << "遍历顺序表" << endl;SeqList.TraverseList();return 0;
}

SeqList主函数

#include"SeqList.h"#pragma region 类构造函数
template<typename T,int MaxSize>
SeqList<T, MaxSize>::SeqList(int i)
{/*初始化链表的最大容量*/this->m_capacity = MaxSize;/*初始化链表的长度为0*/this->m_length = 0;/*创建包含capacity容量的T类型的初始化存放顺序表元素的数组*/this->m_data_pointer = new T[this->m_capacity];
};
#pragma endregion
#pragma region 类析构函数
template<typename T,int MaxSize>
//析构函数是释放顺序表中data的指针域申请的内存 指向null
SeqList<T,MaxSize>::~SeqList()
{delete[] this->m_data_pointer;this->m_data_pointer = NULL;//不能指向野指针,所以需要指向null
};
#pragma endregion
#pragma region 清空链表
template <typename T,int MaxSize>
void SeqList<T, MaxSize>::ClearList()
{this->m_length = 0;
}
#pragma endregion
#pragma region 判断链表是否为空
template<typename T,int MaxSize>
bool SeqList<T, MaxSize>::IsEmpty()
{if (this->m_length==0){return true;}return false;
}
#pragma endregion
#pragma region 获取SeqList长度
template<typename T,int MaxSize>
int SeqList<T, MaxSize>::ListLength()
{return this->m_length;
}
#pragma endregion
#pragma region 查找指定下标的元素
//先判断顺序表是否存在,且 i 是否在合理范围内;然后再将 m_pDataArr[i] 的值赋值给元素 e。
template<typename T,int MaxSize>
bool SeqList<T,MaxSize>:: GetElement(int pos, T* item)
{if ((this->m_data_pointer == NULL )|| (pos<0)||(pos>this->m_capacity)){return false;}/*当前链表的数据指针域非空*/*item = *(this->m_data_pointer + pos);cout << *item << endl;return true;
}
#pragma endregion
#pragma region 按值查找,求顺序表中值为item的元素序号
template <typename T,int MaxSize>
int SeqList<T, MaxSize>::LoateElement(const T* item)
{if (item == NULL){return -1;}T* current = NULL;int currentPoint = 0;while (currentPoint<this->m_length){current = this->m_data_pointer + currentPoint;if (*item == *current ){cout << "查找到元素item:" << *item << "的位置为:" << currentPoint << endl;return currentPoint;}currentPoint++;}return -1;
}
#pragma endregion
#pragma region 查找元素的前驱元素
template<typename T,int MaxSize>
bool SeqList<T, MaxSize>::PriorElement(const T* current, T* prior)
{int pos = this->LoateElement(current);if (pos == -1){return false;}else if (pos == 0){cout << "位置为0的元素无前驱元素" << endl;return false;}*prior = *(this->m_data_pointer + pos - 1);if (prior != NULL){return true;}
}
#pragma endregion
#pragma region 查找current元素的后继元素
template<typename T,int MaxSize>
bool SeqList<T, MaxSize>::NextElement(const T* current, T* next)
{int pos = this->LoateElement(current);if (pos == -1 || pos == this->m_length - 1){return false;}*next = *(this->m_data_pointer + pos + 1);if (next != NULL){return true;}
}
#pragma endregion
#pragma region 遍历线性表输出元素
template <typename T,int MaxSize>
void SeqList<T, MaxSize>::TraverseList()
{T* temp = NULL;if (this->m_data_pointer== NULL){cout << "顺序表的数据域为空" << endl;}for (int i = 0; i < this->m_length; i++){temp = this->m_data_pointer + i;cout << "当前第" << i << "位置的数据值为:" << *temp << endl;}return;
}
#pragma endregion
#pragma region 在指定位置插入元素
template<typename T,int MaxSize>
int SeqList<T, MaxSize>::InsertElement(T* item, int pos)
{if (this->m_length >= this->m_capacity){cout << "顺序表存储空间已经满了" << endl;return -1;}if (pos>this->m_capacity){pos = this->m_length;cout << "已经将pos位置修改为顺序表末尾" << endl;}else if(pos<0){pos = 0;cout << "已经将pos位置改成0号位置元素" << endl;}for (int i =this->m_length ;i>pos-1;i--){this->m_data_pointer[i + 1] = this->m_data_pointer[i];}this->m_data_pointer[pos] = *item;cout << "数据插入成功" << endl;this->m_length++;return 1;
}
#pragma endregion
#pragma region 删除指定位置的元素
template<typename T,int MaxSize>
int SeqList<T, MaxSize>::DeleteElement(int pos, T* item)
{bool result = this->GetElement(pos, item);//有元素if (result == true){for (int i = pos; i < this->m_length; i++){*(this->m_data_pointer + i) = *(this->m_data_pointer + i+1);}this->m_length--;return 0;}return -1;
}
#pragma endregion
#pragma region 顺序表末尾附加元素
template<typename T,int MaxSize>
bool SeqList<T, MaxSize>::AppendElement(const T* item)
{T* temp =const_cast<T*>(item);int length = this->m_length+1;int capacity = this->m_capacity;if (length >= capacity){return false;};int pos = this->InsertElement(temp, this->ListLength());return true;
}
#pragma endregion

SeqList.h函数

#pragma once
#include <iostream>using namespace std;
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
template <typename T, int MaxSize/*顺序表SeqList的尺寸*/>
class SeqList
{
public:SeqList(int i);~SeqList();/*清除链表的数据*/void ClearList();/*判断链表是否为空*/bool IsEmpty();/*1表示空,0表示非空*//*获取SeqList长度*/int ListLength();/*查找指定下标的元素*/bool GetElement(int pos, T *item);/*按值查找,求顺序表中值为item的元素序号*/int LoateElement(const T* item);/*查找元素的前驱元素*/bool PriorElement(const T* current, T* prior);/*查找current元素的后继元素*/bool NextElement(const T* current, T* next);/*遍历线性表输出元素*/void TraverseList();/*在指定位置插入元素*/int InsertElement(/*this**/T* item, int pos);/*删除指定位置的元素*/int DeleteElement(int pos, T* item);/*顺序表末尾附加元素*/bool AppendElement(const T* item);
private:/*类成员*/int m_capacity;int m_length;T* m_data_pointer;
};
#endif // !_SEQLIST_H_

相关文章:

C++类模板实现顺序表SeqList

main函数 #include<iostream> #include<stdlib.h> #include"SeqList.cpp"using namespace std;typedef int ElementType; int main(void) {SeqList< ElementType, 10> SeqList(1);cout << SeqList.ListLength() << endl;bool result;…...

sklearn 学习-混淆矩阵 Confusion matrix

混淆矩阵Confusion matrix&#xff1a;也称为误差矩阵&#xff0c;通过计算得出矩阵的结果用来表示分类器的精度。其每一列代表预测值&#xff0c;每一行代表的是实际的类别。 from sklearn.metrics import confusion_matrixy_true [2, 0, 2, 2, 0, 1] y_pred [0, 0, 2, 2, 0…...

C#,数据检索算法之跳跃搜索(Jump Search)的源代码

数据检索算法是指从数据集合&#xff08;数组、表、哈希表等&#xff09;中检索指定的数据项。 数据检索算法是所有算法的基础算法之一。 本文提供跳跃搜索的源代码。 1 文本格式 using System; namespace Legalsoft.Truffer.Algorithm { public static class ArraySe…...

ElasticSearch 开发总结(九)——SearchType:DFS_QUERY_THEN_FETCH和QUERY_THEN_FETCH

ElasticSearch 开发总结&#xff08;九&#xff09;——SearchType&#xff1a;DFS_QUERY_THEN_FETCH和QUERY_THEN_FETCH-CSDN博客 1.SearchType ES的搜索类型 有一个类SearchType&#xff08;如下图示&#xff09;&#xff0c;关于该类的描述&#xff1a; Search type repre…...

那些年与指针的爱恨情仇(一)---- 指针本质及其相关性质用法

关注小庄 顿顿解馋 (≧∇≦) 引言&#xff1a; 小伙伴们在学习c语言过程中是否因为指针而困扰&#xff0c;指针简直就像是小说女主&#xff0c;它逃咱追&#xff0c;我们插翅难飞…本篇文章让博主为你打理打理指针这个傲娇鬼吧~ 本节我们将认识到指针本质&#xff0c;何为指针和…...

计算机网络——TCP协议

&#x1f4a1;TCP的可靠不在于它是否可以把数据100%传输过去&#xff0c;而是 1.发送方发去数据后&#xff0c;可以知道接收方是否收到数据&#xff1b;2.如果接收方没收到&#xff0c;可以有补救手段&#xff1b; 图1.TCP组成图 TCP的可靠性是付出代价的&#xff0c;即传输效率…...

软考高级有意义吗?

有同学在平台向我提问&#xff0c;软考高级好像不好通过&#xff0c;花那么多时间去准备&#xff08;非科班&#xff09;&#xff0c;有意义么&#xff1f; 我知道有些同学还在犹豫&#xff0c;不确定是否要报名软考系统架构设计师或者系统分析师。我认为&#xff0c;这种犹豫…...

二分算法模版

二分算法模版 实数二分算法模版实数二分模版题 整数二分算法模版向上取整二分模版向下取整二分模版二分模版的注意点二分模版中check函数的实现能够使用二分的条件 二分主要分两类&#xff0c; 一类是对实数进行二分&#xff0c;一类是对整数进行二分 对整数二分又分成2种&…...

【CSS】字体效果展示

测试时使用了Google浏览器。 1.Courier New 2.monospace 3.Franklin Gothic Medium 4.Arial Narrow 5.Arial 6.sans-serif 7.Gill Sans MT 8.Calibri 9.Trebuchet MS 10.Lucida Sans 11.Lucida Grande 12.Lucida Sans Unicode 13.Geneva 14.Verdana 15.Segoe UI 16.Tahoma 17.…...

asp.net宠物流浪救助系统

asp.net宠物流浪救助系统 当领养人是无或者未领养的时候&#xff0c;就会显示领养申请按钮&#xff0c;登陆的用户可以申请领域该宠物&#xff0c;未登录会提示登陆然后转到登陆页面 宠物领养页面支持关键字查询符合条件的宠物 当有领养人时就隐藏领养申请按钮 社区交流意见…...

git常见命令

1、常用命令记录 1&#xff09;切换分支 git checkout 分支名2&#xff09;查看分支 查看远程分支 git branch -r 查看所有分支包括本地分支和远程分支 git branch -a3&#xff09;合并分支 git merge 来源分支4&#xff09;删除分支 删除本地分支&#xff1a;git branch …...

主成分分析(PCA)Python

实际问题研究中&#xff0c;常常遇到多变量问题&#xff0c;变量越多&#xff0c;问题往往越复杂&#xff0c;且各个变量之间往往有联系。于是&#xff0c;我们想到能不能用较少的新变量代替原本较多的旧变量&#xff0c;且使这些较少的新变量尽可能多地保留原来变量所反映的信…...

Leetcode—144. 二叉树的前序遍历【简单】

2023每日刷题&#xff08;九十六&#xff09; Leetcode—144. 二叉树的前序遍历 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr…...

混淆矩阵、准确率、查准率、查全率、DSC、IoU、敏感度的计算

1.背景介绍 在训练的模型的时候&#xff0c;需要评价模型的好坏&#xff0c;就涉及到混淆矩阵、准确率、查准率、查全率、DSC、IoU、敏感度的计算。 2、混淆矩阵的概念 所谓的混淆矩阵如下表所示&#xff1a; TP:真正类&#xff0c;真的正例被预测为正例 FN:假负类&#xf…...

ChatGPT目前的AI一哥

ChatGPT和文心一言是两个不同的AI助手&#xff0c;各自有其独特的特点和应用场景。以下是对它们在智能回复、语言准确性和知识库丰富度等方面的简要比较&#xff1a; 智能回复&#xff1a;ChatGPT是由OpenAI开发的语言模型&#xff0c;具有强大的自然语言处理和生成能力&#x…...

认识思维之熵

经常有读者问我&#xff0c;说&#xff1a; 为什么向您请教一个问题&#xff0c;您总能很快指出在哪篇文章里面提到过&#xff0c;是因为您的记忆力特别好吗&#xff1f; 其实不是的。更重要的原因是&#xff1a;如果你经过系统训练&#xff0c;有意识地去获取知识的话&#x…...

蓝桥杯备战——1.点亮LED灯

1.解析原理图 由上图可以看到8个共阳LED灯接到了573输出口&#xff0c;而573输入接到单片机P0口上。当573 LE脚输入高电平时&#xff0c;输出随输入变化&#xff0c;当LE为低电平时&#xff0c;输出锁存。 由上图可以看到Y4C接到了或非门74HC02的输出端&#xff0c;而输入端为…...

【网络协议测试】畸形数据包——圣诞树攻击(DOS攻击)

简介 TCP所有标志位被设置为1的数据包被称为圣诞树数据包&#xff08;XMas Tree packet&#xff09;&#xff0c;之所以叫这个名是因为这些标志位就像圣诞树上灯一样全部被点亮。 标志位介绍 TCP报文格式&#xff1a; 控制标志&#xff08;Control Bits&#xff09;共6个bi…...

Java基础面试题-5day

泛型 什么是泛型&#xff1f;有什么用&#xff1f; 泛型是jdk5引入的新特性&#xff0c;通过泛型可以提高代码的可读性和稳定性&#xff1b;当我们使用泛型时&#xff0c;传入的对象类型必须是指定的泛型类型&#xff0c;否则就会报错 泛型的使用方式有哪些&#xff1f; 一…...

软通智慧启动鲲鹏原生应用开发合作

1月25日&#xff0c;软通智慧科技有限公司启动鲲鹏原生应用开发合作&#xff0c;将基于鲲鹏硬件底座、openEuler、开发套件Kunpeng DevKit和应用使能套件Kunpeng BoostKit开展面向智慧园区、政务、水利水务等行业场景的软硬件原生应用开发&#xff0c;并持续发布性能更优的鲲鹏…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

数据库——redis

一、Redis 介绍 1. 概述 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的、高性能的内存键值数据库系统&#xff0c;具有以下核心特点&#xff1a; 内存存储架构&#xff1a;数据主要存储在内存中&#xff0c;提供微秒级的读写响应 多数据结构支持&…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中&#xff0c;要设置一个操作在指定延迟后&#xff08;例如3秒&#xff09;执行&#xff0c;可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法&#xff0c;它接受两个参数&#xff1a; 要执行的函数&…...

RabbitMQ 各类交换机

为什么要用交换机&#xff1f; 交换机用来路由消息。如果直发队列&#xff0c;这个消息就被处理消失了&#xff0c;那别的队列也需要这个消息怎么办&#xff1f;那就要用到交换机 交换机类型 1&#xff0c;fanout&#xff1a;广播 特点 广播所有消息​​&#xff1a;将消息…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...