坐牢第三十一天(c++)

news2024/11/15 11:18:09

一.作业:

 使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个

#include <iostream>
#include <cstring> // 引入cstring以使用memcpy
using namespace std;
// 类型重命名
using datatype = int; // typedef int datatype;
struct SeqList
{
private:
    // datatype data[MAX] = {0};                //顺序表的数组
    datatype *data; // 顺序表的数组
    int size = 0;   // 数组的大小
    int len = 0;    // 顺序表实际长度
public:
    // 初始化函数
    void init(int s);
    // 要实现的函数
    // 判空函数
    bool empty();
    // 判满函数
    bool full();
    // 添加数据函数
    bool add(datatype e);
    // 求当前顺序表的实际长度
    int length();
    // 任意位置插入函数
    bool insert_pos(int pos, datatype e);
    // 任意位置删除函数
    bool delete_pos(int pos);
    // 访问容器中任意一个元素 at
    datatype &at(int index);
    // 遍历整个数组输出
    void show();
    // 君子函数:二倍扩容
    void expend();
    // 释放函数
    void free();

};
// 初始化函数
void SeqList::init(int s)
{
    size = s;                  // 当前数组的最大容量
    data = new datatype[size]; // 在堆区申请一个顺序表容器
}
// 判空函数
bool SeqList::empty()
{
    if (len == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}
// 判满函数
bool SeqList::full()
{
    if (size == len)
    {
        return true;
    }
    else
    {
        return false;
    }
}
// 添加数据函数
bool SeqList::add(datatype e)
{
    if (data == NULL)
    {
        cout << "添加数据失败" << endl;
        return false;
    }
    if (full())
    {
        expend();
    }
    data[len]=e;
    len++;
    cout << "添加数据成功" << endl;
    return true;
}
// 求当前顺序表的实际长度
int SeqList::length()
{
    return len;
}
// 任意位置插入函数
bool SeqList::insert_pos(int pos, datatype e)
{
    if (data == NULL || pos < 0 || pos > len)
    {
        cout << "插入数据失败" << endl;
        return false;
    }
    if (full())
    {
        expend();
    }
    for (int i = len - 1; i >= pos; i--)
    {
        data[i + 1] = data[i];
    }
    data[pos] = e;
    len++;
    cout << "插入数据成功" << endl;
    return true;
}
// 任意位置删除函数
bool SeqList::delete_pos(int pos)
{
    if (data == NULL || SeqList::empty() || pos < 0 || pos >= len)
    {
        cout << "删除数据失败" << endl;
        return false;
    }
    for (int i = pos + 1; i < len; i++)
    {
        data[i - 1] = data[i];
    }
    len--;
    cout << "删除数据成功" << endl;
    return true;
}
// 访问容器中任意一个元素 at
datatype &SeqList::at(int index)
{
    if (data == NULL || SeqList::empty() || index < 0 || index >= len)
    {
        cout << "访问数据失败" << endl;
    }
    return data[index];
}
// 遍历整个数组输出
void SeqList::show()
{
    if (data==NULL||empty())
    {
        cout << "遍历数组失败" << endl;
        return ;
    }
    cout << "数组中的数据:" << endl;
    for (int i = 0; i < length(); i++)
    {
        cout << data[i] <<'\t';
    }
    cout << endl;
}
// 释放函数
void SeqList::free()
{
    delete []data;
    data=NULL;
    cout << "释放空间成功"<<endl;
}
// 君子函数:二倍扩容
void SeqList::expend()
{
    datatype *temp;
    size = 2*size;
    temp =new datatype[size];
    std::memcpy(temp,data,size/2*sizeof(datatype));
    free();
    data =temp;
    cout << "申请空间已满" << endl;
    cout << "自动二倍扩容" << endl;
    cout << length() << endl;
}
int main()
{
    SeqList L;
    L.init(1);
    L.add(1);
    L.add(2);
    L.add(3);
    L.add(4);
    L.add(5);
    L.add(6);
    L.add(6);
    L.add(6);
    L.add(99);
    L.add(99);
    L.add(99);
    L.add(99);
    L.add(99);
    L.show();
    L.free();
    L.show();
    return 0;
}

效果图: 

二.思维导图:

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

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

相关文章

【PyTorch][chapter 27][李宏毅深度学习][transformer-1]

前言&#xff1a; transformer 是深度学习四大基础架构之一,最早Google 发表在NIPS&#xff08;NeurIPS 全称神经信息处理系统大会), 是一种seq2seq 的模型.采用的Encoder-Decoder 结构,应用比较广泛。 比如文本生成&#xff0c;语音转换&#xff0c;视频生成. 相对RNN, LSTM …

【软件文档】项目总结报告编制模板(Word原件参考)

1. 项目概要 1.1. 项目基本信息 1.2. 项目期间 1.3. 项目成果 1.4. 开发工具和环境 2. 项目工作分析 2.1. 项目需求变更 2.2. 项目计划与进度实施 2.3. 项目总投入情况 2.4. 项目总收益情况 2.5. 项目质量情况 2.6. 风险管理实施情况 3. 经验与教训 3.1. 经验总结…

position的absolute、relative、fixed

’ 本章基于上图讲解。 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content"widt…

信息安全(密码学)---数字证书、kpi体系结构、密钥管理、安全协议、密码学安全应用

数字证书 数字证书 (Digital Certificate,类似身份证的作用)----防伪标志 CA(Certificate Authority,电子商务认证授权机构)----ca用自己私钥进行数字签名 数字证书 姓名&#xff0c;地址&#xff0c;组织 所有者公钥 证书有效期 认证机构数字签名 ■ 公钥证书的种类与用…

10.2寸工业墨水屏平板

可翻页查看订单信息 按键下载订单 WIFI 漫游通信 IP65 防水防尘

【LeetCode面试150】——48旋转图像

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;定期更新相关算法面试题&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大家在…

android MutableLiveData 赋值

Android开发中&#xff0c;MutableLiveData是一个用于管理可观察型数据的类&#xff0c;它是LiveData的一个子类&#xff0c;可以用来传递数据给UI层。 要给MutableLiveData赋值&#xff0c;你需要调用它的setValue(T)方法或者postValue(T)方法。 1、声明代码&#xff1a; cl…

5大热度榜网红机型测评,公布开放式耳机哪个牌子的好用

盛夏时节&#xff0c;天气越来越热&#xff0c;小伙伴们都在抱怨&#xff0c;实在没法戴口罩了。实际上&#xff0c;大家只关注了呼吸&#xff0c;却忽视了一个问题&#xff0c;其实&#xff0c;我们的耳朵也是要“呼吸”的&#xff0c;闷热的天气里&#xff0c;长时间佩戴入耳…

七年老玩家《王者荣耀》分析三:【视觉与音效】

目录 视觉设计 音效设计 结论 王者荣耀中裸眼3D观看模式的技术细节和玩家反馈是什么&#xff1f; 王者荣耀的音乐音效设计过程中&#xff0c;有哪些知名音乐家和音效设计师参与&#xff1f; 王者荣耀如何通过音效增强游戏的情感体验和沉浸感&#xff1f; 王者荣耀中的CG动…

微信小程序消息订阅

官方文档 在微信小程序中实现消息订阅功能&#xff0c;开发者需要遵循微信官方提供的规则和API进行开发。以下是开发者实现微信小程序消息订阅的大致步骤&#xff1a; 1. 申请消息订阅权限 首先&#xff0c;开发者需要在微信公众平台&#xff08;mp.weixin.qq.com&#xff09…

期权定价模型(如Black-Scholes模型)和利率模型中的单因子模型的Python实现案例

一&#xff1a;期权定价模型&#xff08;如Black-Scholes模型&#xff09;的实现 期权定价模型&#xff08;如Black-Scholes模型&#xff09;是用来确定期权合理价格的数学模型。这些模型基于一定的假设&#xff0c;考虑了多种因素&#xff0c;如标的资产价格、期权的行权价格…

redis面试(二十五)CountDownLatch实现

CountDownLatch最基本的原理&#xff0c;就是用来阻塞线程的&#xff0c;java本身也有CountDownLatch&#xff0c;用多线程处理分批处理多数据的时候很有用 基本的逻辑就是&#xff0c;同时开多个子线程&#xff0c;然后主线程进入等待&#xff0c;只有当其他子线程全都结束之…

Windows电脑如何搭建HarmonyOS NEXTDeveloper Preview2环境

Windows电脑如何搭建HarmonyOS NEXTDeveloper Preview2环境&#xff0c;Windows电脑搭建HarmonyOS NEXTDeveloper Preview2环境详解如下&#xff0c;共分为七步&#xff0c;一看就会了。 1、电脑要求以及注意事项 操作系统 &#xff1a; Windows10 64 位、 Windows11 64 位 内…

RK3566 GPIO Set High/Low 不能正常设置

GPIO0_A4 口设置高和低都是High&#xff0c;没办法Low&#xff0c; 通过命令查看USB_SWITCH2 &#xff0c;这个pin 一直是high的。设置不了高也设置不了低。 gpio_direction_output(switch_usb_gpio2, 0); 解决办法&#xff1a; Dts配置 增加pcfg_output_low_pull_down 属性…

Numpy布尔索引与掩码

NumPy 是用于科学计算和处理多维数组数据的最流行的 Python 库之一。NumPy 提供了强大的功能&#xff0c;可以根据布尔条件从数组中索引和提取元素&#xff0c;这称为布尔索引或掩码。掌握布尔索引和掩码可以使用 NumPy 进行高效的数据操作和分析。 本综合指南将解释你需要了解…

0.0 C语言被我遗忘的知识点

文章目录 位移运算(>>和<<)函数指针函数指针的应用场景 strcmp的返回值合法的c语言实数表示sizeof 数组字符串的储存 —— 字符数组与字符指针字符串可能缺少 \0 的情况 用二维数组储存字符串数组其他储存字符串数组的方法 位移运算(>>和<<) 右移(>…

【C++】—— 模版初阶

【C】—— 模版初阶 1 泛型编程 2 函数模板2.1 函数模板基础用法2.2 模板的实例化2.2.1 隐式实例化&#xff08;推导实例化&#xff09;2.2.2 显式实例化 2.3、函数模板的原理2.4、模板参数的匹配原则 3 类模板3.1 类模板的定义格式3.2 实现栈类模板3.3 类模板为何优于 typedef…

部署Alertmanager发送告警

1、Alertmanager简介 Prometheus 对指标的收集、存储与告警能力分属于 Prometheus Server 和 AlertManager 两个独立的组件&#xff0c;前者仅负责定义告警规则生成告警通知&#xff0c; 具体的告警操作则由后者完成。 Alertmanager 负责处理由 Prometheus Server 发来的告警…

【Java设计模式】Builder模式:在Java中清晰构建自定义对象

文章目录 【Java设计模式】Builder模式&#xff1a;在Java中清晰构建自定义对象一、概述二、Builder设计模式的意图三、Builder模式的详细解释及实际示例四、Java中Builder模式的编程示例五、Builder模式类图六、Java中何时使用Builder模式七、Builder模式的优点和权衡八、源码…

【STM32开发笔记】STM32H7S78-DK上的CoreMark移植和优化--兼记STM32上的printf重定向实现及常见问题解决

【STM32开发笔记】STM32H7S78-DK上的CoreMark移植和优化--兼记STM32上的printf重定向实现及常见问题解决 一、CoreMark简介二、创建CubeMX项目2.1 选择MCU2.2 配置CPU时钟2.3 配置串口功能2.4 配置LED引脚2.5 生成CMake项目 三、基础功能支持3.1 支持记录耗时3.2 支持printf输出…