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

2024.8.28 C++

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

代码

#include <iostream>
//使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个
using namespace std;

using datatype = int;
struct Seqlist
{
private:
    datatype *data;
    int size = 0;
    int len = 0;
public:
    void init(int s);           //初始化函数
    bool empty();               //判空函数
    bool full();                //判满函数
    bool add(datatype e);       //添加数据函数
    void showsize();             //显示容量
    int length();               //求当前顺序表的实际长度
    bool insert_pos(int pos,datatype e);   //任意位置插入函数
    bool delete_pos(int pos);   //任意位置删除函数
    datatype &at(int index);    //访问容器中任意一个元素 at
    void expand();              //二倍扩容
    void show();                //展示顺序表
};

void Seqlist::init(int s)
{
    size = s;
    data = new datatype[size]{0};
}

bool Seqlist::empty()
{
    return len == 0;
}

bool Seqlist::full()
{
    return len == size;
}

bool Seqlist::add(datatype e)
{
    if(full())
    {
        expand();
    }
    data[len] = e;
    len++;
    return true;
}

void Seqlist::showsize()
{
    cout << "size = " << size << endl;
}

int Seqlist::length()
{
    return len;
}

bool Seqlist::insert_pos(int pos,datatype e)
{
    if(full())
    {
        return false;
    }
    for(int i=len;i>pos;i--)
    {
        data[i] = data[i-1];
    }
    data[pos] = e;
    len++;
    return true;
}

bool Seqlist::delete_pos(int pos)
{
    if(empty())
    {
        cout << "没有数据" << endl;
        return false;
    }
    for(int i=pos;i<len;i++)
    {
        data[i] = data[i+1];
    }
    len--;
    return true;
}

datatype &Seqlist::at(int index)
{
    return data[index];
}

void Seqlist::show()
{
    for(int i=0;i<len;i++)
    {
        cout << data[i] << " ";
    }
    cout << endl;
}

void Seqlist::expand()
{
    size = 2 * size;
    datatype *newdata = new datatype[size]{0};
    int *p = data;
    for(int i=0;i<len;i++)
    {
        newdata[i] = data[i];
    }
    data = newdata;
    delete []p;
}
int main()
{
    Seqlist s1;
    s1.init(8);
    for(int i=1;i<=5;i++)
    {
        s1.add(i);
    }
    cout << "length = " << s1.length() << endl;
    s1.show();
    s1.insert_pos(2,9);
    cout << "length = " << s1.length() << endl;
    s1.show();
    s1.delete_pos(2);
    cout << "length = " << s1.length() << endl;
    s1.show();
    s1.at(0) = 2;
    s1.show();
    s1.add(8);
    s1.add(8);
    s1.add(8);
    s1.add(8);
    s1.show();
    cout << "length = " << s1.length() << endl;
    s1.showsize();
    return 0;
}

 效果图

思维导图


http://www.kler.cn/a/287968.html

相关文章:

  • CSS Modules中的 :global
  • Springboot采用jasypt加密配置
  • 从零开始学习 sg200x 多核开发之 uboot 网络功能使能
  • SwanLab安装教程
  • 前后端、网关、协议方面补充
  • JWTUtil工具类
  • 物联网之云平台架构
  • 详细解说:ansible自动化运维项目
  • python基础(16面试题附答案一)
  • 【随记】开源 AI(Open source AI)
  • read()和readlines()的区别
  • DReg-NeRF: Deep Registration for Neural Radiance Fields论文解读
  • Flask框架 完整实战案例 附代码解读 【3】
  • 【ag-grid】列宽设置不生效探索
  • 基于vue框架的超市管理系统y9992(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Linux_kernel简介01
  • JavaEE 第21节 UDP数据报结构剖析
  • 【区块链 + 物联网】可信保密的海洋大数据分析平台 | FISCO BCOS应用案例
  • SpringAOPSpring事物管理
  • UE5蓝图 抽卡出货概率
  • 批量替换字符串中的某子串序列为对应的另一子串序列(z3求解器解多元方程时很好用)
  • 【C#】字段
  • 在麒麟系统安装php7.4中遇到的问题
  • uniapp微信小程序3D XR-FRAME
  • 机器学习之监督学习(二)逻辑回归(二元分类问题)
  • 【ESP32】mqtt 发送和接收