当前位置: 首页 > news >正文

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中组件没有被调用,没进去也没报错

在父页面引用了一个组件&#xff0c;然后父级调用子组件方法&#xff0c;但是根本没进去&#xff0c;也不报错 父级页面挂载组件 <!-- 视频插件组件 --> <div><VideoPluginView ref"video_perview_ref"></VideoPluginView> </div> …...

Postgresql中ParamListInfoData的作用

ParamListInfoData是参数的统一抽象&#xff0c;例如 在pl中执行raise notice %, n;n的值会拼成select n到SQL层取值&#xff0c;但值在哪呢&#xff0c;还是在pl层。对sql层来说&#xff0c;n的一种可能性是参数&#xff0c;在这种可能性中&#xff0c;n的数据放在ParamListI…...

《计算机视觉中的多视图几何》笔记(1)

1 Introduction – a Tour of Multiple View Geometry 本章介绍了本书的主要思想。 1.1 Introduction – the ubiquitous projective geometry 为了了解为什么我们需要射影几何&#xff0c;我们从熟悉的欧几里得几何开始。 欧几里得几何在二维中认为平行线是不会相交的&…...

YOLO目标检测——火焰检测数据集+已标注xml和txt格式标签下载分享

实际项目应用&#xff1a;火灾预警系统、智能监控系统、工业安全管理、森林火灾监测以及城市规划和消防设计等应用场景中具有广泛的应用潜力&#xff0c;可以提高火灾检测的准确性和效率&#xff0c;保障人员和财产的安全。数据集说明&#xff1a;YOLO火焰目标检测数据集&#…...

tkinter四大按钮:Button,Checkbutton, Radiobutton, Menubutton

文章目录 四大按钮Button连击MenubuttonCheckbuttonRadiobutton tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框&#x1f48e;文件对话框控件样式扫雷小游戏&#x1f48e;强行表白神器 四大按钮 tkinter中…...

Sudowrite:基于人工智能的AI写作文章生成工具

【 产品介绍】 名称 Sudowrite 成立/上线时间 2023年 具体描述 Sudowrite是一个基于GPT-3的人工智能写作工具&#xff0c;可以帮助你快速生成高质量的文本内容&#xff0c; 无论是小说、博客、营销文案还是学术论文。 Sudowrite可以根据你的输入和指…...

加密狗软件有什么作用?

加密狗软件是一种用于加密和保护计算机软件和数据的安全设备。它通常是一个硬件设备&#xff0c;可以通过USB接口连接到计算机上。加密狗软件的作用主要体现在以下几个方面&#xff1a; 软件保护&#xff1a;加密狗软件可以对软件进行加密和授权&#xff0c;防止未经授权的用户…...

嵌入式Linux驱动开发(I2C专题)(二)

I2C系统的重要结构体 参考资料&#xff1a; Linux驱动程序: drivers/i2c/i2c-dev.cI2CTools: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 1. I2C硬件框架 2. I2C传输协议 3. Linux软件框架 4. 重要结构体 使用一句话概括I2C传输&#xff1a;APP通过I2…...

SMT贴片制造:发挥的作用和价值]

SMT贴片制造作为一项重要的电子制造技术&#xff0c;发挥着举足轻重的作用&#xff0c;并提供了巨大的价值。 首先&#xff0c;SMT贴片制造为电子产品的制造商提供了高效、准确和可靠的生产方式。相比于传统的手工焊接&#xff0c;SMT贴片制造具有更高的自动化和智能化程度&am…...

蓝桥杯官网练习题(幸运数字)

问题描述 小蓝认为如果一个数含有偶数个数位&#xff0c;并且前面一半的数位之和等于后面一半的数位之和&#xff0c;则这个数是他的幸运数字。例如 2314 是一个幸运数字, 因为它有 4 个数位, 并且 2314 。现在请你帮他计算从 1 至 100000000 之间共有多少个不同的幸运数字。 …...

pandas笔记:显示中间的省略号

比如我们有这样一个数据&#xff08;Geolife中的数据&#xff09; 如何把中间的省略号完整地输出呢&#xff1f; pd.set_option(display.max_rows, None) data...

解决vagrant安装的centos7,在window主机重装系统过后,再次用vagrant启动centos7却无法启动

场景&#xff1a; vagrant安装的centos7&#xff0c;在window主机重装系统过后&#xff0c;再次用vagrant启动centos7却无法启动 检查 VirtualBox 版本&#xff1a;确保你安装的 VirtualBox 版本与 Vagrant 兼容。如果你更新了 VirtualBox&#xff0c;可能需要同时更新 Vagran…...

嵌入式这个领域会变得过于内卷吗?

今日话题&#xff0c;嵌入式这个领域会变得过于内卷吗&#xff1f;嵌入式开发主要服务于第二产业&#xff0c;尤其是制造业&#xff0c;包括电器、电气、机械、汽车、装备、航空航天等行业的“智能制造”部门&#xff0c;稳定性较强&#xff0c;不像互联网行业那样波动大。因此…...

Linux下安装和使用MySQL的详细教程

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

【Linux】多线程互斥与同步

文章目录 一、线程互斥1. 线程互斥的引出2. 互斥量3. 互斥锁的实现原理 二、可重入和线程安全三、线程和互斥锁的封装1. 线程封装1. 互斥锁封装 四、死锁1. 死锁的概念2. 死锁的四个必要条件3. 避免死锁 五、线程同步1. 线程同步的理解2. 条件变量 一、线程互斥 1. 线程互斥的…...

从零开始:云服务器构建网站的完全指南

目录 一、服务器 二、部署项目 三、购买域名 顶级域名 二级域名 子域名 主机名 四、域名解析 一、服务器 国内华为云、阿里云、腾讯云等看你的选择&#xff1b; 可以选择Linux&#xff1a;CentOS、Ubuntu这些系统版本&#xff0c;更稳定&#xff1b; 服务器控制台&a…...

idea中的debug界面上没有进入方法的红色按钮

问题描述&#xff1a; 这里缺少进入系统方法的红色按钮。 问题解决方法&#xff1a; 在上面图片红框范围内右键点击进入。 点击号 搜索 ‘force’ 添加即可完成 上下拖动即可调整界面按钮顺序...

JavaScript知识系列(4)每天10个小知识点

目录 系列文章目录JavaScript知识系列&#xff08;1&#xff09;每天10个小知识点JavaScript知识系列&#xff08;2&#xff09;每天10个小知识点JavaScript知识系列&#xff08;3&#xff09;每天10个小知识点 知识点**31. Promise** 的概念、作用、原理、特性、优点、缺点、区…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...