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

作业:

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


思维导图:

相关推荐
w_zero_one2 小时前
动态规划(三)
java·算法·动态规划
Logic1012 小时前
C语言/数据结构贡献法题解:数组权值——所有连续子数组中不同数字个数之和(O(n)解法)
c语言·数据结构·算法·数组·时间复杂度·贡献法·哈希记录
DongQiShanRen2 小时前
六根硬件映射(中):双站校验、生克闭环与驱动接口
数据库·人工智能·算法·rust·哈希算法·集成学习
mmmmath_33 小时前
LeetCode.637.二叉树的层平均值
算法·leetcode
ESDWAN3 小时前
跨境网络延迟、抖动和丢包有什么区别?如何判断业务影响
开发语言·网络·计算机网络·php
Code_Solitude3 小时前
C语言分支结构练习题(华师版)
c语言·开发语言
青少儿编程课堂3 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:并查集连通块与朋友圈问题解析
c++·python·算法·bfs·信息学竞赛
wyhwust3 小时前
codeblocks程序调试
c++
Tisfy3 小时前
LeetCode 2913.子数组不同元素数目的平方和 I:第一题先常数很大的O(n^2)
算法·leetcode·题解·模拟·暴力
罗湖老棍子3 小时前
[USACO05NOV] Asteroids G(洛谷-P7368)
算法·图论·二分图匹配·最大匹配·最小顶点覆盖