C++day2

一、思维导图

二、使用C++手动封装一个顺序表,包含成员数组一个

cpp 复制代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <csignal>

using namespace std;
using datatype = int;
#define MAX 30

struct Seqlist
{
private:
    // datatype data[MAX] = {0};                //顺序表的数组
    datatype *data;                  //顺序表的数组
    int size = 0;                    //数组的大小
    int len = 0;                     //顺序表实际长度


public:
    //初始化函数
    void init(int n);
    //判空函数
    bool empty();
    //判满函数
    bool full();
    //添加数据函数
    bool add(datatype element);
    //求当前顺序表的实际长度
    int seq_length();
    //任意位置插入函数
    bool insert_pos(int pos, datatype element);
    //任意位置函数函数
    bool delete_pos(int pos);
    //访问容器中任意一个元素 at
    datatype &at(int index);
    //遍历展示顺序表
    bool list_show();

    //二倍扩容
    void expend();
    //销毁
    void destroy();

};
//结构体函数定义
void Seqlist::init(int n)
{
    size = n;                       //当前数组的最大容量
    data = new datatype[size];      //在堆区申请一个顺序表容器
}

bool Seqlist::empty()
{
    return len==0?1:0;
}

bool Seqlist::full()
{
    return len==size?1:0;
}

bool Seqlist::add(datatype element)
{
    //判满
    bool res = full();
    if(res == 1)
    {
        expend();
    }
    data[len] = element;
    len++;
    cout<<"size ="<<size<<endl;
    return 1;
}

int Seqlist::seq_length()
{
    return len;
}

bool Seqlist::insert_pos(int pos, datatype element)
{
    //判满
    bool res = full();
    if(res == 1)
    {
        expend();
    }
    //判断pos合法性
    if(pos<0 || pos>len)
    {
        cout<<"插入位置错误"<<endl;
        return 0;
    }
    //插入位置所有元素后移
    for(int i=len-1;i>len-pos;i--)
    {
        data[i+1] = data[i];
    }
    // 插入新元素
    data[pos] = element;
    // 更新长度
    len++;
    return 1;
}

datatype& Seqlist::at(int index)
{
    //判断位置合法
    if(index<0 || index>=len)
    {
        cout<<"访问位置错误,返回默认位置"<<endl;
        return data[0];
    }
    return data[index];
}

bool Seqlist::list_show()
{
    //判断表空
    if(len == 0)
    {
        cout<<"empty"<<endl;
        return 0;
    }
    for(int i=0;i<len;i++)
    {
        cout<<data[i]<<"\t";
    }
    cout<<endl;
    return 1;
}
void Seqlist::expend()
{
    //申请二倍空间
    datatype* temp =new datatype[size*2];
    //将原顺序表拷贝到新顺序表
    memcpy(temp,data,size* sizeof(datatype));
    delete[] data;                  //销毁原顺序表
    data = temp;                    //data重新指向新顺序表
    size *= 2;
}

void Seqlist::destroy()
{
    delete[] data;
    size = 0;
    len = 0;
    data = NULL;
}

int main()
{
    cout<<"***********顺序表***********"<<endl;
    cout<<"         1、创建顺序表         "<<endl;
    cout<<"         2、初始化顺序表       "<<endl;
    cout<<"         3、任意位置插入       "<<endl;
    cout<<"         4、打印顺序表         "<<endl;
    cout<<"         5、打印任意位置       "<<endl;
    cout<<"         6、销毁顺序表         "<<endl;

    //实例化一个顺序表
    Seqlist list;
    while(1)
    {
        //system("cls");         //清屏
        int menu = 0;
        cout<<"请输入操作选项:";
        cin>>menu;
        switch(menu)
        {
        case 1:
        {
            cout<<"创建顺序表"<<endl;
            int size = 0;
            cout<<"请输入需要创建顺序表的大小"<<endl;
            cin>>size;

            list.init(size);
            cout<<"创建成功"<<endl;
        }
            break;
        case 2:
        {
            cout<<"初始化顺序表"<<endl;
            int n = 0;
            cout<<"请输入您要插入数据个数"<<endl;
            cin>>n;

            datatype element = 0;
            for(int i=0;i<n;i++)
            {
                cout<<"请输入第"<<i+1<<"个数据"<<endl;
                cin>>element;
                list.add(element);
            }
            cout<<"初始化成功"<<endl;
        }
            break;
        case 3:
        {
            cout<<"任意位置插入"<<endl;
            int pos = 0;
            datatype element;
            cout<<"请输入您要插入的位置"<<endl;
            cin>>pos;
            cout<<"请输入您要插入的元素"<<endl;
            cin>>element;
            bool res = list.insert_pos(pos,element);
            if(res == 1)
            {
                 cout<<"任意位置插入成功"<<endl;
            }
        }
            break;
        case 4:
        {
            cout<<"打印顺序表"<<endl;
            //输出
            list.list_show();
        }
            break;
        case 5:
        {
            cout<<"打印任意位置"<<endl;
            int pos = 0;
            cout<<"请输入您要查看的位置:";
            cin>>pos;
            cout<<list.at(pos-1)<<endl;
        }
            break;
        case 6:
        {
            cout<<"销毁顺序表"<<endl;
            list.destroy();
            cout<<"销毁成功"<<endl;
        }
            break;
        default:
            cout<<"选项输入错误"<<endl;
        }
    }

    return 0;
}
相关推荐
ShineWinsu5 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
傲世仙尊5 小时前
多态-虚表才活到运行期符号表早已消失
c++
开开心心_Every5 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c5 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫5 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
吴卫斌5 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·6 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程6 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛
超级架构师6 小时前
PRAXO-CORE 2.5.0:用 conformance 和显式边界构建 Go Agent 框架
开发语言·人工智能·后端·golang·ai编程·智能体框架·praxo-core
时间的拾荒人7 小时前
CMake 常用命令详解:从版本声明到安装部署
c++·面试