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

【STM32】STM32F4中USB的CDC虚拟串口(VCP)使用方法

文章目录 一、前言二、STM32CubeMX生成代码2.1 选择芯片2.2 配置相关模式2.3 设置时钟频率2.4 生成代码2.5 编译并下载代码2.6 结果2.7 问题 三、回环测试3.1 打开工程3.2 添加回环代码3.3 编译烧录并测试 四、出现问题和解决方法4.1 烧录总是要自己插拔USB4.2 自己生成的工程没…...

网络协议与攻击模拟_06攻击模拟SYN Flood

一、SYN Flood原理 在TCP三次握手过程中&#xff0c; 客户端发送一个SYN包给服务器服务端接收到SYN包后&#xff0c;会回复SYNACK包给客户端&#xff0c;然后等待客户端回复ACK包。但此时客户端并不会回复ACK包&#xff0c;所以服务端就只能一直等待直到超时。服务端超时后会…...

CPU,内存和硬盘之间的关系

计算机三大件&#xff1a;CPU&#xff0c;内存&#xff0c;硬盘。从运算速度来看&#xff0c;CPU>内存>固态硬盘>机械硬盘。 电脑卡顿怎么解决&#xff1f; 1、清理垃圾&#xff1b; 2、释放C盘空间&#xff0c;因为系统需要C盘空间当作虚拟内存&#xff1b; 3、增…...

Java面试题之基础篇

文章目录 一&#xff1a;谈谈你对面向对象的理解二&#xff1a;JDK、JRE、JVM三者区别和联系三&#xff1a;和equals比较四&#xff1a;hashCode与equals五&#xff1a;final六&#xff1a;String、StringBuffer、StringBuilder七&#xff1a;重载与重写的区别&#xff1f;八&a…...

Bitbucket第一次代码仓库创建/提交/创建新分支/合并分支/忽略ignore

1. 首先要在bitbucket上创建一个项目&#xff0c;这个我没有权限创建&#xff0c;是找的管理员创建的。 管理员创建之后&#xff0c;这个项目给了我权限&#xff0c;我就可以创建我的代码仓库了。 2. 点击这个Projects下的具体项目名字&#xff0c;就会进入这样一个页面&#…...

c#反射用法

在 C# 中&#xff0c;反射是一种能够在运行时检查类型信息、访问属性和调用方法的机制。通过反射&#xff0c;你可以动态地操作类型、对象和程序集&#xff0c;而无需在编译时知道这些类型的具体信息。 反射提供了一组 API&#xff0c;可以让你在运行时获取和操作类型的信息。…...

WPF行为

背景&#xff1a;实现按钮鼠标移动到上方有点交互效果或变一下有阴影。这样使用触发器就行了&#xff0c;但是如果是每个控件都有效果的话使用行为更加合适 1、下载NuGet包&#xff1a;Microsoft.xaml.behavior.wpf 2、创建行为类EffectBehavior&#xff0c;对Behavior进行重写…...

N-141基于springboot,vue网上拍卖平台

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatis-plusredi…...

Unity之Cinemachine教程

前言 Cinemachine是Unity引擎的一个高级相机系统&#xff0c;旨在简化和改善游戏中的相机管理。Cinemachine提供了一组强大而灵活的工具&#xff0c;可用于创建令人印象深刻的视觉效果&#xff0c;使开发人员能够更轻松地掌控游戏中的摄像机行为。 主要功能和特性包括&#x…...

java面面试面经(面试过程)

一、校招一面面经 1.1 自我介绍(2min) 1.2 要求介绍项目一项目亮点以及做的具体工作 根据介绍项目进行细挖&#xff0c;其中包括方案设计、场景设计等等等 由于项目一种涉及数据库源的转换问题和限流方案&#xff0c;所以面试官拷打的是这两块&#xff0c;其中包括场景题&…...