8月28c++

 c++手动封装顺序表

#include <iostream>

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);//添加数据函数
    int length();//求顺序表实际长度
    bool insert_pos(int pos,datatype e);//任意位置插入函数
    bool delete_pos(int pos);//任意位置删除函数
    datatype &at(int index);//访问任意一个元素函数
    void expand();//二倍扩容函数
};
//初始化函数
void SeqList::init(int s)
{
    size=s;
    data=new datatype(size);
}
//判空
bool SeqList::empty()
{
    return len==0;//实际长度是否为0
}

bool SeqList::full()
{
    return len==size;//实际长度是否为最大大小
}
//添加
bool SeqList::add(datatype e)
{   //判满
    if(full())
    {
        return 0;
    }
    data[len]=e;//添加
    len++;//长度加1
    return 1;
}
//实际长度
int SeqList::length()
{
    return len;//返回实际长度
}
//任意位置插入
bool SeqList::insert_pos(int pos, datatype e)
{
    //判满和插入位置
    if(full()||pos<1||pos>len+1)
    {
        return 0;
    }
    int i;
    //后一个等于前一个
    for(i=len;i>pos-1;i--)
    {
        data[i]=data[i-1];
    }
    //按位置插入
    data[i]=e;
    len++;//实际长度加一
    return 1;
}
//任意位置删除
bool SeqList::delete_pos(int pos)
{
    //判空和删除位置
    if(empty()||pos<1||pos>len)
    {
        return 0;
    }
    //前一个等于后一个
    for(int i=pos;i<len;i++)
    {
        data[i-2]=data[i-1];
    }
    len--;//实际长度减一
    data[len]=0;//最后一个数据清零
    return 1;
}

datatype& SeqList::at(int index)
{
    return data[index];//返回任意位置数据
}

void SeqList::expand()
{
    size=size*2;//二倍最大长度
    datatype *temp=new datatype[size];//堆区创建数组空间
    //搬运原数组
    for(int i=0;i<len;i++)
    {
        temp[i]=data[i];
    }
    delete[]data;//销毁原堆区空间
    data=temp;//指针重新指向该堆区空间
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值