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;
}
相关推荐
yuanbenshidiaos3 分钟前
C++----------函数的调用机制
java·c++·算法
程序员_三木11 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊21 分钟前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama27 分钟前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全30 分钟前
Java的基础概念(一)
java·开发语言·python
liwulin050631 分钟前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc35 分钟前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Oneforlove_twoforjob39 分钟前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言
羚羊角uou42 分钟前
【C++】优先级队列以及仿函数
开发语言·c++
姚先生971 小时前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵