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

作业:

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


思维导图:

相关推荐
万能程序员-传康Kk3 分钟前
旅游推荐数据分析可视化系统算法
算法·数据分析·旅游
PXM的算法星球9 分钟前
【并发编程基石】CAS无锁算法详解:原理、实现与应用场景
算法
ll7788119 分钟前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
烨然若神人~11 分钟前
算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
算法
爱coding的橙子23 分钟前
每日算法刷题Day2 5.10:leetcode数组1道题3种解法,用时40min
算法·leetcode
我不想当小卡拉米25 分钟前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
teacher伟大光荣且正确32 分钟前
Qt Creator 配置 Android 编译环境
android·开发语言·qt
炎芯随笔33 分钟前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
乌鸦9441 小时前
《类和对象(下)》
开发语言·c++·类和对象+
炒空心菜菜1 小时前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark