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** 的概念、作用、原理、特性、优点、缺点、区…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...