day6_C++

day6_C++

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

模板 栈

stack.h

#ifndef STACK_H
#define STACK_H#include <iostream>
#include <cstring>using namespace std;#define MAX 5template<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;elsereturn false;
}template<typename T>
bool Stack<T>::is_empty()
{if(this->top == -1)return true;elsereturn 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 5template<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.hqwc.cn/news/108406.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chrome插件:一个基于webpack + react的chrome 插件项目模板

项目结构 $ tree -L 1 . ├── README.md ├── node_modules # npm依赖 ├── package.json # 详细依赖 ├── pnpm-lock.yaml ├── public # 里边包含dist&#xff0c;安装的时候安装这个目录即可 ├── src …

Swift学习内容精选(二)

Swift 类是构建代码所用的一种通用且灵活的构造体。 我们可以为类定义属性&#xff08;常量、变量&#xff09;和方法。 与其他编程语言所不同的是&#xff0c;Swift 并不要求你为自定义类去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类&#xff0c;系…

GO语言网络编程(并发编程)Channel

GO语言网络编程&#xff08;并发编程&#xff09;Channel 1、Channel 1.1.1 Channel 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。 虽然可以使用共享内存进行数据交换&#xff0c;但是共享内存在不同的goroutine中容易发生竞态…

Go 常量为什么只支持基本数据类型?

大家好&#xff0c;我是煎鱼。 相信大家在接触 Go 这门编程语言时&#xff0c;就会学到常量这个知识点。 各大编程语言会教你&#xff0c;常量是不可变变量的一种类型。只要定义了常量&#xff0c;你就可以安心的用他。不用担心值在哪里就被程序莫名奇妙的给改了。 常量的使用例…

Adobe Acrobat Reader界面改版 - 解决方案

问题 日期&#xff1a;2023年9月 Adobe Acrobat Reader下文简称Adobe PDF Reader&#xff0c;此软件会自动进行更新&#xff0c;当版本更新至2023.003.20284版本后。 软件UI界面会大改版&#xff1a;书签页变成了右边、工具栏变到了左边、缩放按钮变到了右下角&#xff0c;如…

Linux如何安装MySQL

Linux安装MySQL5.7 1、下载 官网下载地址&#xff1a;http://dev.mysql.com/downloads/mysql/ 2、复制下面几个文件 3、检查当前系统是否安装过mysql、检查当前mysql依赖环境、检查/tmp文件夹权限 1&#xff09;检查当前系统是否安装过mysql&#xff0c;执行安装命令前&am…

4.zigbee开发,传感器网络管理进阶(网状和树状拓扑),zigbee的ADC

一。zigbee的串口 1.串口通信的基本概念 &#xff08;1&#xff09;同步通信与异步通信 同步通信&#xff1a; 一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号&#xff0c;通讯中通常双方会统一规定在时钟信号的上升沿…

核心实验21_BGP高级(了解)(配置略)_ENSP

项目场景&#xff1a; 核心实验21_BGP基础_ENSP 通过bgp实现省市互通。 实搭拓扑图&#xff1a; 具体操作&#xff1a; 其他基础配置略&#xff08;接口地址&#xff0c;ospf&#xff09; 1.BGP邻居建立&#xff1a; R1: [R1]bgp 200 [R1-bgp]peer 10.2.2.2 as-number 200 …

USB接口针式打印机

1 针式打印机原理 - 针式打印机16针是纵向排列&#xff0c;每次打印垂直的16bit&#xff0c;然后右移一bit&#xff0c;继续下列打印&#xff1b;字节的MSB表示最上面的点&#xff0c;字节LSB表示最下面的点 - 由于汉字字模的点阵是横向排列的&#xff0c;而提供给打印头的信息…

【PHY】3GPP UE能力类别的变化

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

《PostgreSQL与MySQL:详细对比与分析》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

sql server 触发器的使用

看数据库下的所有触发器及状态 SELECT a.name 数据表名 , sysobjects.name AS 触发器名 , sysobjects.crdate AS 创建时间 , sysobjects.info , sysobjects.status FROM sysobjects LEFT JOIN ( SELECT * FROM sysobjects WHERE xtype U ) AS a ON sysobjects.parent_obj a.…