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;
}
相关推荐
君义_noip3 分钟前
信息学奥赛一本通 1528:【例 2】单词游戏
c++·算法·信息学奥赛·一本通·csp-s
BUTCHER57 分钟前
Java 启动服务时指定JVM(Java 虚拟机)的参数配置说明
java·开发语言·jvm
l1t10 分钟前
利用豆包辅助编写数独隐式唯一数填充c程序
c语言·开发语言·人工智能·算法·豆包·deepseek
FL162386312910 分钟前
[C++][cmake]基于C++在windows上部署yolo26的目标检测onnx模型
c++·windows·目标检测
摇滚侠27 分钟前
尚硅谷 Java 零基础全套视频教程,System、Runtime、BigDecimal、BigInteger、Random,笔记 151
java·开发语言·笔记
朔北之忘 Clancy29 分钟前
第一章 顺序结构程序设计(1)
c++·算法·青少年编程·竞赛·教材·考级·讲义
独行soc36 分钟前
2026年渗透测试面试题总结-1(题目+回答)
android·开发语言·网络·安全·web安全·渗透测试·php
IT瑞先生36 分钟前
php unicode与中文互转
android·开发语言·php
小镇学者37 分钟前
【python】python有必要像go或者nodejs那样做多版本切换吗?
开发语言·python·golang
星火开发设计37 分钟前
变量与常量:C++ 中 const 关键字的正确使用姿势
开发语言·c++·学习·const·知识