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;
}

 效果图

思维导图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值