C++QT day6

news2025/1/18 3:32:12

1> 将之前定义的栈类和队列类都实现成模板类

栈:

#include <iostream>
#define MAX 128
using namespace std;
template<typename T>
class Stack_s
{
private:
    T *p=new T[MAX];//栈的数组
    int top;//记录栈顶的变量
public:
    //构造函数
    Stack_s(int t=-1)
    {
        top=t;
        cout<<"无参构造函数"<<endl;
    }
    //析构函数
    ~Stack_s()
    {
        cout<<"Stack::析构函数"<<endl;
    }
    //拷贝构造函数
    Stack_s(const Stack_s &other):p(new T(p)),top(other.top)
    {
        cout<<"拷贝构造函数"<<endl;
    }
    //入栈
    int stack_push(T e);
    //出栈
    int stack_pop();
    //清空栈
    int stack_delete();
    //判空
    bool stack_empty();
    //判满
    bool stack_full();
    //获取栈顶元素
    int stack_gettop();
    //栈的大小
    void stack_getsize();
    void show(int i)
    {
        cout<<p[i]<<" ";
    }
};
//入栈
template<typename T>
int Stack_s<T>::stack_push(T e)
{
    if(stack_full())
    {
        cout<<"入栈失败"<<endl;
        return -1;
    }
    top++;
    p[top]=e;
    cout<<"入栈成功"<<endl;
    return 0;
}
//出栈
template<typename T>
int Stack_s<T>::stack_pop()
{
    if(stack_empty())
    {
        cout<<"出栈失败"<<endl;
        return -1;
    }
    T e=p[top];
    top--;
    cout<<e<<" 出栈成功"<<endl;
    return 0;
}
//清空栈
template<typename T>
int Stack_s<T>::stack_delete()
{
    while(top!=-1)
    {
        stack_pop();
    }
    delete [] p;
    p=nullptr;
    cout<<"清空栈成功"<<endl;
    return 0;
}
//判空
template<typename T>
bool Stack_s<T>::stack_empty()
{
    if(top==-1)
    {
        cout<<"栈空"<<endl;
        return 1;
    }
    return 0;
}
//盘满
template<typename T>
bool Stack_s<T>::stack_full()
{
    if(top==MAX-1)
    {
        cout<<"栈满了"<<endl;
        return 1;
    }
    return 0;
    return 0;
}
//获取栈顶元素
template<typename T>
int Stack_s<T>::stack_gettop()
{
    cout<<"栈顶元素是:"<<p[top]<<endl;
    return 0;
}
//栈的大小
template<typename T>
void Stack_s<T>::stack_getsize()
{
     cout<<"栈的大小为:"<<top+1<<endl;
}
int main()
{
    //实例一个string类型的栈
    Stack_s<string> s1;
    string e;
    int l;
    s1.stack_empty();
    cout<<"请输入要入栈的个数:";
    cin>>l;
    for(int i=0;i<l;i++)
    {
        cout<<"请输入要入栈的元素:";
        cin>>e;
        s1.stack_push(e);
    }
    s1.stack_gettop();
     s1.stack_getsize();
    for(int i=0;i<l;i++)
    {
        s1.show(i);
    }
    cout<<endl;
    s1.stack_delete();
    //实例一个char类型的栈
    Stack_s<char> s2;
    char e1;
    int l1;
    s1.stack_empty();
    cout<<"请输入要入栈的个数:";
    cin>>l1;
    for(int i=0;i<l1;i++)
    {
        cout<<"请输入要入栈的元素:";
        cin>>e1;
        s2.stack_push(e1);
    }
    s2.stack_gettop();
     s2.stack_getsize();
    for(int i=0;i<l1;i++)
    {
        s2.show(i);
    }
    cout<<endl;
    s2.stack_delete();
    return 0;
}

结果:

队列:

#include <iostream>
#define MAX 128
using namespace std;
template<typename T>
class Queue_q
{
private:
    T *p=new T[MAX];//队列的数组
    int tail;//记录队尾元素
    int head;//记录对头元素
public:
    //构造函数
    Queue_q(int t=0)
    {
        head=t;
        tail=t;
        cout<<"无参构造函数"<<endl;
    }
    //析构函数
    ~Queue_q()
    {
        cout<<"Stack::析构函数"<<endl;
    }
    //拷贝构造函数
    Queue_q(const Queue_q &other):p(new T(p)),tail(other.tail),head(other.head)
    {
        cout<<"拷贝构造函数"<<endl;
    }
    //入队
    int queue_push(T e);
    //出队
    int queue_pop();
    //清空队列
    int queue_delete();
    //判空
    bool queue_empty();
    //判满
    bool queue_full();
    //队列的大小
    void queue_getsize();
    void show(int i)
    {
         cout<<p[i]<<" ";
    }
};
//入队
template<typename T>
int Queue_q<T>::queue_push(T e)
{
    if(queue_full())
    {
        cout<<"入队失败"<<endl;
        return -1;
    }
    p[tail]=e;
    tail=(tail+1)%MAX;
    cout<<"入队成功"<<endl;
    return 0;
}
//出队
template<typename T>
int Queue_q<T>::queue_pop()
{
    if(queue_empty())
    {
        cout<<"出队失败"<<endl;
        return -1;
    }
    T e=p[head];
    head=(head+1)%MAX;
    cout<<e<<" 出队成功"<<endl;
    return 0;
}
//清空队列
template<typename T>
int Queue_q<T>::queue_delete()
{
    while(head!=tail)
    {
        queue_pop();
    }
    delete [] p;
    p=nullptr;
    cout<<"清空队列成功"<<endl;
    return 0;
}
//判空
template<typename T>
bool Queue_q<T>::queue_empty()
{
    if(head==tail)
    {
        cout<<"队列空"<<endl;
        return 1;
    }
    return 0;
}
//判满
template<typename T>
bool Queue_q<T>::queue_full()
{
    if((tail+1)==0)
    {
        cout<<"队列满了"<<endl;
        return 1;
    }
    return 0;
}
//队列的大小
template<typename T>
void Queue_q<T>::queue_getsize()
{
    int size;
    size=(tail-head+MAX)%MAX;
    cout<<"队的大小为:"<<size<<endl;
}
int main()
{
    //实例一个double类型的队列
    Queue_q<double> q1;
    double e;
    int s;
    q1.queue_empty();
    cout<<"请输入要入队的个数:";
    cin>>s;
    for(int i=0;i<s;i++)
    {
        cout<<"请输入要入队的元素:";
        cin>>e;
        q1.queue_push(e);
    }
     q1.queue_getsize();
    for(int i=0;i<s;i++)
    {
        q1.show(i);
    }
    cout<<endl;
    q1.queue_delete();
    //实例一个string类型的队列
    Queue_q<string> q2;
    string e1;
    int s2;
    q2.queue_empty();
    cout<<"请输入要入队的个数:";
    cin>>s2;
    for(int j=0;j<s2;j++)
    {
        cout<<"请输入要入队的元素:";
        cin>>e1;
        q2.queue_push(e1);
    }
     q2.queue_getsize();
    for(int j=0;j<s2;j++)
    {
        q2.show(j);
    }
    cout<<endl;
    q2.queue_delete();
    return 0;

}

结果:

思维导图:

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

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

相关文章

数据结构--平衡二叉树

目录 平衡二叉树定义 平衡二叉树的插入 调整最小不平衡子树 LL型 RR型 LR型​编辑 RL型​编辑 练习 查找效率分析​编辑 回顾知识点 平衡二叉树的删除 例1 ​编辑 例2​编辑 例3 例4​编辑 ​编辑 平衡二叉树的删除回顾​编辑 定义插入操作插入新结点后如何调…

SoundSource 5 for Mac:专业音频控制器,让您的Mac听觉体验更出色

对于使用 Mac 的用户而言&#xff0c;拥有一个强大的音频控制工具是非常重要的。SoundSource 5 for Mac 是 Rogue Amoeba 公司开发的一款专业的音频控制器&#xff0c;它提供了丰富的功能和优秀的性能&#xff0c;让您能够轻松管理并优化Mac上的音频设置。 首先&#xff0c;So…

腾讯mini项目-【指标监控服务重构】2023-08-12

今日已办 Watermill Handler 将 4 个阶段的逻辑处理定义为 Handler 测试发现&#xff0c;添加的 handler 会被覆盖掉&#xff0c;故考虑添加为 middleware 且 4 个阶段的处理逻辑针对不同 topic 是相同的。 参考https://watermill.io/docs/messages-router/实现不同topic&am…

DS相关题目

DS相关题目 题目一&#xff1a;消失的数字 拿到这道题目之后&#xff0c;首先可以想到的一个解题方法就是&#xff0c;我们可以先排序&#xff0c;排完序之后&#xff0c;这个数组其实就是一个有序的数组了&#xff0c;那只用比较数组中的每一个元素和他对应的下标是不是相等的…

Day46-50:统计图表项目总结

建项 项目需求写法——可视化报表 可视化报表项目效果 开源表格样式库阿帕奇 绘制echarte图标的流程 在视图中放置一个容器&#xff0c;这个容器需要有一个固定的宽高获取容器&#xff0c;调用init方法&#xff0c;初始化echarts实例 let container document.querySelec…

stm32----ADC模数转换

一、ADC介绍 ADC&#xff0c;即模数转换器&#xff0c;它可以将模拟信号转化为数字信号。在stm32种一般有3个ADC&#xff0c;每个ADC有18个通道。 12位ADC是一种逐次逼近型模拟数字转换器&#xff0c;它有多达18个通道&#xff0c;可测量16个外部和两个内部信号源。各个通道的A…

jquery设置图片可手动拖拽

JQuery是一款流行的JavaScript框架&#xff0c;可以轻松实现网页交互效果。而其中一种常见效果是图片手动拖拽。以下是设置图片手动拖拽的JQuery代码。 $(document).ready(function() { var isDragging false; var mousePos { x: 0, y: 0 }; var elemPos { x: 0, y: 0 }; v…

Apache Spark 在爱奇艺的应用实践

01 Apache Spark 在爱奇艺的现状 Apache Spark 是爱奇艺大数据平台主要使用的离线计算框架&#xff0c;并支持部分流计算任务&#xff0c;用于数据处理、数据同步、数据查询分析等场景&#xff1a; 数据处理&#xff1a;在数据开发平台中支持开发者提交 Spark Jar 包任务或Spar…

elasticsearch2-es和kibana的安装

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

第 113 场 LeetCode 双周赛题解

A 使数组成为递增数组的最少右移次数 数据范围小直接模拟… class Solution { public:int minimumRightShifts(vector<int> &nums) {for (int op 0; op < nums.size(); op) {if (is_sorted(nums.begin(), nums.end()))//nums是否已经有序return op;rotate(nums.b…

zerotier-client

title: “zerotier-client” createTime: 2022-10-10T11:50:5108:00 updateTime: 2022-10-10T11:50:5108:00 draft: false author: “zcb” tags: [“zerotier-plant”,“zerotier-client”,“zerotier”] categories: [“zerotier”] description: “测试的” 1.windows 1.1…

【深度学习】Pytorch 系列教程(十二):PyTorch数据结构:4、数据集(Dataset)

目录 一、前言 二、实验环境 三、PyTorch数据结构 0、分类 1、张量&#xff08;Tensor&#xff09; 2、张量操作&#xff08;Tensor Operations&#xff09; 3、变量&#xff08;Variable&#xff09; 4、数据集&#xff08;Dataset&#xff09; 随机洗牌 一、前言 Ch…

【Windows】搭建 FTP 服务器

如果需要开发ftp文件上传下载等功能&#xff0c;就需要搭建个ftp服务器&#xff0c;方便调试。 FTP服务 FTP是文件传输协议&#xff08;File Transfer Protocol&#xff09;的简称&#xff0c;该协议属于应用层协议&#xff08;端口号通常为21&#xff09;&#xff0c;用于In…

【入门篇】ClickHouse最优秀的开源列式存储数据库

文章目录 一、什么是ClickHouse&#xff1f;OLAP场景的关键特征列式数据库更适合OLAP场景的原因输入/输出CPU 1.1 ClickHouse的定义与发展历程1.2 ClickHouse的版本介绍 二、ClickHouse的主要特性2.1 高性能的列式存储2.2 实时的分析查询2.3 高度可扩展性2.4 数据压缩2.5 SQL支…

骨传导耳机有害处吗、骨传导耳机真的不好用吗?

骨传导耳机没有害处。 骨传导耳机是通过将声音传递到颅骨&#xff0c;再由颅骨传递到内耳&#xff0c;从而达到听声音的效果&#xff0c;与传统的耳机不同。 因此&#xff0c;骨传导耳机不会直接对人的身体健康、耳朵产生压力和损伤&#xff0c;也不会影响耳道和中耳的正常功能…

在ios系统上实现更改IP地址

在当今的互联网环境中&#xff0c;我们经常需要更改手机的IP地址来避免一些限制或保护我们的隐私。然而&#xff0c;在iOS系统上&#xff0c;更改IP地址并不像在其他平台上那么容易。因此&#xff0c;本文将分享一种简单的方法&#xff0c;帮助您在iOS系统上免费更改手机的IP地…

浅谈C++|构造.析构函数篇

一对象的初始化和处理 1.1构造函数和析构函数 C拥有构造函数和析构函数&#xff0c;这两个函数将会被编译器自动调用&#xff0c;完成对象初始化和清理工作。对象的初始化和清理工作是编译器强制要我们做的事情&#xff0c;因此如果我们不提供构造和析构&#xff0c;编译器提供…

vue学习之组件化开发

1. vue创建 基于vue2的项目 vue create vue-cli-learning 选择 “Manually select features” 取消勾选“Linter / Formatter” 选择“2.x” 选择“In package.json” 输入“N” 回车

elasticsearch索引同步

通常项目中使用elasticsearch需要完成索引同步&#xff0c;索引同步的方法很多&#xff1a; #1、针对实时性非常高的场景需要满足数据的及时同步&#xff0c;可以同步调用&#xff0c;或使用Canal去实现。 1&#xff09;同步调用即在向MySQL写数据后远程调用搜索服务的接口写…

Springboot -- DOCX转PDF(二)

之前记录了按照模板生成 DOCX 文件、并转换为 PDF 文件的方法 https://blog.csdn.net/qq_40096897/article/details/131979177?spm1001.2014.3001.5501 但是使用效果并不是很理想&#xff0c;转换完的 PDF 格式和原本的文档格式不匹配。所以在此重新找了一个文件转 PDF 的方法…