C++的扩充和封装

news2024/9/25 0:33:27

作业:

手动封装一个顺序表(SeqList),分文件编译实现

有私有成员:顺序表数组的起始地址 ptr、 顺序表的总长度:size、顺序表的实际长度:len

成员函数:初始化 init(int n)

判空:empty

判满:full

尾插:push_back

插入:insert(int index)

任意位置删除:erase(int index)

尾删: pop_back

求长度:size()

获取任意位置元素:& at(int inex)

将顺序表进行排序:sort(bool flag) //flag 为真,表示升序,否则是降序

头文件:

#ifndef SEQLIST_H
#define SEQLIST_H


#include <iostream>

using namespace std;
using datatype = int;

class Sqlist
{
private:
    datatype *data; //顺序表数组
    int size;     //数组的大小
    int len = 0;  //数组的实际长度

public:
    void init(int n);  //初始化函数
    bool empty();      //判空
    bool full();       //判满
    void push_back(datatype value); //尾插
    void insert(int index,datatype value); //任意位置插入
    void erase(int index);  //任意位置删除
    void pop_back(); //尾删
    int listsize();  //求长度
    datatype & at(int inex);  //获取任意位置元素
    void sort(bool flag);   //排序,真为升序,假为降
    void show();         //展示
};

#endif // SEQLIST_H

源文件:

#include "seqlist.h"



void Sqlist::init(int n)
{
    this->data = new datatype[n];//申请长度n的空间,附给data
    //初始化
    this->len = 0;
    this->size = n;
}
//判空
bool Sqlist::empty()
{
    return this->len == 0;
}
//判满
bool Sqlist::full()
{
    return this->len == this->size;
}
//尾插
void Sqlist::push_back(datatype value)
{
    if(this->full())
    {
        return;
    }
    this->data[len++] = value;
}
//任意位置插入
void Sqlist::insert(int index, datatype value)
{
    if(this->full())
    {
        cout<<"表满了无法插入"<<endl;
        return;
    }
    if(index>this->len||index<=0)
    {
        cout<<"插入位置错误"<<endl;
        return;
    }
    for(int i = this->len;i>index-1;i--)
    {
        data[i] = data[i-1];
    }
    data[index-1] = value;
    this->len++;
}
//任意位置删除
void Sqlist::erase(int index)
{
    if(this->empty())
    {
        cout<<"表为空无删除对象"<<endl;
        return;
    }
    if(index>this->len||index<=0)
    {
        cout<<"删除位置错误"<<endl;
        return;
    }
    for(int i = index-1;i<this->len-1;i++)
    {
        data[i] = data[i+1];
    }
    this->len--;
}
//尾删
void Sqlist::pop_back()
{
    if(this->empty())
    {
        cout<<"表为空无删除对象"<<endl;
        return;
    }
    this->len--;
}
//求长度
int Sqlist::listsize()
{
    return this->len;
}
//获取任意位置元素
datatype & Sqlist::at(int index)
{
    if(this->empty())
    {
        throw std::out_of_range("表为空无对象");
    }
    if(index>this->len||index<=0)
    {
        throw std::out_of_range("位置错误");
    }
    return this->data[index-1];
}
//排序,真为升序,假为降
void Sqlist::sort(bool flag)
{
    if(this->empty())
    {
        cout<<"表为空无对象"<<endl;
        return;
    }
    int i,j;
    if(flag)
    {
        for(i = 1;i<this->len;i++)
        {
            for(j = 0;j<this->len - i;j++)
            {
                if(data[j]>data[j+1])
                {
                    datatype temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
            }
        }
    }
    else
    {
        for(i = 1;i<this->len;i++)
        {
            for(j = 0;j<this->len - i;j++)
            {
                if(data[j]<data[j+1])
                {
                    datatype temp = data[j];
                    data[j] = data[j+1];
                    data[j+1] = temp;
                }
            }
        }
    }
}
//展示
void Sqlist::show()
{
    if(this->empty())
    {
        cout<<"表为空无对象"<<endl;
        return;
    }
    cout<<"当前顺序表中的元素分别是:";
    for(int i = 0;i<this->len;i++)
    {
        cout<<this->data[i]<<" ";
    }
    cout<<endl;
}

主程序:

#include "seqlist.h"
int main()
{
    Sqlist s; //实例化一个顺序表对象
    s.init(5);//申请空间
    s.push_back(3);//头插
    s.push_back(4);
    s.push_back(2);
    s.show();

    s.insert(2,8);//任意位置插入
    s.show();

    s.erase(1);//任意位置删除
    s.show();

    s.pop_back();//尾删
    s.show();

    cout<<"长度 = "<<s.listsize()<<endl;
    cout<<"2号位置元素 = "<<s.at(2)<<endl;
    s.sort(1);
    s.show();
    return 0;
}

思维导图:

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

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

相关文章

Vue:默认插槽

目录 一.性质 1.内容分发 2.无名称标识 3.作用域 4.使用方式 二.使用 1.父组件 2.子组件 三.代码 1.父组件代码 2.子组件代码 四.效果 一.性质 1.内容分发 默认插槽允许组件的使用者定义一些内容&#xff0c;这些内容会被插入到组件模板中的特定位置。这有助于实…

C++:类中的特殊关键字,运算重载符

1.My_string类中重载以下的运算符&#xff1a; 、[] 、>、<、、>、<、&#xff01;、、输入输出(>>、<<) 主函数&#xff1a; #include <iostream> #include "my_string.h"using namespace std;int main() {My_string s1("cat…

QT客户端发送HTTP请求此时服务器到底收到了哪些数据?

一个Http请求包括 请求行 请求头 空行 请求体 下面是示例&#xff1a; 1,2,3,4分别代表上面的四个部分&#xff0c;我只是做了一些解析&#xff0c;具体可以结合代码 1. post / HTTP/1.1 2.GET请求头包括Host(主机名),user-agent&#xff08;客户端标识符&#xff09;&am…

AI Agent智能应用从0到1定制开发Langchain+LLM全流程解决方案与落地实战

大模型微调实战&#xff1a;精通、指令微调、开源大模型微调、对齐与垂直领域应用29套AI全栈大模型项目实战&#xff0c;人工智能视频课程-多模态大模型&#xff0c;微调技术训练营&#xff0c;大模型多场景实战&#xff0c;AI图像处理&#xff0c;AI量化投资&#xff0c;OPenC…

fiddler抓包11_列表显示服务器IP (配置文件)

请求列表默认不显示服务器IP字段&#xff0c;也无法从定制列窗口添加&#xff0c;可以修改CustomRules.js实现。 ① 菜单栏“Rules”&#xff08;规则&#xff09; - “Customize Rules...”&#xff08;自定义规则&#xff09;&#xff0c;打开CustomRules.js文件。 &#xf…

HarmonyOS NEXT:解密从概念到实践的技术创新与应用前景

HarmonyOS是目前华为手机所搭载的鸿蒙系统&#xff0c;它在Open Harmony的基础上兼容了安卓的AOSP&#xff0c;所以可以使用安卓APK应用&#xff0c;HarmonyOS属于华为在当前阶段过渡使用的系统&#xff0c;原生鸿蒙的应用生态尚未发展起来&#xff0c;兼容安卓应用可以让用户有…

【AI大模型】通义大模型API接口实现

目录 一、基础环境安装 &#xff08;一&#xff09;OpenAI Python SDK安装 &#xff08;二&#xff09;DashScope SDK安装 二、OPENAI接口实现 &#xff08;一&#xff09;文本输入 &#xff08;二&#xff09;流式输出 &#xff08;三&#xff09;图像输入 &#xff0…

Python 字符串的常见方法

Python 字符串的常见方法 字符串是 Python 中非常重要的数据类型之一。在日常编程中&#xff0c;我们经常需要对字符串进行各种操作&#xff0c;比如分割、连接、替换等。Python 提供了丰富的字符串方法&#xff0c;使得这些操作变得简单而高效。本文将详细介绍一些常见的字符…

【Docker】Docker快速入门

Docker学习笔记 一、Docker概述 为什么会出现Docker? 安卓开发流程&#xff1a;apk(java开发的)发布到应用商店&#xff0c;用户安装apk即可使用。 后端开发流程&#xff1a; jar(java开发的)带上环境发布到Docker仓库&#xff0c;用户从Docker仓库拉取镜像并部署。 总结…

关于Python升级以后脚本不能运行的问题

近日将Python从3.11升级到了3.12&#xff0c;然后把几个包例如numpy等也通过pip给upgrade了一下&#xff0c;结果原来运行的好好的脚本&#xff0c;都运行不了了&#xff0c;还出现各种报错。怀疑是自己升级了环境导致的&#xff0c;因此通过搜索引擎检索了一下&#xff0c;有这…

【React】(推荐项目)使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024)

使用 React、Socket.io、Nodejs、Redux-Toolkit、MongoDB 构建聊天应用程序 (2024) 学习使用 React、Socket.io、Node.js、Redux-Toolkit 和 MongoDB 构建响应式实时消息聊天应用程序。这个项目涵盖了从设置到实施的所有内容&#xff0c;提供了宝贵的见解和实用技能。无论您是…

地平线占用预测 FlashOcc 参考算法-V1.0

1.简介 3D Occupancy Networks 的基本思路是将三维空间划分成体素网格&#xff0c;并对每个网格进行各类感知任务的预测。目前以网格为中心的方法能够预测每个网格单元的占用率、语义类别、未来运动位移和实例信息。3D occupancy 可以对道路障碍物进行更细粒度的划分&#xff…

【Docker】解决Docker Engine stopped

解决Docker Engine stopped 解决Docker Engine stopped1.检查虚拟设置2 安装wslwindows安装wsl 解决Docker Engine stopped 在安装完docker之后不少用户会遇到Docker Engine stopped。下面就下给出解决方法让docker正常运行起来 1.检查虚拟设置 打开任务管理器查看cpu页面&a…

vue-入门速通

setup是最早的生命周期&#xff0c;在vue2里边的data域可以使用this调用setup里面的数据&#xff0c;但是在setup里边不能使用thisvue项目的可执行文件是index&#xff0c;另外运行前端需要npm run vue的三个模块内需要三个不同的结构&#xff0c;里边放置js代码&#xff0c;注…

LED驱动电路

LED驱动电路简介 摘要&#xff1a; LED照明是今年来快速兴起发展的一种新型光源&#xff0c;它的许多良好特点使得它的应用面越来越广。LED的单向导电特性使人一般认为应该用直流驱动&#xff0c;但是对直流恒压和限流的装置在保证比较好的限流特性时&#xff0c;自身功耗是很…

【MySQL 04】数据类型

目录 1.数据类型分类 2.数值类型 2.1 tinyint 类型 2.2 bit类型 2.3 float类型 2.4decimal 3.字符串类型 3.1 char类型 3.2 varchar类型 4.日期和时间类型 6. enum和set类型 6.1.enum和set类型简介&#xff1a; 6.2.enum和set的一般使用方法 6.3.用数字的方式…

Excel的基本应用__1

1. 模拟运算 1.1 单变量求解 1.1.1 步骤 1.1.1 效果 1.2 模拟运算表 1.2.1 步骤 1.2.2 效果 2.选择性粘贴--转至 3. Excel中如何使用和定义名称 使用 相当于全局变量&#xff0c;可以在不同表中调用 3.1名称中使用常量 3.2名称中使用函数 调用 可以在不同的表中调用 3.…

[vulnhub] SickOS1.1

https://www.vulnhub.com/entry/sickos-11,132/ 主机发现端口扫描 探测存活主机&#xff0c;136是靶机&#xff0c;因为靶机是我最后添加的 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-22 11:36 CST Nmap scan report for 192.168.75.1 …

vue-animate-onscroll动画库(可来回触发动画)

效果展示 ①触发一次动画 触发一次 ②触发多次动画 触发多次 1.什么是vue-animate-onscroll 它是一个 Vue 插件&#xff0c;用于在滚动时触发动画效果。它可以帮助开发者在用户滚动页面时&#xff0c;逐渐展示元素&#xff0c;增强用户体验。基本用法是通过在元素上添加特定的指…

IR21364的代替品SLM21364CF-DG:带过流保护、使能和故障反馈 高压三相半桥驱动芯片 神秘芯片背后的惊人力量

SLM21364CF-DG是一款高压、高速的三相功率MOSFET和IGBT驱动器。采用专有的高压集成电路和锁存免疫CMOS技术&#xff0c;提供可靠的单芯片驱动方案。逻辑输入电平与标准CMOS或LSTTL输出兼容&#xff0c;最低支持3.3V逻辑。通过检测外部电流电阻上电流&#xff0c;过流保护功能能…