day6_C++

news2024/11/27 11:39:55

day6_C++

  • 模板 栈
  • 模板 队列
  • 思维导图

模板 栈

stack.h

#ifndef STACK_H
#define STACK_H

#include <iostream>
#include <cstring>

using namespace std;


#define MAX 5

template<typename T>
class Stack
{
public:
    /*构造函数*/
    Stack();
    /*拷贝构造函数*/
    Stack(const Stack& others);
    /*析构函数*/
    ~Stack();

    /*判满 true 满 */
    bool is_full();
    /*判满 true 空*/
    bool is_empty();
    /*入栈*/
    void in_stack(T e);
    /*出栈*/
    T out_stack();
    /*清空栈*/
    void clear_stack();
    /*求栈顶元素*/
    T get_stackTop_E();
    /*求栈的大小*/
    void get_stackSize();


private:
    int top;
    T *data;
};

#endif // STACK_H

stack.c

#include "stack.h"

template<typename T>
Stack<T>::Stack():data(new T[MAX]),top(-1)
{
    memset(this->data,0,MAX);
    //在堆区申请max个int大小的空间
    cout<<"栈容器初始化成功"<<endl;
}

template<typename T>
Stack<T>::Stack(const Stack& others):data(new T[MAX]),top(others.top)
{
    //深拷贝,将堆区内容也拷贝进来
    for(int i = 0;i<MAX-1;i++){
        this->data[i] = others.data[i];
    }
    cout<<"拷贝完成"<<endl;
}

template<typename T>
Stack<T>::~Stack()
{
    //释放堆区数据
    delete []data;
    cout<<"析构完成"<<endl;
}

template<typename T>
bool Stack<T>::is_full()
{
    if(this->top ==MAX-1)
        return true;
    else
        return false;
}

template<typename T>
bool Stack<T>::is_empty()
{
    if(this->top == -1)
        return true;
    else
        return false;
}

template<typename T>
void Stack<T>::in_stack(T e)
{
    if(this->is_full()==false){
        this->top++;
        this->data[this->top] = e;
        cout<<"入栈成功"<<endl;
    }else{
        cout<<"入栈失败,栈满"<<endl;
    }
}

template<typename T>
T Stack<T>::out_stack()
{
    if(this->is_empty()==false){
        T temp = this->data[this->top];
        this->top--;
        return temp;
    }else{
         cout<<"出栈失败,栈空"<<endl;
         return NULL;
    }
}

template<typename T>
void Stack<T>::clear_stack()
{
    if(this->is_empty()==false){
        this->top=-1;
        cout<<"清空成功"<<endl;
    }else{
         cout<<"栈空,无需清理"<<endl;
    }
}

template<typename T>
T Stack<T>::get_stackTop_E()
{
     if(this->is_empty()==true)
         return NULL;
     return this->data[this->top];
}

template<typename T>
void Stack<T>::get_stackSize(){
    cout<<"栈中有元素 "<<this->top+1<<"个"<<endl;

}

模板 队列

queue.c

#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
#include <cstring>

using namespace std;

#define MAX 5

template<typename T>
class Queue
{

public:
    /*构造函数*/
    Queue();
    /*拷贝构造函数*/
    Queue(const Queue<T>& others);
    /*析构函数*/
    ~Queue();

    /*判满 true 满 */
    bool is_full();
    /*判满 true 空*/
    bool is_empty();
    /*入队*/
    void in_queue(T e);
    /*出队*/
    T out_queue();
    /*清空队*/
    void clear_queue();
    /*求队的大小*/
    void get_queueSize();


private:
    T *data;
    int font;
    int tail;
};

#endif // QUEUE_H

queue.c

#include "queue.h"

template<typename T>
Queue<T>::Queue():data(new T [MAX]),tail(0),font(0)
{
    memset(this->data,0,MAX);
    cout<<"循环队列初始化成功"<<endl;
}

template<typename T>
Queue<T>::Queue(const Queue<T>& others):data(new T[MAX]),font(others.font),tail(others.tail)
{
    //深拷贝
    int f = this->font;
    int t = this->tail;
    while ((f+MAX)%MAX==t) {
        this->data[f] = others.data[f];
        f++;
    }
    cout<<"拷贝完成"<<endl;
}

template<typename T>
bool Queue<T>::is_full()
{
    if((this->tail+1)%MAX == this->font){
        return true;
    }
    return false;
}

template<typename T>
bool Queue<T>::is_empty()
{
    if(this->font == this->tail){
        return true;
    }
    return false;
}

template<typename T>
Queue<T>::~Queue()
{
    //释放堆区数据
    delete []data;
    cout<<"析构完成"<<endl;
}

template<typename T>
void Queue<T>::in_queue(T e)
{
    if(this->is_full() == true){
        cout<<"队列满了"<<endl;
        return ;
    }
    this->data[this->tail] = e;
    this->tail =  (this->tail+1)%MAX;
    cout<<"入队成功"<<endl;
}

/*出队*/
template<typename T>
T Queue<T>::out_queue()
{
    if(this->is_empty() == true){
        cout<<"队列空,无元素"<<endl;
        return NULL;
    }
    int temp =  this->data[this->font];
    this->font = (this->font+1)%MAX;
    return temp;
}

template<typename T>
void Queue<T>::clear_queue()
{
    if(this->is_empty() == true){
        cout<<"队列空,无元素"<<endl;
        return;
    }
    this->font = 0;
    this->tail = 0;
}

template<typename T>
void Queue<T>::get_queueSize()
{
    cout<<"队列的大小是:" <<(this->tail-this->font+MAX)%MAX<<endl;
}

思维导图

请添加图片描述

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

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

相关文章

看板管理:以可视化方式确定任务优先级

确定工作的优先级是我们今天都要面对的挑战。若处理不当&#xff0c;我们就可能试图一心多用&#xff0c;从而严重损害工作效率。 使用看板方法来设定工作优先级是一种非常直观、快速的方法。 确定工作优先级的看板方法 看板工作流程管理方法的核心在于工作可视化。工作被划…

邀请函 | 什么是全协议存算一体化解决方案?

近日&#xff0c;趋动科技与 XSKY星辰天合联合推出了针对教育行业的全协议存算一体化解决方案&#xff0c;实现了最小规模&#xff08;3 节点&#xff09;的人工智能算力和存力资源池化的基础设施平台建设&#xff0c;帮助客户共享数据中心内所有服务器商的 GPU 算力以及存力&a…

不定积分的基本公式与换元积分法

不定积分的基本公式 不定积分的基本公式如下&#xff1a; 常数函数积分&#xff1a;∫0dxC。幂函数积分&#xff1a;∫x^α dx[x^(α1)]/(α1)C&#xff08;α≠-1&#xff09;。一次二项式积分&#xff1a;∫x/(abx)dx(bx-aln|abx|)/b^2C。二次二项式积分&#xff1a;∫x^2/(…

【小程序】基于SpringBoot开发的餐厅点餐系统

文章目录 系统介绍后端管理&#xff1a;微信小程序&#xff1a;功能展示 系统介绍 开发工具 IDEA、vscode、微信开发者工具 后台框架 SpringBoot 前端框架 vue、uniapp 后端管理&#xff1a; 管理员可以添加&#xff0c;修改&#xff0c;删除员工信息。 分类管理&#xff…

Python实现猎人猎物优化算法(HPO)优化Catboost分类模型(CatBoostClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 猎人猎物优化搜索算法(Hunter–prey optimizer, HPO)是由Naruei& Keynia于2022年提出的一种最新的…

AgentGPT:基于GPT-4的开源AI自动化机器人工具

【产品介绍】 AgentGPT是一个基于GPT-4的开源AI自动化机器人工具&#xff0c;可以让你在浏览器中配置和部署自主的 AI机器人。你可以给机器人设置一个名字和一个目标&#xff0c;然后点击部署按钮&#xff0c;就可以看到机器人进行的行为和输出&#xff0c;完全不需要人为干涉的…

【自动化测试】接口自动化测试工具有哪些?

Jmeter jmeter完成接口脚本,Ant完成脚本执行并收集结果生成报告,最后利用jenkins完成脚本的自动集成运行。 Postman或者newman javahttpclient&#xff0c;通过代码实现 JavaRestassored pythonrullib2 pythonrequests httprunner yapi 轻量 代码实现框架 pythonrequest…

PY32F003F18之PWM互补输出

PY32F003F18中有一个“数字比较器”&#xff0c;这是我的叫法&#xff0c;为了便于和模拟比较器区分。它用作PWM输出功能。 一、比较通道1电路图 二、PWM工作模式 PWM的工作模式&#xff1a; 1、PWM边沿对齐模式 计数器工作在"边沿对齐模式" 设置"TIMx控制寄存…

C语言 -- 零基础入门详解

文章目录 引言1. 第一个C语言程序&#xff1a;HelloWorld1.1 编写C语言代码&#xff1a;hello.c1.2 代码分析 2. 数据类型2.1 常量与变量2.1.1 关键字2.1.2 数据类型2.1.3 常量2.1.4 变量2.1.5 使用示例 2.2 整型&#xff1a;int2.2.1 整型变量的定义和输出2.2.2 整型变量的输入…

How to control the model in the webots usingthe ros controller ?

这里写自定义目录标题 how to use controller in Ros to control the model built in the Webots ?section 1: install ubantu 20.04 and webots 2021b ? how to use controller in Ros to control the model built in the Webots ? section 1: install ubantu 20.04 and w…

Ecrett Music:AI音乐创作软件

【产品介绍】 Ecrett Music是一个由人工智能驱动的AI音乐创作软件&#xff0c;可以帮助内容创作者快速、简单、便宜地制作出适合自己的无版权音乐。无论你是做游戏、视频、播客还是其他类型的内容&#xff0c;都可以在Ecrett Music上选择场景、情绪或风格&#xff0c;然后点击一…

算法--冒泡排序

算法步骤 /*** 冒泡排序** version 1.0* date 2023/09/01 15:23:58*/ public class Bubble {/*** 升序冒泡排序** param a 待排序的数组* date 2023/9/1 15:29:10*/public static void sortAes(int[] a) {for (int i a.length - 1; i > 0; i--) {for (int j 0; j < i;…

redis集群hashTag简述

概述 单体redis一般性能可以满足大部分场景的要求了&#xff0c;但是当业务体量起来的时候&#xff0c;就会要求高可用了。 此时一般会将单机redis扩充至集群,一般3主3从 redis集群中master之间各自存储部分数据&#xff0c;master和slave之间数据则是相同的. Redis会把每一…

Cocos独立游戏开发框架(18):配置管理器

引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》&#xff0c;欢迎大家关注分享收藏订阅。 在游戏开发中&#xff0c;配置是一个重要的角色&#xff0c;他常常由策划去驱动&#xff0c;调整和优化&#xff0c;使得游戏的难度和设定更加符合玩家们的体验&#xff0c;…

如果回到5年前,20几岁的时候,想对过去的自己说点什么

今天跟大家聊一聊,如果回到5年前,10年前,怎么看待当年的自己 与此同时,对于未来3到5年,又有一个什么样的期待,自言自语几句的 对于未来,真的没有办法去预测,尽管如雷军鸡汤里的,永远要相信,美好的事情即将发生,但是不可否认的是,你永远也不知道惊喜和意外哪个先到 但是对于已经…

高级IO-epoll

文章目录 1. I/O多路转接之poll1.1 代码样例1.2 poll优缺点 2. I/O多路转接之epoll2.1 epoll的相关系统调用 3. epoll工作原理3.1 epoll的优点 4. 代码样例4.1 初始化服务器4.2 启动服务器 5. epoll工作方式6. epoll的使用场景 1. I/O多路转接之poll poll函数解决了&#xff0…

delphi 自带的dbgrid表格控件增加下选框

在表格里用combobox很正常 自带的dbgrid加也很方便&#xff0c;环境是xe10 procedure TfrmBaseInfo.LoadDesk; varssql: string;i: Integer;column: TColumn; beginssql : select * from desk_info ;qry_desk.Connection : dmMain.FDConnection1;qry_desk.Close;qry_desk.S…

机器视觉之Basler工业相机使用和配置方法(C++)

basler工业相机做双目视觉用&#xff0c;出现很多问题记录一下&#xff1a; 首先是多看手册&#xff1a;https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例&#xff0c;实际上在使用过程中&#xff0c;大部分都是这些源码&#xff0c;具体项目选择对应的…

java实现克里金插值导出geojson矢量数据(kriging)

生成效果 在现代科学研究中&#xff0c;数据的处理和分析是至关重要的一环。然而&#xff0c;我们往往会遇到数据缺失的情况&#xff0c;这时就需要使用插值方法来填补这些缺失值。其中&#xff0c;克里金插值法是一种常用的方法&#xff0c;在很多领域都有广泛的应用。 首先&…

RK3568开发笔记(九):开发板buildroot固件调通RS485口,运行项目中RS485协议调试工具Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132869448 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…