c++day3 手动封装一个顺序表(SeqList),分文件编译实现

news2024/9/21 11:27:01

要求:

有私有成员:顺序表数组的起始地址 ptr、 顺序表的总长度:size、顺序表的实际长度:len

成员函数:初始化 init(int n)

判空:empty

判满:full

尾插:push_back

插入:insert(int index)

任意位置删除:erase(int index)

尾删: pop_back

求长度:size()

获取任意位置元素:& at(int inex)

将顺序表进行排序:sort(bool flag) //flag 为真,表示升序,否则是降序

seqlist.h

#ifndef SEQLIST_H
#define SEQLIST_H
 
 
//typedef int datatype;        //类型重命名
using datatype = int;
 
 
 
 
//封装一个顺序表
class SeqList
{
private:
    datatype *ptr;        //指向堆区空间的起始地址
    int size;             //总长度
    int len = 0;          //当前顺序表实际长度
 
 
public:
    void init(int n);
 
    bool empty();
 
    bool full();
 
    void push_back(datatype e);
 
    void insert(int index);//插入
 
    void erase(int index); //任意位置删除
 
    void pop_back();       //尾删
 
    void size_1();
 
    int & at(int index); //获取任意位置元素
 
    void sort(bool flag);   //真升序,否则降序
 
    void show();
 
 
};
#endif // SEQLIST_H

seqlist.cpp

#include <iostream>
 
using namespace std;
#include "seqlist.h"
 
void SeqList::init(int n)
{
       //在堆区申请出一个长度为n的空间,将其实地址赋值给ptr
       this->ptr = new datatype[n];
 
 
       //给len进行初始化
       this->len = 0;
       this->size = n;
}
 
bool SeqList::empty()
{
    return this->len == 0;
}
 
bool SeqList::full()
{
    return this->len == this->size;
}
 
void SeqList::push_back(datatype e)
{
    //判断是否满了
    if(this->full())
    {
        return ;
    }
 
 
    this->ptr[len++] = e;
 
}
 
 
void SeqList::show()
{
    //判空
    if(this->empty())
    {
        return ;
    }
 
    cout<<"当前顺序表中的元素分别是:";
    for(int i=0; i<this->len; i++)
    {
        cout<<*(ptr+i)<<" ";
    }
    cout<<endl;
}
void SeqList::insert(int index)
{
    if(this->empty()||this->full()||index<0||index>this->len)
    {
        return ;
    }
    int key;
    cout<<"第"<<index+1<<"个你想插入的值:";
    cin>>key;
 
    int n = this->len;
    int i = index;
    while(i<=n)
    {
        this->ptr[n+1]=this->ptr[n];
        n--;
    }
    this->ptr[index]=key;
 
    this->len++;
}
 
void SeqList::erase(int index)
{
    if(this->empty()||index<0||index>this->len)
    {
        return ;
    }
    int n = this->len;
    int i = index;
    while (i<=n)
    {
        this->ptr[i]=this->ptr[i+1];
        i++;
    }
 
    this->len--;
 
}
 
void SeqList::pop_back()
{
    if(this->empty())
    {
        return ;
    }
 
    this->len--;
}
 
void SeqList::size_1()
{
    if(this->empty())
    {
        return ;
    }
 
    cout<<"顺序表元素个数:"<<this->len+1<<endl;
 
}
 
int error =-1;
int & SeqList::at(int index)
{
 
    if(this->empty()||index<0||index>=this->len)
    {
 
        cout<<"越界"<<endl;
        return error;
    }
 
    return this->ptr[index];
 
}
 
void SeqList::sort(bool flag)
{
    if(this->empty())
    {
        return ;
    }
    int i = 0,j,index;
    int n = this->len;
 
 
    while(i<n)
    {
        index = i;
        j=i;
        while(j<n)
        {
            if(flag)
            {
                if(this->ptr[index]>this->ptr[j])
                {
                    index = j;
                }
            }
            else{
                if(this->ptr[index]<this->ptr[j])
                {
                    index = j;
                }
 
            }
            j++;
        }
        if(index!=i)
        {
            int temp = this->ptr[index];
            this->ptr[index] = this->ptr[i];
            this->ptr[i] = temp;
 
        }
        i++;
 
 
 
    }
}

main.cpp

#include <iostream>
#include "seqlist.h"
using namespace std;
 
int main()
{
 
    SeqList sl;           //实例化一个顺序表对象
    sl.init(5);            //申请空间
    sl.push_back(1);
    sl.push_back(3);
    sl.push_back(5);
 
    sl.show();
 
    sl.insert(1);
    sl.insert(1);
    cout<<"插入后数组:"<<endl;
    sl.show();
 
//    sl.erase(1);
//    cout<<"删除后数组:"<<endl;
//    sl.show();
 
//    sl.pop_back();
//    cout<<"尾删后数组:"<<endl;
//    sl.show();
 
    int pos = sl.at(2);
    cout<<"该位置的值:"<<pos<<endl;
 
    sl.sort(1);
    cout<<"升序排序后:"<<endl;
    sl.show();
 
    sl.sort(0);
    cout<<"降序排序后:"<<endl;
    sl.show();
 
    return 0;
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2152200.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优数:助力更高效的边缘计算

在数字化时代的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。随着物联网&#xff08;IoT&#xff09;设备的激增和5G技术的兴起&#xff0c;我们正迅速步入一个新时代&#xff0c;在这个时代中&#xff0c;数据不仅在量上爆炸性增长&#xff0c;更在速度和实时性上提出了…

Hadoop里面MapReduce的序列化与Java序列化比较

什么是序列化&#xff1f; jvm中的一个对象&#xff0c;不是类&#xff0c;假如你想把一个对象&#xff0c;保存到磁盘上&#xff0c;必须序列化&#xff0c;你把文件中的对象进行恢复&#xff0c;是不是的反序列化。 假如你想把对象发送给另一个服务器&#xff0c;需要通过网…

线性dp 总结详解

就是感觉之前 dp 的 blog 太乱了整理一下。 LIS(最长上升子序列) 例题 给定一个整数序列&#xff0c;找到它的所有严格递增子序列中最长的序列&#xff0c;输出其长度。 思路 拿到题目&#xff0c;大家第一时间想到的应该是的暴力(dp)做法&#xff1a; #include <bits/s…

基于Windows系统以tomcat为案例,讲解如何新增自启动服务,定时重启服务。

文章目录 引言I 设置服务自启动的常规操作II 安装多个tomcat服务,并设置自启动。III 定时重启服务引言 为了同一个版本安装多个tomcat服务,并设置自启动。使用Windows的任务计划程序来创建一个定时任务,用于重启Tomcat服务。I 设置服务自启动的常规操作 运行窗口输入control…

2024双11有哪些值得入手的好物?2024年双十一好物推荐

随着2024年双十一购物狂欢节的临近&#xff0c;消费者们正摩拳擦掌&#xff0c;准备迎接这场年度最大的网购盛会。面对琳琅满目的促销信息和令人眼花缭乱的商品&#xff0c;如何在海量商品中精准锁定那些真正值得购买的好物&#xff0c;成为每位精明买家的首要任务。本文旨在为…

牛啊,GitHub 代理加速图文教程

大家好&#xff0c;众所周知&#xff0c;GitHub 在国内访问速度堪忧&#xff0c;经常出现访问不了的情况&#xff0c;如果我们去 clone 代码&#xff0c;网速非常差。今天教大家如何给 GitHub 进行加速。 要用到我开发的开源项目 Cloudflare Workers Proxy&#xff0c;它是一个…

视频压缩篇:适用于 Windows 的 10 款最佳视频压缩器

视频压缩器现在对许多想要减小视频大小的视频编辑者来说非常有名。但是&#xff0c;并非所有可以在网上找到的视频压缩器都能产生最佳输出。因此&#xff0c;我们搜索了可以无损压缩视频的最出色的视频压缩器应用程序。本文列出了您可以在离线、在线和手机上使用的十大最佳视频…

2024华为杯研赛D题保姆级教程思路分析+教程

2024年中国研究生数学建模竞赛D题保姆级教程思路分析 D题&#xff1a;大数据驱动的地理综合问题&#xff08;数学分析&#xff0c;统计学&#xff09; 关键词&#xff1a;地理、气候、统计&#xff08;细致到此题&#xff1a;统计指标、统计模型、统计结果解释&#xff09; …

无线领夹麦克风哪个降噪好?一文搞懂麦克风什么牌子的音质效果好

对于视频拍摄、直播来说&#xff0c;一款好的拾音麦克风是不可或缺的。作为一位数码博主&#xff0c;也是会经常拍摄视频讲解&#xff0c;早期没有使用麦克风时&#xff0c;声音不够清晰&#xff0c;而且周围环境音也会同时被收录&#xff0c;导致整个音频的音质效果极差&#…

【多线程】CAS的原理及应用,看这篇文章就够啦

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 一、CAS概述 CAS&#xff08;Compare and Swap&#xff09;&#xff0c;中文译为 “比较并交换” &#xff0c;是一种无锁算法中常用的原子操作。CAS通常用于实现线程之间的同…

力扣之1459.矩形面积

1. 1459.矩形面积 1.1 题干 表: Points ---------------------- | Column Name | Type | ---------------------- | id | int | | x_value | int | | y_value | int | ---------------------- id 是该表中具有唯一值的列。 每个点都用二维坐标 (x_value, y_value) 表示。 编…

【力扣每日一题——2374. 边积分最高的节点】python

2374. 边积分最高的节点 给你一个有向图&#xff0c;图中有 n 个节点&#xff0c;节点编号从 0 到 n - 1 &#xff0c;其中每个节点都 恰有一条 出边。 图由一个下标从 0 开始、长度为 n 的整数数组 edges 表示&#xff0c;其中 edges[i] 表示存在一条从节点 i 到节点 edges[…

大模型训练实战经验总结

在当今AI技术飞速发展的背景下&#xff0c;定制化大模型的自主训练已成为满足特定行业需求、保障数据安全、提升模型应用效能的关键途径。本文将深度剖析这一过程的核心价值与实践智慧&#xff0c;从数据隐私保护、模型透明度增强&#xff0c;到数据预处理的精细操作&#xff0…

记录一次fs配置导致串线的问题

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs在实际的使用过程中也会经常碰到莫名其妙的问题&#xff0c;大部分都是配置问题。 环境 CentOS 7.9 freeswitch 1.10.7 docker 26.1.1 问题描述 组网方案如下。其中的fs-reg是注册服务器&#xff0c;fs1和fs2是…

NEES(Normalized Estimation Error Squared 归一化估计误差平方)

目录 NEES的计算步骤 解释 示例 代码 与RMSE的区别 NEES(Normalized Estimation Error Squared)是一种用于评估状态估计精度的指标,通常用于比较估计值与真实值之间的差异。计算NEES的步骤如下: NEES的计算步骤 获取状态估计: 设定目标的真实状态为。设定状态估计为…

Ubuntu 20.04安装pycharm2022及配置快捷方式

一、下载与安装 1. 下载 在 官网 下载所需版本&#xff0c;如&#xff1a;下载 2022.3.3 - Linux (tar.gz) 2. 安装 设置自定义安装路径(推荐在 /opt/ 路径下)并安装 mkdir -p ~/Documents/software/pycharm/ cd ~/Documents/software/pycharm/ mv ~/Downloads/pycharm-c…

使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

文章目录 一、介绍&#xff1f;二、什么是 Puppeteer-Cluster&#xff1f;三、为什么代理在网络抓取中很重要&#xff1f;四、 为什么使用带代理的 Puppeteer-Cluster&#xff1f;五、分步指南&#xff1a; 带代理的 Puppeteer 群集5.1. 步骤 1&#xff1a;安装所需程序库5.2. …

光耦知识分享 | 可控硅光耦的行业应用及封装形式

可控硅光耦&#xff08;SCR Optocoupler&#xff09;是一种特殊类型的光耦&#xff0c;通常由红外发光二极管&#xff08;LED&#xff09;和双向可控硅&#xff08;SCR&#xff09;组成&#xff0c;用于实现输入和输出之间的电气隔离和信号传输。能够以最少的外部元器件数控制大…

Postman如何测试WebSocket接口!

01、WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直…

网通产品硬件设计工程师:百兆商业级网络隔离变压器有哪些选择呢?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是网通设备有关工程师产品设计时可供选择的几款百兆商业级网络隔离变压器... 下面我们就一起来看看网通设备有关工程师产品设计时可供选择的几款百兆商业级网络隔离变压器&#xff0c;让您的产品创新在成…