当前位置: 首页 > 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;并持续发布性能更优的鲲鹏…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

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

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

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...