DAY48
#ifndef QUEUE_H
#define QUEUE_H#include<iostream>using namespace std;#define MAX 10typedef int datatype;template <typename T>
class queue
{T data[MAX];T front;T tail;public:queue();~queue();queue(const T &other);//创建循环队列T *queue_create();//判空int queue_empty(queue *q);//判满int queue_full(queue *q);//入队int queue_push(queue *q,T e);//遍历void queue_show(queue *q);//出队int queue_pop(queue *q);//求队列的长度int queue_size(queue *q);//销毁void queue_free(queue *q);};#endif // QUEUE_H
#include"queue.h"template <typename T>
queue<T>::queue()
{cout << "queue:无参构造" << endl;
}template <typename T>
queue<T>::~queue()
{cout << "queue::析构函数" << this << endl;
}template <typename T>
queue<T>::queue(const T &other):front(other.front),tail(other.tail)
{cout << "拷贝构造函数" << endl;
}//创建循环队列
template <typename T>
T *queue<T>::queue_create()
{queue * q = (queue *)malloc(sizeof(queue));if(NULL == q){printf("创建失败\n");return NULL;}q -> front = q -> tail = 0;printf("创建成功\n");return q;
}//判空
template <typename T>
int queue<T>::queue_empty(queue * q)
{if(NULL == q){printf("队列错误\n");return 0;}return q -> front == q -> tail;
}//判满
template <typename T>
int queue<T>::queue_full(queue *q)
{if(NULL == q){printf("队列错误\n");return 0;}return (q -> tail + 1) % MAX == q -> front;
}//入队
template <typename T>
int queue<T>::queue_push(queue *q,T e)
{if(NULL == q){printf("入队失败\n");return 0;}q -> data[q -> tail] = e;q -> tail = (q ->tail + 1) % MAX;printf("入队成功\n");return 1;
}//遍历
template <typename T>
void queue<T>::queue_show(queue *q)
{if(NULL == q || queue_empty(q)){printf("遍历失败\n");return;}printf("从队头到队尾元素分别是: ");for(int i = q -> front; i != q -> tail; i = (i + 1) % MAX){printf("%d\t",q -> data[i]);}printf("\n");
}//出队
template <typename T>
int queue<T>::queue_pop(queue * q)
{if(NULL == q){printf("出队失败\n");return 0;}cout << "出队的元素是: ";printf("%d\n",q -> data[q -> front]);q -> front = (q -> front + 1) % MAX;return 1;
}//求队列的长度
template <typename T>
int queue<T>::queue_size(queue * q)
{if(NULL == q){printf("不合法\n");return 0;}return (q -> tail + MAX - q -> front) % MAX;
}//销毁
template <typename T>
void queue<T>::queue_free(queue * q)
{if(NULL == q){printf("销毁失败\n");return ;}free(q);q = NULL;printf("释放成功\n");return ;
}
#include "queue.h"using namespace std;template <typename T>
int main()
{queue<T> u;queue<T> *q = u.queue_create();if(NULL == q){return -1;}//入队u.queue_push(q,"aafa");u.queue_push(q,9);u.queue_push(q,3);u.queue_push(q,7);u.queue_push(q,4);u.queue_push(q,1);u.queue_show(q);//出队u.queue_pop(q);u.queue_show(q);//求队列大小u.queue_size(q);//清空且销毁u.queue_free(q);return 0;
}
#ifndef STACK_H
#define STACK_H#include <iostream>
#include <cstring>using namespace std;typedef int datatype;template <typename T>
class stack
{T * data;T top;public:stack();~stack();stack(const T &other);//创建栈T *Stack_create();//判空T Stack_empty(T *s);//判满T Stack_full(T *s);//入栈T Stack_push(T *s,T e);//遍历栈T Stack_show(T *s);//出栈T Stack_pop(T *s);//获取栈顶元素T * Stack_top(T *s);//求栈的大小T Stack_size(T *s);//销毁栈T Stack_free(T *s);};#endif // STACK_H
#include"stack.h"template <typename T>
stack<T>::stack():data(new T(111))
{cout << "stack::无参构造" << endl;
}template <typename T>
stack<T>::~stack()
{delete data;cout << "stack::析构函数:" << this << endl;
}//创建栈
template <typename T>
T * stack<T>::Stack_create()
{stack * s = (stack *)malloc(sizeof(stack));if(NULL == s){cout << "申请失败" << endl;return NULL;}s -> data = (datatype *)malloc(sizeof(datatype) * 10);if(NULL == s -> data){cout << "申请失败" << endl;free(s);return NULL;}s -> top = -1;printf("创建成功\n");return s;}//判空
template <typename T>
T stack<T>::Stack_empty(T *s)
{if(NULL == s){printf("栈不合法\n");return 0;}return s -> top == -1;}//判满
template <typename T>
T stack<T>::Stack_full(T *s)
{if(NULL == s){printf("栈不合法\n");return 0;}return s -> top == 10 - 1;}//入栈
template <typename T>
T stack<T>::Stack_push(T * s,T e)
{if(NULL == s || Stack_full(s)){printf("入栈失败\n");return 0;}s -> top++;s -> data[s -> top] = e;printf("入栈成功\n");return 1;}//遍历栈
template <typename T>
T stack<T>::Stack_show(T *s)
{if(NULL == s || Stack_empty(s)){printf("遍历失败\n");return ;}printf("从栈顶到栈底的元素分别是: \n");for(int i = s -> top; i >= 0; i--){printf("%d\t",s -> data[i]);}printf("\n");}//出栈
template <typename T>
T stack<T>::Stack_pop(T * s)
{if(NULL == s || Stack_empty(s)){printf("出栈失败\n");return 0;}datatype e = s -> data[s -> top];printf("%d",e);s -> top--;return 1;}//获取栈顶元素
template <typename T>
T * stack<T>::Stack_top(T *s)
{if(NULL == s || Stack_empty(s)){printf("获取失败\n");return NULL;}return &s -> data[s -> top];}//求栈的大小
template <typename T>
T stack<T>::Stack_size(T *s)
{if(NULL == s){printf("求取失败\n");return 0;}return s -> top + 1;}//销毁栈
template <typename T>
T stack<T>::Stack_free(T *s)
{if(NULL == s){printf("不合法\n");return;}free(s -> data);s -> data = NULL;free(s);s = NULL;printf("释放成功\n");return ;}
#include"stack.h"template <typename T>
int main()
{stack<T> k;T *s = k.Stack_create();if(NULL == s){return -1;}datatype e;//入栈cout << "请输入一位栈底元素: ";cin >> e;k.Stack_push(s,e);k.Stack_push(s,2);k.Stack_push(s,5);k.Stack_push(s,6);k.Stack_push(s,4);k.Stack_push(s,8);//遍历栈k.Stack_show(s);//出栈k.Stack_pop(s);k.Stack_show(s);//求栈顶元素k.Stack_top(s);//求栈的大小k.Stack_size(s);//清空栈且销毁k.Stack_free(s);s = NULL;return 0;
}
相关文章:
DAY48
#ifndef QUEUE_H #define QUEUE_H#include<iostream>using namespace std;#define MAX 10typedef int datatype;template <typename T> class queue {T data[MAX];T front;T tail;public:queue();~queue();queue(const T &other);//创建循环队列T *queue_crea…...
光栅和矢量图像处理:Graphics Mill 11.4.1 Crack
Graphics Mill 是适用于 .NET 和 ASP.NET 开发人员的最强大的成像工具集。它允许用户轻松向 .NET 应用程序添加复杂的光栅和矢量图像处理功能。 光栅图形 加载和保存 JPEG、PNG 和另外 8 种图像格式 调整大小、裁剪、自动修复、色度键和 30 多种其他图像操作 可处理任何尺寸&am…...
vue3中组件没有被调用,没进去也没报错
在父页面引用了一个组件,然后父级调用子组件方法,但是根本没进去,也不报错 父级页面挂载组件 <!-- 视频插件组件 --> <div><VideoPluginView ref"video_perview_ref"></VideoPluginView> </div> …...
Postgresql中ParamListInfoData的作用
ParamListInfoData是参数的统一抽象,例如 在pl中执行raise notice %, n;n的值会拼成select n到SQL层取值,但值在哪呢,还是在pl层。对sql层来说,n的一种可能性是参数,在这种可能性中,n的数据放在ParamListI…...
《计算机视觉中的多视图几何》笔记(1)
1 Introduction – a Tour of Multiple View Geometry 本章介绍了本书的主要思想。 1.1 Introduction – the ubiquitous projective geometry 为了了解为什么我们需要射影几何,我们从熟悉的欧几里得几何开始。 欧几里得几何在二维中认为平行线是不会相交的&…...
YOLO目标检测——火焰检测数据集+已标注xml和txt格式标签下载分享
实际项目应用:火灾预警系统、智能监控系统、工业安全管理、森林火灾监测以及城市规划和消防设计等应用场景中具有广泛的应用潜力,可以提高火灾检测的准确性和效率,保障人员和财产的安全。数据集说明:YOLO火焰目标检测数据集&#…...
tkinter四大按钮:Button,Checkbutton, Radiobutton, Menubutton
文章目录 四大按钮Button连击MenubuttonCheckbuttonRadiobutton tkinter系列: GUI初步💎布局💎绑定变量💎绑定事件💎消息框💎文件对话框控件样式扫雷小游戏💎强行表白神器 四大按钮 tkinter中…...
Sudowrite:基于人工智能的AI写作文章生成工具
【 产品介绍】 名称 Sudowrite 成立/上线时间 2023年 具体描述 Sudowrite是一个基于GPT-3的人工智能写作工具,可以帮助你快速生成高质量的文本内容, 无论是小说、博客、营销文案还是学术论文。 Sudowrite可以根据你的输入和指…...
加密狗软件有什么作用?
加密狗软件是一种用于加密和保护计算机软件和数据的安全设备。它通常是一个硬件设备,可以通过USB接口连接到计算机上。加密狗软件的作用主要体现在以下几个方面: 软件保护:加密狗软件可以对软件进行加密和授权,防止未经授权的用户…...
嵌入式Linux驱动开发(I2C专题)(二)
I2C系统的重要结构体 参考资料: Linux驱动程序: drivers/i2c/i2c-dev.cI2CTools: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 1. I2C硬件框架 2. I2C传输协议 3. Linux软件框架 4. 重要结构体 使用一句话概括I2C传输:APP通过I2…...
SMT贴片制造:发挥的作用和价值]
SMT贴片制造作为一项重要的电子制造技术,发挥着举足轻重的作用,并提供了巨大的价值。 首先,SMT贴片制造为电子产品的制造商提供了高效、准确和可靠的生产方式。相比于传统的手工焊接,SMT贴片制造具有更高的自动化和智能化程度&am…...
蓝桥杯官网练习题(幸运数字)
问题描述 小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面一半的数位之和,则这个数是他的幸运数字。例如 2314 是一个幸运数字, 因为它有 4 个数位, 并且 2314 。现在请你帮他计算从 1 至 100000000 之间共有多少个不同的幸运数字。 …...
pandas笔记:显示中间的省略号
比如我们有这样一个数据(Geolife中的数据) 如何把中间的省略号完整地输出呢? pd.set_option(display.max_rows, None) data...
解决vagrant安装的centos7,在window主机重装系统过后,再次用vagrant启动centos7却无法启动
场景: vagrant安装的centos7,在window主机重装系统过后,再次用vagrant启动centos7却无法启动 检查 VirtualBox 版本:确保你安装的 VirtualBox 版本与 Vagrant 兼容。如果你更新了 VirtualBox,可能需要同时更新 Vagran…...
嵌入式这个领域会变得过于内卷吗?
今日话题,嵌入式这个领域会变得过于内卷吗?嵌入式开发主要服务于第二产业,尤其是制造业,包括电器、电气、机械、汽车、装备、航空航天等行业的“智能制造”部门,稳定性较强,不像互联网行业那样波动大。因此…...
Linux下安装和使用MySQL的详细教程
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
【Linux】多线程互斥与同步
文章目录 一、线程互斥1. 线程互斥的引出2. 互斥量3. 互斥锁的实现原理 二、可重入和线程安全三、线程和互斥锁的封装1. 线程封装1. 互斥锁封装 四、死锁1. 死锁的概念2. 死锁的四个必要条件3. 避免死锁 五、线程同步1. 线程同步的理解2. 条件变量 一、线程互斥 1. 线程互斥的…...
从零开始:云服务器构建网站的完全指南
目录 一、服务器 二、部署项目 三、购买域名 顶级域名 二级域名 子域名 主机名 四、域名解析 一、服务器 国内华为云、阿里云、腾讯云等看你的选择; 可以选择Linux:CentOS、Ubuntu这些系统版本,更稳定; 服务器控制台&a…...
idea中的debug界面上没有进入方法的红色按钮
问题描述: 这里缺少进入系统方法的红色按钮。 问题解决方法: 在上面图片红框范围内右键点击进入。 点击号 搜索 ‘force’ 添加即可完成 上下拖动即可调整界面按钮顺序...
JavaScript知识系列(4)每天10个小知识点
目录 系列文章目录JavaScript知识系列(1)每天10个小知识点JavaScript知识系列(2)每天10个小知识点JavaScript知识系列(3)每天10个小知识点 知识点**31. Promise** 的概念、作用、原理、特性、优点、缺点、区…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
