第二章:面向对象之封装(一)

作业:

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

cpp 复制代码
#ifndef SEQLIST_H
#define SEQLIST_H

#include <iostream>

using namespace std;
using datatype = int;
class Seqlist
{
private:
    datatype * data;
    int size = 0;
    int len = 0;
public:
    //无参构造
    Seqlist();
    //有参构造
    Seqlist(int s);
    //要实现的函数
    //判空函数
    bool empty();
    //判满函数
    bool full();
    //添加数据函数
    bool add(datatype e);
    //求当前顺序表的实际长度
    int length();
    //求当前顺序表的容量
    int si();
    //任意位置插入函数
    bool insert_pos(int pos,datatype e);
    //任意位置删除函数
    bool delete_pos(int pos);
    //访问容器中任意一个元素 at
    datatype & at(int index);
    //君子函数:二倍扩容
    void expend();
    //释放顺序表
    void seqfree();
};

#endif // SEQLIST_H
cpp 复制代码
#include "seqlist.h"
//无参构造
Seqlist::Seqlist():data(new datatype[10]),size(10),len(0)
{
    cout<<"创建了一个大小为10的顺序表\n";
}
//有参构造
Seqlist::Seqlist(int s):data(new datatype[s]),size(s),len(0)
{
    cout<<"创建了一个大小为"<<s<<"的顺序表\n";
}
//要实现的函数
//判空函数
bool Seqlist::empty()
{
    if(len == 0)
    {
        return 1;
    }
    return 0;
}
//判满函数
bool Seqlist::full()
{
    if(len == size)
    {
        return 1;
    }
    return 0;
}
//添加数据函数
bool Seqlist::add(datatype e)
{
    if(full())
    {
        cout<<"数据添加失败\n";
        return 0;
    }
    data[len] = e;
    len++;
    cout<<"数据添加成功\n";
    return 1;
}
//求当前顺序表的实际长度
int Seqlist::length()
{
    return len;
}
//求当前顺序表的容量
int Seqlist::si()
{
    return size;
}
//任意位置插入函数
bool Seqlist::insert_pos(int pos,datatype e)
{
    if(full() || pos<0 || pos>size)
    {
        cout<<"数据插入失败\n";
        return 0;
    }
    for(int i=len;i>pos;i--)
    {
        data[i] = data[i-1];
    }
    data[pos] = e;
    len++;
    cout<<"数据插入成功\n";
    return 1;
}
//任意位置删除函数
bool Seqlist::delete_pos(int pos)
{
    if(empty() || pos<0 || pos>size)
    {
        cout<<"数据删除失败\n";
        return 0;
    }
    for(int i=pos;i<len;i++)
    {
        data[i] = data[i+1];
    }
    len--;
    cout<<"数据删除成功\n";
    return 1;
}
//访问容器中任意一个元素 at
datatype & Seqlist::at(int index)
{
    if(empty() || index<0 || index>size)
    {
        cout<<"数据访问失败\n";
        return data[0];
    }
    cout<<data[index];
    return data[index];
}
//君子函数:二倍扩容
void Seqlist::expend()
{
    if(empty())
    {
        cout<<"顺序表扩容失败\n";
        return;
    }
    datatype * newdata = new datatype[size*2];
    for(int i=0;i<len;i++)
    {
        newdata[i] = data[i];
    }
    size *= 2;
    delete []data;
    data = newdata;
    cout<<"顺序表二倍扩容成功\n";
}
//释放顺序表
void Seqlist::seqfree()
{
    delete []data;
    data = NULL;
    cout<<"顺序表释放成功\n";
}
cpp 复制代码
#include "seqlist.h"

int main()
{
    Seqlist stu(50);
    stu.add(89);
    stu.add(98);
    stu.add(94);
    stu.add(73);
    stu.insert_pos(2,78);
    stu.delete_pos(1);
    stu.insert_pos(0,66);
    cout<<"当前顺序表长度为"<<stu.length()<<endl;
    cout<<"当前顺序表值分别为:\n";
    for(int i=0;i<stu.length();i++)
    {
        stu.at(i);
        cout<<'\t';
    }
    cout<<endl;
    cout<<"当前顺序表容量为"<<stu.si()<<endl;
    stu.expend();
    cout<<"当前顺序表容量为"<<stu.si()<<endl;
    cout<<"当前顺序表值分别为:\n";
    for(int i=0;i<stu.length();i++)
    {
        stu.at(i);
        cout<<'\t';
    }
    cout<<endl;
    stu.seqfree();
    return 0;
}


思维导图:

相关推荐
瑞雪兆丰年兮5 小时前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
2601_967979126 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
SomeOtherTime6 小时前
Rust生命周期介绍(AI回答)
开发语言·后端·rust
程序猿打工仔7 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆7 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
喵本喵叁肆7 小时前
Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
开发语言·r语言
老师我太想进步了20267 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
Hvitur8 小时前
Java - Lambda
java·开发语言·python
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
Evand J8 小时前
【MATLAB例程,PMSM19】永磁同步电机(PMSM)基于多速率无迹卡尔曼滤波(UKF)的转速与转子位置估计。测量缺失、状态预测与恢复性能分析
开发语言·matlab·电机·ekf·卡尔曼·电机滤波