C++ -day3

news2024/12/26 21:55:55

1、自行封装一个栈的类

头文件

#ifndef ZY1_H
#define ZY1_H

#include <iostream>

using namespace std;

class Stack
{
private:
    int *p = nullptr;      //存储栈的数组
    int top;               //栈顶元素的下标
    int max;

public:

    //定义析构函数
    ~Stack();

    //定义拷贝构造函数
    Stack(const Stack &other);

    //创建栈
    Stack(int max);

    //判空
    bool stack_empty();

    //判满
    bool stack_full();

    //入栈
    int stack_push(int e);

    //出栈
    int stack_pop();

    //获取栈顶元素
    int stack_top();

    //栈的大小
    void stack_getsize();

    //清空栈
    int stack_delete();
};

#endif // ZY1_H

源文件:

#include "zy1.h"


//定义析构函数
Stack::~Stack()
{
    delete []p;              //释放成员指针的空间

    cout<<"Stu::析构函数:"<<this<<endl;
}

//定义拷贝构造函数
Stack::Stack(const Stack &other):p(other.p),top(other.top)
{
    cout<<"拷贝构造函数"<<endl;
}

//初始化
Stack::Stack(int size)
{
    max = size;
    p = new int[max];       //构造函数
    top =-1;
}

//判空
bool Stack::stack_empty()
{
    if(top==-1)
    {
        cout<<"栈为空"<<endl;
        return 1;
    }
    return 0;
}

//判满
bool Stack::stack_full()
{
    if(top==max-1)
    {
        cout<<"栈已满"<<endl;
        return 1;
    }
    return 0;
}

//入栈
int Stack::stack_push(int e)
{
    if(stack_full())
    {
        cout<<"入栈失败"<<endl;
        return -1;
    }
    top++;
    p[top]=e;
    cout<<"入栈成功"<<endl;
    return 0;
}

//出栈
int Stack::stack_pop()
{
    if(stack_empty())
    {
        cout<<"出栈失败"<<endl;
        return -1;
    }
    int e=p[top];
    top--;
    cout<<e<<"出栈成功"<<endl;
    return 0;
}

//清空栈
int Stack::stack_delete()
{
    while(top!=-1)
    {
        stack_pop();
    }
    delete [] p;
    p=nullptr;
    cout<<"清空成功"<<endl;
    return 0;
}

//获取栈顶元素
int Stack::stack_top()
{
    cout<<"栈顶元素是:"<<p[top]<<endl;
    return 0;
}

//求栈的大小
void Stack::stack_getsize()
{
    cout<<"栈的大小为:"<<top+1<<endl;
}


测试文件:

#include "zy1.h"

int main()
{
    //设置栈存储的最大值max
    int m;
    cout<<"设置栈的大小"<<endl;
    cin>>m;

    Stack s1(m);
    int e;
    int n;

    //判空
    s1.stack_empty();

    //入栈
    cout<<"请输入要入栈的个数:";
    cin>>n;

    for(int i=0;i<n;i++)
    {
        cout<<"请输入要入栈的元素:";
        cin>>e;
        s1.stack_push(e);
    }
    s1.stack_top();
    s1.stack_getsize();

    cout<<endl;
    s1.stack_delete();

    return  0;
}

2、自行封装一个队列的类

#ifndef ZY2_H
#define ZY2_H

#include <iostream>
#define MAX 128

using namespace std;
class Queue
{
private:
    int *p;         //队列的数组
    int tail;       //记录队尾元素
    int head;       //记录对头元素
    int max;        //队列元素的最大数量
public:

    //析构函数
    ~Queue();

    //拷贝构造函数
    Queue(const Queue &other);

    //初始化
    Queue(int size);

    //判空
    bool queue_empty();

    //判满
    bool queue_full();

    //入队
    int queue_push(int e);

    //出队
    int queue_pop();

    //清空队列
    int queue_delete();

    //队列的大小
    void queue_getsize();

};


#endif // ZY2_H

源文件:

#include "zy2.h"

//初始化
Queue::Queue(int size)
{
    max = size;
    p = new int[max];       //构造函数
    head = -1;
    tail = -1;
}

//定义析构函数
Queue::~Queue()
{
    delete []p;              //释放成员指针的空间

    cout<<"Stu::析构函数:"<<this<<endl;
}
//拷贝构造函数
Queue::Queue(const Queue &other):p(other.p),tail(other.tail),head(other.head)
{
    cout<<"拷贝构造函数"<<endl;
}

//判空
bool Queue::queue_empty()
{
    if(head==tail)
    {
        cout<<"队列为空"<<endl;
        return 1;
    }
    return 0;
}
//判满
bool Queue::queue_full()
{
    if((tail+1)==0)
    {
        cout<<"队列已满"<<endl;
        return 1;
    }
    return 0;
}

//入队
int Queue::queue_push(int e)
{
    if(queue_full())
    {
        cout<<"入队失败"<<endl;
        return -1;
    }
    p[tail]=e;
    tail++;
    cout<<"入队成功"<<endl;
    return 0;
}

//出队
int Queue::queue_pop()
{
    if(queue_empty())
    {
        cout<<"出队失败"<<endl;
        return -1;
    }
    int e=p[head];
    head=(head+1)%MAX;
    cout<<e<<"出队成功"<<endl;
    return 0;
}

//队列的大小
void Queue::queue_getsize()
{
    int size;
    size=(tail-head+MAX)%MAX;
    cout<<"队的大小为:"<<size<<endl;
}

//清空队列
int Queue::queue_delete()
{
    while(head!=tail)
    {
        queue_pop();
    }
    delete [] p;
    p=nullptr;
    cout<<"清空队列成功"<<endl;
    return 0;
}

测试文件:

#include "zy2.h"

int main()
{
    //设置队列存储的最大值max
    int m;
    cout<<"设置队列的大小"<<endl;
    cin>>m;

    Queue q1(m);
    int e;
    int n;
    q1.queue_empty();
    cout<<"请输入要入队的个数:";
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cout<<"请输入要入队的元素:";
        cin>>e;
        q1.queue_push(e);
    }
     q1.queue_getsize();

    cout<<endl;
    q1.queue_delete();

    return 0;
}

 3、思维导图

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

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

相关文章

零基础教程:使用yolov8训练无人机VisDrone数据集

1.准备数据集 1.先给出VisDrone2019数据集的下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1e2Q0NgNT-H-Acb2H0Cx8sg 提取码&#xff1a;31dl 2.将数据集VisDrone放在datasets目录下面 2.数据集转换程序 1.在根目录下面新建一个.py文件&#xff0c;取名叫…

全开源影视APP源码带后台 苍穹影视APP源码 免受权带安装教程

苍穹影视 V20 全新后台七彩视界免受权开源源码此版本为天穹公益版开源无解密安装教程 全新后台很是都雅,源码全开源无加密。 PC 端对接教程&#xff1a; 建议在浮图下操作 正常安装前后端 然后安装米酷 cms 根据教程安装即可 米酷 cms 对接部门已被我改动&#xff0c;只要在安装…

【C++进阶】二叉树进阶之二叉搜索树

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

测试面试回顾(1)

硬件测试面试回顾&#xff08;1&#xff09; pn结MOS和CMOS消耗功耗——MOS器件开关时半导体工艺半导体器件SPSS常用的10种统计分析如何用SPSS进行数据分析&#xff1f;Jmeter介绍及测试用例编写JmeterSelenium测试用例测试用例设计方法通用测试用例八要素自动化运维全局变量与…

matlab自带VMD详解,VMD去噪,VMD分解

为了更好的利用MATLAB自带的vmd函数&#xff0c;本期作者将详细讲解一下MATLAB自带的vmd函数如何使用&#xff0c;以及如何画漂亮的模态分解图。 首先给出官方vmd函数的调用格式。 [imf,residual,info] vmd(x) 函数的输入&#xff1a; 这里的x是待分解的信号&#xff0c;一行或…

Kubernetes Up and Running

从整体概念思想到具体组件对象的思想设计说明和实践探索&#xff0c;对分布式系统软件建设的认识更上一层楼。 英文版本下载 链接&#xff1a;https://pan.baidu.com/s/1ZjMqEMc3GGJxDc0ekz4ihA?pwdhjko 提取码&#xff1a;hjko 摘要 《Kubernetes Up and Running》是一本非…

前后端分离,JSON数据如何交互

如何接收&#xff1a; 在配置文件商法加上相应注解 EnableWebMvc 在接收的路径上加上RequestBody注解 注解的作用&#xff1a;在Spring框架中&#xff0c;RequestBody注解用于将HTTP请求的body中的内容转换为Java对象&#xff0c;并将其作为参数传递给控制器方法。它通常用…

【TCPDF】使用TCPDF导出PDF文件

目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的&#xff1a;PHP通过TCPDF类库导出文件为PDF。 开发语言及类库&#xff1a;ThinkPHP、TCPDF 效果图如下 一、安装TCPDF类库 在项目根目录使用composer安装TCPDF&#xff0c;安装完成后会在vendor目录下…

JAVAEE初阶相关内容第十一弹--多线程(进阶)

目录 一、常见的锁策略 1乐观锁VS悲观锁 1.1乐观锁 1.2悲观锁 2.轻量级锁VS重量级锁 2.1轻量级锁 2.2重量级锁 3.自旋锁VS挂起等待锁 3.1自旋锁 3.2挂起等待锁 4.互斥锁VS读写锁 4.1互斥锁 4.2读写锁 5.公平锁VS非公平锁 5.1公平锁 5.2非公平锁 6.可重入锁VS不…

记LGSVL Map Annotation(2)导入点云、以及地图

导入点云 内置的点云导入器工具提供了将最流行的点云文件格式&#xff08;PCD、PLY、LAS、LAZ&#xff09;转换为可用于仿真的数据所需的所有功能。 要访问点云导入器窗口&#xff0c;请在 Unity 编辑器中打开模拟器项目&#xff0c;然后导航到 Simulator/Import Point Cloud…

SpringCloud学习笔记(六)OpenFeign 服务接口调用

一、OpenFeign简介 1、OpenFeign是什么 Feign是一个声明式WebService客户端&#xff0c;使用Feign能让编写Web Service客户端更加简单。 它的使用方法是定义一个服务接口然后在上面添加注解&#xff0c;Feign也支持可拔插式的编码器和解码器&#xff0c;Spring Cloud对Feign进…

SolVES4.1学习2——导入数据运行模型

使用样例数据运行模型很容易&#xff0c;运行自己的数据要根据教程先对数据进行预处理之后根据教程导入数据。 首先新建一个solves数据库&#xff0c;之后restore。导入数据大概的流程为&#xff1a; 1、导入数据 首先使用PostGIS导入矢量数据。矢量数据包括点位和范围数据。…

grpc多语言通信之GO和DART

都是一个吗生的,找下例子 上一篇文章说到go实现的grpc方法已经实现了一个grpc的server端, 注意: 这两个项目的.proto文件应当是完全一致的,只是方法用各自的语言实现罢了 报错了: Caught error: gRPC Error (code: 12, codeName: UNIMPLEMENTED, message: grpc: Decompresso…

MySQL——命令行客户端的字符集问题

原因&#xff1a;服务器端认为你的客户端的字符集是utf-8&#xff0c;而实际上你的客户端的字符集是GBK。 查看所有字符集&#xff1a;SHOW VARIABLES LIKE character_set_%; 解决方案&#xff0c;设置当前连接的客户端字符集 “SET NAMES GBK;”

Nacos服务心跳和健康检查源码介绍

服务心跳 Nacos Client会维护一个定时任务通过持续调用服务端的接口更新心跳时间&#xff0c;保证自己处于存活状态&#xff0c;防止服务端将服务剔除&#xff0c;Nacos默认5秒向服务端发送一次&#xff0c;通过请求服务端接口/instance/beat发送心跳。 客户端服务在注册服务的…

论文解读 | 用于3D对象检测的PV-RCNN网络原创

原创 | 文 BFT机器人 01 背景 本文的背景涉及到3D物体检测&#xff0c;这是一个在自动驾驶和机器人等领域应用广泛的重要问题。在这些领域&#xff0c;LiDAR传感器被广泛用于捕捉3D场景信息&#xff0c;生成不规则且稀疏的点云数据。这些点云数据提供了理解和感知3D场景的关键…

QVector 和 QMap

QVector_QMap QVector简介 头文件&#xff1a;#include<QVector> 模块&#xff1a; QT core 功能&#xff1a; QVector类是动态数组的模板类&#xff0c;顺序容器&#xff0c;它将自己的每一个对象存储在连续的内存中&#xff0c;可以使用索引号来快速访问它们 常用…

【数据结构】树和二叉树概念

1.树概念及结构 树概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#xff0c;…

Android获取系统读取权限

在Androidifest.xml文件中加上授权语句 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/>

Android12之/proc/pid/status参数含义(一百六十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…