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;
}
相关推荐
神仙别闹2 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
XINGTECODE4 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
我们的五年13 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
zwjapple20 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five21 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省23 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱36 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
做人不要太理性39 分钟前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.1 小时前
2、桥接模式
c++·桥接模式
chnming19871 小时前
STL关联式容器之map
开发语言·c++