C++数据结构类的自实现,封装栈,循环队列

news2024/12/26 11:06:19

my_Queue.h

#ifndef MY_QUEUE_H
#define MY_QUEUE_H

class My_Queue
{
private:
    int* m_queue;	//队列空间指针
    int front;		//队头
    int tail;		//队尾
    int m_length;	//队列长度

public:
	//构造函数
    My_Queue(int len);
    //构造拷贝函数
    My_Queue(const My_Queue& obj);
    //队列长度
    int length();
    //出队
    bool pop();
    //入队
    bool push(int value);
    //判空
    bool empty();
    //判满
    bool full();
    //遍历
    bool show();
    //析构函数,释放堆空间
    ~My_Queue();
};

#endif // MY_QUEUE_H

my_Queue.c

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

using namespace std;

My_Queue::My_Queue(int len):m_queue(nullptr),front(0),tail(0),m_length(0)
{
    m_queue = new int[len+1];

    for(int i = 0; i < len+1; i++)
    {
        m_queue[i] = 0;
    }

    m_length = len+1;
}

My_Queue::My_Queue(const My_Queue& obj)
{
    m_length = obj.m_length;

    m_queue = new int[obj.m_length];

    for(int i = 0; i < obj.m_length; i++)
    {
        m_queue[i] = obj.m_queue[i];
    }
}

int My_Queue::length()
{
    return (tail + m_length - front) % m_length;
}

bool My_Queue::pop()
{
    bool ret = true;

    if(empty())
    {
        cout << "队列为空" << endl;
        ret = false;
        return ret;
    }

    front = (front + 1) % m_length;
    cout << "出队成功" << endl;

    return ret;
}

bool My_Queue::push(int value)
{
    bool ret = true;

    if(full())
    {
        cout << "队列已满" << endl;
        ret = false;
        return ret;
    }

    m_queue[tail] = value;

    tail = (tail + 1) % m_length;
    cout << "入队成功" << endl;

    return ret;
}

bool My_Queue::empty()
{
    return front == tail;
}

bool My_Queue::full()
{
    return (tail + 1) % m_length == front;
}

bool My_Queue::show()
{
    bool ret = true;

    if( empty() )
    {
        ret = false;
        cout << "队列为空" << endl;
        return ret;
    }

    for(int i = front; i != tail; i = (i+1)%m_length)
    {
        cout << m_queue[i] << " ";
    }

    cout << endl;

    return ret;
}

My_Queue::~My_Queue()
{
    delete[] m_queue;
}

在这里插入图片描述

my_Stack.h

#ifndef MY_STACK_H
#define MY_STACK_H

class My_Stack
{
private:
    int* m_stack;	//栈空间指针
    int m_length;	//栈长度
    int m_max;		//栈容量

public:
	//构造函数
    My_Stack(int len);
    //构造拷贝函数
    My_Stack(const My_Stack& obj);
    //获取栈长度
    int length();
    //获取栈顶变量
    int gettop();
    //出栈
    bool pop();
    //入栈
    bool push(int value);
    //判空
    bool empty();
    //判满
    bool full();
    //遍历
    bool show();
    //清空栈
    bool clear();
    //析构函数释放堆空间
    ~My_Stack();
};

#endif // MY_STACK_H

my_Stack.c

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

using namespace std;

My_Stack::My_Stack(int len):m_stack(nullptr),m_length(0),m_max(0)
{
    m_stack = new int[len];

    for(int i = 0; i < len; i++)
    {
        m_stack[i] = 0;
    }

    m_max = len;
}

My_Stack::My_Stack(const My_Stack& obj)
{
    m_max = obj.m_max;

    m_stack = new int[obj.m_max];

    for(int i = 0; i < obj.m_max; i++)
    {
        m_stack[i] = obj.m_stack[i];
    }
}

int My_Stack::length()
{
    return m_length;
}

int My_Stack::gettop()
{
    if(empty())
    {
        return -1;
    }

    int &top = m_stack[m_length-1];

    return top;
}

bool My_Stack::pop()
{
    bool ret = true;

    if(empty())
    {
        ret = false;
        cout << "栈为空" << endl;
        return ret;
    }

    m_length--;
    cout << "出栈成功" << endl;

    return ret;
}

bool My_Stack::push(int value)
{
    bool ret = true;

    if(full())
    {
        ret = false;
        cout << "栈已满" << endl;
        return ret;
    }

    m_stack[m_length] = value;
    m_length++;
    cout << "入栈成功" << endl;

    return ret;
}

bool My_Stack::empty()
{
    return m_length == 0;
}

bool My_Stack::full()
{
    return m_length == m_max;
}

bool My_Stack::show()
{
    bool ret = true;
    if(empty())
    {
        ret = false;
        cout << "栈为空" << endl;
        return ret;
    }

    for(int i = 0; i < m_length; i++)
    {
        cout << m_stack[i] << " ";
    }
    cout << endl;

    return ret;
}

bool My_Stack::clear()
{
    bool ret = true;

    if(empty())
    {
        ret = false;
        cout << "栈为空" << endl;
        return ret;
    }
    m_length = 0;

    cout << "栈已清空" << endl;

    return ret;
}

My_Stack::~My_Stack()
{
    delete[] m_stack;
}

在这里插入图片描述

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

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

相关文章

“构建高效的SpringMVC增删改查应用“

目录 引言1.配置SpringMVCpom.xmlweb.xmlzking.tldgeneratorConfig.xmljdbc.propertieslog4j2.xmlspring-context.xmlspring-mvc.xmlspring-mybatis.xmlStudentBizImplPagerAspectPageTag 2.实现代码功能StudentController 3.JSP页面代码List.jspedit.jspheard.jsp 4. 运行截图…

Linux--进程--进程-父进程退出

1.进程退出函数 进程退出分为正常退出&异常退出 正常退出&#xff1a; 1、main函数调用return 2、进程调用exit(),标准c库 3、进程调用_exit()或者_Exit(),属于系统调用 补充 1、进程最后一个线程返回 2、最后一个线程调用pthread_exit 异常退出&#xff1a; 1、调用abo…

十九、MySQL外键删除更新行为如何实现?

1、行为约束 &#xff08;1&#xff09;基础概念&#xff1a; 要学习外键约束&#xff0c;就要先了解外键约束。 比如说&#xff0c;现在这里有两张表&#xff0c;其中一张存储着用户的信息(子表)&#xff0c;另外一张存储着用户所属的部门(父表) &#xff0c;但现在…

c++的引用和指针

我们要清楚的知道&#xff0c;使用指针和引用都可以的传入函数的main函数的变量在局部函数改变值时&#xff0c;main函数里面相应的变量也会改变值。但他俩的方式不同。 我们先来说指针&#xff0c;指针传入局部参数时&#xff0c;他会在创建个局部指针变量&#xff0c;然后把…

UMA 2 - Unity Multipurpose Avatar☀️一.让UMA角色动起来

文章目录 🟥 项目基础配置1️⃣UMA_DCS 预制体2️⃣创建 UMA 角色🟧 让UMA动起来1️⃣ 新建空场景,添加UMA_DCS预制体2️⃣配置 vBasicController_Template🟥 项目基础配置 1️⃣UMA_DCS 预制体 将 UMA_DCS 预制体放到场景中 2️⃣创建 UMA 角色 创建空物体,添加 Dy…

C++编译静态成员函数报错: “osgGA::DriveManipulator::setEye”: 非静态成员函数的非法调用

来看代码 .h文件中 static void computePosition(const osg::Vec3d& eye,const osg::Vec3d& lv,const osg::Vec3d& up); void setEye(const osg::Vec3d& eye); void setRotation( const osg::Quat& rotation );osg::Vec3d _eye; osg::Quat _rotation…

Sentinel 部署 配置

目录 概述什么是 SentinelSentinel的特性hystrix与sentinel的区别Sentinel客户端Sentinel服务端 下载安装服务熔断(openfeign) 1. 添加依赖2. 创建 Feign 接口3. Controller调用接口流控规则 概述测试接口准备流控规则配置 1. QPS2. 线程数3. 关联4. 链路5. Warm up&#xff0…

基于Bert+Attention+LSTM智能校园知识图谱问答推荐系统——NLP自然语言处理算法应用(含Python全部工程源码及训练模型)+数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境服务器环境 模块实现1. 构造数据集2. 识别网络3. 命名实体纠错4. 检索问题类别5. 查询结果 系统测试1. 命名实体识别网络测试2. 知识图谱问答系统整体测试 工程源代码下载其它资料下载 前言 这个项目充分利用了…

docker-compose deploy 高可用 elasticsearch TLS

文章目录 1.sysctl2. swap3. hosts4. 配置 instances.yaml5. 创建证书6. 部署7. 修改 kibanna 密码8. 清理 1.sysctl [rootgithub es_tls]# cat /etc/sysctl.conf # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/…

第二证券:现量和现手是什么意思?

现量和现手是证券生意领域的术语。现量通常指股票或其他证券最新成交价格对应的成交量&#xff0c;而现手则是指当日生意的股票或证券的总成交量。了解这些概念关于证券生意的参与者至关重要。以下我们将从多个视点深化分析现量和现手的含义。 首要&#xff0c;现量和现手关于…

2023高教杯数学建模1:ABC题目+初步想法

2023 ABC题目初步想法 写在最前面A题&#xff1a;定日镜场的优化设计问题1&#xff1a;建模将其抽象为数学公式问题2&#xff1a;固定部分参数&#xff0c;约束条件下的局部最优化问题可尝试方法 问题3&#xff1a;约束条件下的局部最优化问题附录&#xff1a;相关计算公式参考…

Mac系统,webots和pycharm联合仿真,配置问题解决方案!

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 问题描述&#xff1a;mac系统下&#xff0c;webots和pycharm 联合仿真&#xff0c;适配问题 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 换mac电脑了&#xff0c;需要用到web…

4K超高清飞行箱(EFP)制作系统

EFP&#xff08;Electronic Field Production&#xff09;是一种节目现场制作方式&#xff0c;它将音视频设备集成在不同规格的标准飞行箱内&#xff0c;并将其运送至现场进行节目制作。与电视台演播室和大型转播车相比&#xff0c;箱载EFP系统具有操作方便、灵活部署、便携运输…

SpringMvc--CRUD

目录 一.什么是SpringMvc--CRUD 二.前期准备 公共页面跳转(专门用来处理页面跳转) 三.ssm之CRUD后端实现 配置pom.xml 双击mybatis-generator:generate自动生成mapper 编写generatorConfig.xml 项目结构 编写PagerAspect切面类 编写hpjyBiz接口类 编写hpjyBizImpl接…

如何使用Docker部署debezium来监控 MySQL 数据库

目录 一、什么是Docker 二、什么是debezium 三、什么是MySQL 四、如何使用Docker部署debezium来监控 MySQL 数据库 一、什么是Docker Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流…

扫地僧万能HTML模板站群:打造高效便捷的网站建设利器

扫地僧万能HTML模板站群是一款功能强大的网站建设工具&#xff0c;以其独特的特点和卓越的性能在网络开发领域广受赞誉。本文将介绍扫地僧万能HTML模板站群的几大特点&#xff0c;包括模板自动处理、一站管理、泛站独立、多套模板、蜘蛛统计、超强自定义、超强负载、简单高效、…

sql server 分区表

分区表 分区表是在SQL Server 2005之后的版本引入的特性&#xff0c;这个特性允许把逻辑上的一个表在物理上分为很多部分。换句话说&#xff0c;分区表从物理上看是将一个大表分成几个小表&#xff0c;但是从逻辑上看&#xff0c;还是一个大表。 步骤 创建分表区的步骤分为…

初学Python记

Python这个编程语言的大名当然听说过了呀&#xff0c;这几年特别火&#xff0c;火的一塌涂地。大家可以回忆一下&#xff1a;朋友圈推荐的广告里经常可以看见python的网课广告。 本学期&#xff0c;学校开设了python课程&#xff0c;这几天学习了一下入了一下门&#xff0c;感…

扫地僧站群·静态养站王:自动万站智能LOGO功能说明

扫地僧站群静态养站王:自动万站智能LOGO功能说明,无需配置,自动根据网站状态生成对应LOGO&#xff0c;高质量LOGO万站不重样.说明&#xff1a;模板调用智能LOGO方式&#xff1a;{当前域名}/logo.png 自动识别HTTP/HTTPS 只需在模板需要展示LOGO的地方放上如上标签即可。以下为L…

OpenCV 05(图像的算术与位运算)

一、图像的算术运算 1.1 图像的加法运算 - add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. import cv2 import numpy as npcat cv2.imread(D:\\3-project\\zyj\\pythonCNN\\pic\\c…