c++:类class

news2024/9/21 4:26:28

1.手动封装一个顺序表(SeqList),分文件编译实现,包含如下:

有私有成员:顺序表数组的起始地址 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 为真,表示升序,否则是降序

主函数

#include <iostream>
#include <string.h>
#include "list.h"
int main()
{
    Seqlist list;
    list.init(6);
    list.push_back(1);
    list.push_back(4);
    list.push_back(5);
    list.push_back(2);
    list.push_back(7);
    list.show();
    cout<<"插入:"<<endl;
    list.insert(2,9);
    list.show();
    cout<<"删除:"<<endl;
    list.erase(2);
    list.show();
    cout<<"尾删:"<<endl;
    list.pop_back();
    list.show();

    cout<<"当前大小:"<<ends;
    cout<<list.at(2)<<endl;

    cout<<"排序后:"<<endl;
    list.sort(1);
    list.show();
    return 0;
}

list.h

#ifndef LIST_H
#define LIST_H


using namespace std;



//封装顺序表

class Seqlist
{
private:
    int *ptr;
    int size;
    int len=0;

public:
    void init(int n);

    bool empty();

    bool full();

    void push_back(int e);//尾插

    void insert(int index,int num);
    //任意位置删除
    void erase(int index);
    //尾删
    void pop_back();

    void show();
    //当前长度
    int cur_size();
    int at(int index);
    void sort(bool flag);

};

#endif // LIST_H

list.c

#include "list.h"
#include <iostream>

using namespace std;



//封装顺序表

void Seqlist::init(int n)
{
    //堆区申请空间(大小为n)
    this->ptr=new int[n];
    //bzero(this->ptr,sizeof(int)*n);


    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(int e)//尾插
{
    if(this->full())
    {
        return ;
    }
    this->ptr[len++]=e;
}
//插入
void Seqlist::insert(int index,int num)
{
    if(full())
    {
        return;
    }
    for(int i=len-1;i>=index-1;i--)
    {
        ptr[i+1]=ptr[i];
    }

    ptr[index-1]=num;
    len++;
}
//任意位置删除
void Seqlist::erase(int index)
{
    if(empty())
    {
        return;
    }
    for(int i=index;i<len;i++)
    {
        ptr[i-1]=ptr[i];
        ptr[i]=NULL;
    }
    len--;
}
//尾删
void Seqlist::pop_back()
{
    if(empty())
    {
        return;
    }
    ptr[len-1]=NULL;
    len--;

}


void Seqlist::show()
{//判空
    if(len==0)
    {
        return;
    }

    cout<<"顺序表"<<endl;
    for(int i=0;i<len;i++)
    {
        cout<<ptr[i]<<ends;
    }

    cout<<endl;
}
//当前长度
int Seqlist::cur_size()
{
    if(empty())
    {
        return 0;
    }
    else
    {
        return len;
    }
}

int Seqlist::at(int index)
{
    int num;
    num=ptr[index-1];
    return num;
}

void Seqlist::sort(bool flag)
{
    if(flag)
    {
        for(int i=1;i<len;i++)
        {
            for(int j=0;j<len-i;j++)
            {
                if(ptr[j]>ptr[j+1])
                {
                    int temp;
                    temp=ptr[j];
                    ptr[j]=ptr[j+1];
                    ptr[j+1]=temp;
                }
            }
        }
    }
    else
    {
        for(int i=1;i<len;i++)
        {
            for(int j=0;j<len-i;j++)
            {
                if(ptr[j]<ptr[j+1])
                {
                    int temp;
                    temp=ptr[j];
                    ptr[j]=ptr[j+1];
                    ptr[j+1]=temp;
                }
            }
        }

    }
}

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

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

相关文章

从源码看透 Ptmalloc:堆内存分配与释放的背后

&#x1f6f8;0. 前言 内存管理是个很复杂的东西&#xff0c;一般的程序员在写应用层代码的时候根本就不会关注内存的使用&#xff0c;尤其是 GC 语言自带垃圾回收机制&#xff0c;很多同学都使用过 C 语言中的 malloc&#xff0c;但很少有人能知道 malloc 其实是个很复杂的实现…

tomcat服务搭建部署ujcms网站

tomcat服务搭建部署ujcms网站 关闭selinux和防火墙 setenforce 0 && systemctl stop firewalld安装java环境 #卸载原有java8环境 yum remove java*#上传java软件包&#xff0c;并解压缩 tar -xf openjdk-11.0.1_linux-x64_bin.tar.gz && mv jdk-11.0.1 jdk11…

Android Perfetto 学习

1、如何抓取性能日志 方式1、通过手机里的System Tracing抓取 1、点击Settings->System->Developer options->System Tracing->Record trace 打开 2、操作完成后&#xff0c;点击Settings->System->Developer options->System Tracing->Record trace…

C++自动寻径算法

测试 #include <iostream> #include "source/AStar.hpp"int main() {AStar::Generator generator;generator.setWorldSize({25, 25});generator.setHeuristic(AStar::Heuristic::euclidean);generator.setDiagonalMovement(true);generator.addCollision({1, …

Vue 实现高级穿梭框 Transfer 封装

文章目录 01 基础信息1.1. 技术栈1.2. 组件设计a. 竖版设计稿b. 横版设计稿 02 技术方案&#xff08;1&#xff09;初定义数据&#xff08;2&#xff09;注意事项&#xff08;3&#xff09;逻辑草图 03 代码示例3.1. 组件使用3.2. 组件源码./TransferPlus/index.vue./TransferP…

爬虫----webpack

目录 一. 什么是webpack 出现的原因&#xff1a;同名函数 概念: 特征&#xff1a;大量缩进 webpack的格式 简单的webpack格式&#xff1a; 详细的webpack格式&#xff1a; 几个参数的运用 1. webpack数组形式 2. webpack对象格式 3.多个js文件打包 打印要扣的代码 …

【STM32 Blue Pill编程实例】-手机通过HC-05串口蓝牙控制LED

手机通过HC-05串口蓝牙控制LED 文章目录 手机通过HC-05串口蓝牙控制LED1、HC-05串口蓝牙模块介绍2、硬件准备和接线3、模块配置4、代码实现5、手机控制在本文中,我们介绍如何使用 STM32CubeIDE 和 HAL 库将 HC-05 蓝牙模块与 STM32 Blue Pill 开发板连接。 我们将使用 Android…

HarmonyOS 应用获取公钥和 MD5 指纹签名信息

鸿蒙版本获取 MD5 指纹和公钥可参考如下方式; 首先,通过 AGC 官网 将所需证书下载至本地; 其次,通过记事本或者文本编译器的方式将其正式打开,将其内容中前两项 BEGIN CERTIFICATE 和 END CERTIFICATE 的段落删除,仅保留最后一段中的内容(包括 BEGIN CERTIFICATE 和 END CERTI…

Jboss CVE-2017-12149 靶场攻略

漏洞简述 该漏洞为 Java反序列化错误类型&#xff0c;存在于 Jboss 的 HttpInvoker 组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进⾏任何安全检查的情况下尝试将来⾃客户端的数据流进⾏反序列化&#xff0c;从⽽导 致了漏洞 漏洞范围 JBoss 5.x/6.x 环境搭建 …

Xinstall全链路解决方案,让社交App推广效果倍增!

随着互联网的飞速发展&#xff0c;社交App如雨后春笋般涌现&#xff0c;然而&#xff0c;如何在激烈的市场竞争中脱颖而出&#xff0c;成为每个推广者亟待解决的问题。今天&#xff0c;就让我们来揭秘Xinstall如何助力社交App打破运营推广瓶颈&#xff0c;让你的推广之路更加顺…

前端vue-父传值给儿子或者孙子(依赖注入),只能从上层传给下层组件

不是响应式的 加上computed包裹就是响应式的&#xff0c;但是发明这个传值方法的目的就是不让他成为响应式的&#xff0c;所以推荐使用上面的写法。

对商品分类系统的若干问题的思考

科学研究的目的就是研究事物的特征&#xff0c;并根据共同的特征加以分类 商品分类是商业&#xff0c;制造业中最普遍的活动&#xff0c;几乎所有的企业&#xff0c;电商平台都要对销售的商品&#xff0c;使用的原材料&#xff08;BOM&#xff09;进行分类和编号。 商品分类貌似…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】下

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核&#xff08;LiteOS-M&#xff09; 轻量系统内核&#…

前端自动化测试框架:如何选择最适合你的方案

前端自动化测试是指使用代码或工具来模拟用户在浏览器上的操作&#xff0c;以检验网页或应用程序的功能和性能是否符合预期。前端自动化测试可以提高开发效率&#xff0c;减少人工错误&#xff0c;保证软件质量和用户体验。 但是&#xff0c;在众多的前端自动化测试框架中&…

鸿蒙应用开发:视频播放

AVPlayer API同样适用于视频播放&#xff0c;与音频播放的区别仅在于是否提供surfaceId&#xff08;相当于给视频播放选择一个容器&#xff09;。鸿蒙官网描述&#xff0c;surfaceId指视频窗口ID&#xff0c;只允许在initialized状态下设置&#xff0c;在视频播放时要指定窗口进…

破损shp文件修复

大家中秋节快乐&#xff01; 介绍 半年前写过破损shp文件修复的内容&#xff0c;当时写了一个简陋的小工具。 现在重新讲讲这方面的内容&#xff0c;这篇文章也主要围绕以下两个方面进行展开&#xff1a; 1、当时是怎么实现破损shp文件修复 2、现在怎么把这个功能集成到rs…

LINUX网络编程:TCP(1)

目录 1.认识Tcp的报头 2.确认应答机制&#xff08;ACK&#xff09; 序号与确认序号 捎带应答 3.超时重传机制 4.Tcp连接管理 三次握手 为什是三次握手 四次挥手 理解TIMEWAIT 1.认识Tcp的报头 源端口和目的端口号没什么说的 32位的序号和确认序号&#xff0c;之后会介…

如何使用ssm实现毕业生学历证明系统+vue

TOC ssm651毕业生学历证明系统vue 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0…

Linux C# DAY3

作业 1、 #!/bin/bash mkdir -p ~/dir/dir1 mkdir ~/dir/dir2 cp ./* ~/dir/dir1 cp ./*.sh ~/dir/dir2 cd ~/dir/ tar -cvJf dir2.tar.xz ./dir2 mv dir2.tar.xz ~/dir/dir1/ cd ~/dir/dir1/ tar -xvf dir2.tar.xz 2、 #!/bin/bash head -5 /etc/group | tail -1 sudo mkdi…

Docker安装mysql并配置主从,超详细

简介&#xff1a; 本文使用docker安装mysql&#xff0c;并创建master节点&#xff0c;slave节点用于实现主从。废话不多说&#xff0c;直接开始。 1.docker下载镜像&#xff0c;这里我以5.7版本为例。 docker pull mysql:5.7 2.在宿主机上新建如下目录&#xff0c;进行文件挂…