9.20作业

news2024/11/15 12:34:19

手动封装一个顺序表(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 为真,表示升序,否则是降序

代码展示

SeqList.h
#ifndef SEQLIST_H
#define SEQLIST_H
#include <iostream>
#include<memory.h>
#include<stdlib.h>
#include<string.h>

using datatype = int;
using namespace std;

//封装一个顺序表
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 show();
    //插入
    void insert(int index);
    //任意位置删除
    void delete_s(int index);
    //尾删: pop_back
    void pop_back();
    //求长度:size()
    datatype get_len();
    //获取任意位置元素
    datatype get_index(int index);
    //将顺序表进行排序
    void sort(bool flag);
};
#endif // SEQLIST_H
SeqList.cpp
#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()
{
    //判空
    cout<<"当前顺序表中的元素分别是:";
    for(int i=0; i<this->len; i++)
    {
        cout<<this->ptr[i]<<" ";
    }
    cout<<endl;
}
//插入
void SeqList::insert(int index){
    //判断是否满了
    if(this->full())
    {
        cout<<"表已经满了!"<<endl;
        return ;
    }
    //判断位置是否合理
    if(index>this->len+1 || index<=0 || index>this->size){
        cout<<"插入位置不合理"<<endl;
        return;
    }
    datatype e;
    cout<<"请输入插入元素:";
    cin >>e;
    for(int i=len-1;i>=index-1;i--){
        this->ptr[i+1] = this->ptr[i];
    }
    this->ptr[index-1] = e;
    this->len++;
}
//任意位置删除
void SeqList::delete_s(int index){
    //判断位置是否合理
    if(index>this->len||index<=0||index>this->size){
        cout<<"删除位置不合理"<<endl;
        return;
    }
    for(int i=index;i<this->len;i++){
        this->ptr[i-1] = this->ptr[i];
    }
    this->len--;
}
//尾删: pop_back
void SeqList::pop_back(){
    if(this->len==0){
        cout<<"顺序表为空!"<<endl;
        return;
    }
    this->len--;
}
//求长度:size()
datatype SeqList::get_len(){
    return this->len;
}
//获取任意位置元素
datatype SeqList::get_index(int index){
    //判断位置是否合理
    if(index>this->len||index<=0||index>=this->size){
        cout<<"位置不合理";
        return -1;
    }
    return this->ptr[index-1];
}
//将顺序表进行排序:sort(bool flag)flag 为真,表示升序,否则是降序
void SeqList::sort(bool flag){
    if(flag){//升序
        for(int i=1;i<this->len;i++){
            for(int j=0;j<this->len-i;j++){
                if(this->ptr[j]>this->ptr[j+1]){
                    datatype t = this->ptr[j];
                    this->ptr[j] = this->ptr[j+1];
                    this->ptr[j+1] = t;
                }
            }
        }
    }else{//降序
        for(int i=1;i<this->len;i++){
            for(int j=0;j<this->len-i;j++){
                if(this->ptr[j]<this->ptr[j+1]){
                    datatype t = this->ptr[j];
                    this->ptr[j] = this->ptr[j+1];
                    this->ptr[j+1] = t;
                }
            }
        }
    }
}

main.cpp
#include "SeqList.h"

int main()
{

    SeqList sl;            //实例化一个顺序表对象
    int n;
    cout<<"请输入顺序表的大小:";
    cin>>n;
    sl.init(n);            //申请空间
    cout<<"请输入插入的数据:(输入#结束)";
    while(1){
        string s;
        cin>>s;
        if(s=="#"){
            break;
        }
        int e = stoi(s);
        sl.push_back(e);
    }
    sl.show();
    int add;
    cout<<"请输入插入数据的位置:";
    getchar();
    cin>>add;
    sl.insert(add);
    sl.show();
    cout<<"请输入删除数据的位置:";
    cin>>add;
    sl.delete_s(add);
    sl.show();
    int c;
    cout<<"是否尾删(1:YES/2:NO):";
    cin>>c;
    if(c==1){
        sl.pop_back();
    }
    sl.show();
    int l = sl.get_len();
    cout<<"顺序表当前长度为:"<<l<<endl;
    int index;
    cout<<"请输入需要位置:";
    cin>>index;
    cout<<index<<"位置数据位:"<<sl.get_index(index)<<endl;
    cout<<"将顺序表进行排序(1:升序,0:降序):";
    cin>>c;
    sl.sort(c);
    sl.show();
    return 0;
}

运行结果

在这里插入图片描述

思维导图

在这里插入图片描述

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

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

相关文章

Rust语言入门第七篇-控制流

文章目录 Rust语言入门第七篇-控制流If 表达式基本结构特点和规则示例 let 语句中使用 ifloop 循环基本结构特点示例综合示例 while 循环基本结构特点示例综合示例 与 loop 循环的区别 for 循环基本结构详细说明特点示例综合示例 match 表达式match表达式的语法结构示例代码 Ru…

Mysql存储过程详细解读

目录 存储过程介绍 创建与调用 查看与删除 变量 系统变量 用户自定义变量 ​编辑局部变量 ​编辑​编辑IF判断 存储过程参数​编辑​编辑​编辑 CASE ​编辑 WHILE​编辑 ​编辑REPEAT​编辑​编辑 LOOP 游标 条件处理程序 存储函数 存储过程介绍 创建与调用 查…

GNN-RAG:用于大模型推理的图神经检索

GNN-RAG&#xff1a;用于大模型推理的图神经检索 秒懂大纲提出背景解法拆解全流程优化创意总结 论文&#xff1a;GNN-RAG: Graph Neural Retrieval for Large Language Model Reasoning 代码&#xff1a;https://github.com/cmavro/GNN-RAG 秒懂大纲 ├── GNN-RAG【主题】…

【刷题日记】43. 字符串相乘

43. 字符串相乘 其实就是大数乘法题&#xff0c;这道题用草稿纸演练一下&#xff0c;其实很好找到方法&#xff0c;模拟大数乘法即可。需要注意的是进位和迭代值&#xff0c;还有注意向下取整和去除前导0&#xff08;容易遗漏&#xff09;。去除前导0的时候还要注意如果全是0&…

命令行运行python时找不到模块怎么解决

问题&#xff1a; 新建了一个项目&#xff0c;目录结构如下&#xff1a; 然后在pycharm中运行glovar是没有问题的&#xff0c;但是在命令行中运行就会提示找不到init模块。 这是因为在pycharm中运行的时候&#xff0c;pycharm会自动将项目所在目录添加到了sys.path中&#xf…

天宝Trimble RealWorks2024.0.2注册机 点云后处理软件 点云三维重建软件

一、功能特色 1、强大的点云数据处理平台 Trimble Realworks2024是市面上先进的点云数据处理软件&#xff0c;能够配准、可视化、浏览和直接处理市面上几乎所有主流品牌扫描仪点云数据&#xff0c;包括Leica、Riegl、ZF、Faro、Topcon等。 2、业界领先的无目标全自动配准 T…

Apache Flink 流批融合技术介绍

摘要&#xff1a;本文整理自阿里云高级研发工程师、Apache Flink Contributor 周云峰老师在 Apache Asia CommunityOverCode 2024中的分享。内容主要分为以下三个部分&#xff1a; 从流批一体到流批融合流批融合的技术解决方案社区进展及未来展望 一、从流批一体到流批融合 1&…

记忆化搜索专题——算法简介力扣实战应用

目录 1、记忆化搜索算法简介 1.1 什么是记忆化搜索 1.2 如何实现记忆化搜索 1.3 记忆化搜索与动态规划的区别 2、算法应用【leetcode】 2.1 题一&#xff1a;斐波那契数 2.1.1 递归暴搜解法代码 2.1.2 记忆化搜索解法代码 2.1.3 动态规划解法代码 2.2 题二&#xff1…

网络模型的保存与读取

文章目录 一、模型的保存二、文件的加载三、模型加载时容易犯的陷阱 一、模型的保存 方式1:torch.save(vgg16, “vgg16_method1.pth”) import torch import torchvision.modelsvgg16 torchvision.models.vgg16(pretrainedFalse) torch.save(vgg16, "vgg16_method1.pth…

oracle数据库启动

文章目录 背景一、步骤1.登录oracle用户2.启动监听服务3.启动数据库 背景 oracle数据库启动 一、步骤 1.登录oracle用户 代码如下&#xff08;示例&#xff09;&#xff1a; su - oracle2.启动监听服务 代码如下&#xff08;示例&#xff09;&#xff1a; lsnrctl start成…

【C++】STL----vector常见用法

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;[C]string类 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一、vector的介绍vector…

MATLAB绘图基础8:双变量图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 8.双变量图形绘制 8.1 散点图 散点图用于显示两个变量间的关系&#xff0c;每个数据点在图上表示为一个点&#xff0c;一个变量在 X {\rm X} X轴&#xff0c;一个变量在 Y {\rm Y} Y轴&#…

【Python报错已解决】AttributeError: ‘DataFrame‘ object has no attribute ‘append‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

暴雨信息|《2024 年全球人工智能趋势报告》发布,GPU仍是AI发展最大关键之一

全球著名调研机构WEKA近日正式发布《2024年全球人工智能趋势报告》&#xff0c;该报告是基于全球1500人工智能决策者的深度调查&#xff0c;覆盖金融、政府、医疗保健等多个行业&#xff0c;解锁了人工智能领域的关键见解和策略。 人工智能正成为许多组织战略的一个基本面&…

滑动窗口(8)_最小覆盖字串

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 滑动窗口(8)_最小覆盖字串 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 题…

6.C++程序中的基本数据类型

数据类型是指在C中用于声明不同类型变量或函数的一个系统或抽象或者是一个分类&#xff0c;它决定了变量存储占用的内存空间以及解析存储的位模式。其实数据类型可以理解为固定内存大小的别名&#xff0c;是创建变量的模具&#xff0c;具体使用哪种模具&#xff08;包括自定义&…

基于深度学习的文本情感原因提取研究综述——论文阅读

前言 既然要学习情感分析&#xff0c;那么肯定还要了解情感原因对抽取的发展历程&#xff0c;所以我又搜了一篇研究综述&#xff0c;虽然是2023年发表的&#xff0c;但是里面提及到的历程仅停留到2022年。这篇综述发布在TASLP期刊&#xff0c;是音频、声学、语言信号处理的顶级…

进程间的通信-信号量

信号量 1.资源竞争 资源竞争 : 当多个进程同时访问共享资源时&#xff0c;会产生资源竞争&#xff0c;最终最导致数据混乱临界资源 : 不允许同时有多个进程访问的资源&#xff0c;包括硬件资源(CPU、内存、存储器以及其他外围设备)与软件资源(共享代码段、共享数据结构)临界区…

有关JS下隐藏的敏感信息

免责声明&#xff1a;本文仅做分享&#xff01; 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用&#xff1a; 小结&#xff1a; Ja…

基于Python+SQLite的课程管理系统

系统需求简介 1.1需求分析 实现一个具体的课程管理系统。按照软件工程思路设计简化的专业课数据库&#xff0c;尽量模拟现有专业课程一个学期的选课排课原型实际情况。&#xff08;注&#xff1a;本系统由本人单独设计、开发完成&#xff09; 1.2 数据结构需求分析 课程管理…