2023/09/08 qtc++ day3

news2025/1/19 23:10:31

自行封装一个栈的类,包含私有成员的属性:栈的数组,记录栈顶的变量

成员函数:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求站的大小

头文件

#ifndef STACK_H
#define STACK_H
#include <iostream>
using namespace std;
class st
{
private:
    //记录栈顶的变量
    int top;
    //使用指针来存储栈
    int *data;

public:
    //构造函数
    st():top(-1),data(new int[5])
    {
        cout<<"无参构造函数"<<endl;
    }
    //析构函数
    ~st()
    {
        delete []data; //释放成员指针的空间
        cout<<"析构函数:"<<endl;
    }
    //拷贝构造函数
    st(const st &other):data(new int(*other.data))
    {
        cout<<"拷贝构造函数:"<<endl;
    }
    //入栈
    int stack_in(int e,int *data);
    //遍历栈
    void stack_show(int *data);
    //出栈
    int stack_out(int *data);
    //清空栈
    void stack_clear(int *data);
    //判空
    int stack_empty(int *data);
    //判满
    int stack_full(int *data);
    //获取栈顶元素
    int *stack_top(int *data);
    //求栈的大小
    int stack_size(int *data);

};
#endif // STACK_H

功能函数

#include "stack.h"

//入栈
int st::stack_in(int e,int *data)
{
    if(nullptr == data||stack_full(data))
    {
        cout<<"入栈失败!"<<endl;
        return -1;
    }
    //先加后压
    top++;
    data[top] =e; //将数据存放到栈中
    cout<<"入栈成功"<<endl;
    return 1;
}
//遍历栈

void st::stack_show(int *data)
{
    if(nullptr == data||stack_empty(data))
    {
        cout<<"遍历失败!"<<endl;
        return ;
    }
    //开始遍历
    cout<<"从栈顶到栈底的元素是:";
    for(int i=top;i>=0;i--)
    {
        cout<<"  "<<data[i];
    }
    return ;
}
//出栈
int st::stack_out(int *data)
{
    if(nullptr ==data||stack_empty(data))
    {
        cout<<"出栈失败!"<<endl;
        return -1;
    }
    //先弹后减
    int e = data[top];
    top--;
    cout<<"出栈成功!"<<endl;
    return 0;
}
//清空栈
void st::stack_clear(int *data)
{
    //判断逻辑
    if(nullptr==data)
    {
        cout<<"清空失败!"<<endl;
        return ;
    }
    delete []data;
    data =nullptr;
    return;
}
//判空
int st::stack_empty(int *data)
{
    if(nullptr != data)
    {
        return top == -1;
    }
    cout<<"栈不合法!"<<endl;

    return 0;
}
//判满
int st::stack_full(int *data)
{
    if(nullptr != data)
    {
        return top == sizeof(int[5])-1;
    }
    cout<<"栈不合法!"<<endl;
    return 0;
}
//获取栈顶元素
int *st::stack_top(int *data)
{
    if(nullptr == data||stack_empty(data))
    {
        cout<<"获取失败!"<<endl;
        return nullptr;
    }
    cout<<"栈顶元素是:"<<data[top]<<endl;
    return &data[top];
}
//求栈的大小
int st::stack_size(int *data)
{
    if(nullptr != data)
    {
        cout<<"栈的大小是:"<<top+1<<endl;
        return top+1;
    }
    cout<<"不合法!"<<endl;
    return 0;
}

主函数

#include "stack.h"
int main()
{
    st s1;
    int stack[5];
    //入栈
    s1.stack_in(3,stack);
    s1.stack_show(stack);
    s1.stack_top(stack);
    s1.stack_size(stack);
    s1.stack_in(4,stack);
    s1.stack_show(stack);
    s1.stack_top(stack);
    s1.stack_size(stack);
    s1.stack_in(5,stack);
    s1.stack_show(stack);
    s1.stack_top(stack);
    s1.stack_size(stack);
    s1.stack_in(6,stack);
    s1.stack_show(stack);
    s1.stack_top(stack);
    s1.stack_size(stack);
    s1.stack_in(7,stack);
    s1.stack_in(7,stack);
    s1.stack_in(7,stack);
    s1.stack_in(7,stack);
    //遍历栈
    s1.stack_show(stack);
    //出栈
    s1.stack_out(stack);
    s1.stack_out(stack);
    s1.stack_out(stack);
    s1.stack_out(stack);
    s1.stack_out(stack);
    s1.stack_out(stack);
     //遍历栈
    s1.stack_show(stack);
    //获取栈顶元素
    s1.stack_show(stack);
    s1.stack_top(stack);
    s1.stack_size(stack);

      //求栈的大小
     //清空栈
    s1.stack_clear(stack);
    return 0;
}

封装一个循环顺序队列的类,包含私有成员属性:存放队列的数组、队头位置、队尾位置

成员函数:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小

头文件

#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>
using namespace std;
class queue
{
private:
    //存放队列的数组
    int *data;
    //队头位置下标
    int head;
    //队尾位置下标
    int tail;
public:
    //构造函数
    queue():data(new int[5]),head(tail=0),tail(head=0)
    {
        cout<<"无参构造函数"<<endl;
    }
    //析构函数
    ~queue()
    {
        delete []data;
        cout<<"析构函数"<<endl;

    }
    //拷贝构造函数
    queue(const queue &other):head(other.head),tail(other.tail),data(new int(*other.data))
    {
        cout<<"拷贝构造函数"<<endl;
    }
    //判空
    int queue_empty(int *data);
    //判满
    int queue_full(int *data);
    //入队
    int queue_in(int e,int *data);
    //遍历
    void queue_show(int *data);
    //出队
    int queue_out(int *data);
    //求队列大小
    int queue_size(int *data);
    //清空队列
    void queue_clear(int *data);

};
#endif // QUEUE_H

功能函数

#include "queue.h"
//判空
int queue::queue_empty(int *data)
{
    if(nullptr == data)
    {
        cout<<"不合法!"<<endl;
        return -1;
    }
    return head == tail;
}
//判满
int queue::queue_full(int *data)
{
    if(nullptr == data)
    {
        cout<<"不合法!"<<endl;
        return -1;
    }
    return (tail+1)%20 == head;
}
//入队

int queue::queue_in(int e,int *data)
{
    //判断逻辑
    if(nullptr==data||queue_full(data))
    {
        cout<<"队列已经满了,无法入队!"<<endl;
        return -1;
    }
    //入队逻辑,将数据放在队尾所在的地方
    data[tail] = e;
    //队尾后移
    tail = (tail+1)%20;
    cout<<"入队成功\n";
    return 0;

}
//遍历
void queue::queue_show(int *data)
{
    //判断逻辑
    if(nullptr==data||queue_empty(data))
    {
        cout<<"队列不合法"<<endl;
        return ;
    }
    for(int i=head;i!=tail;i=(i+1)%20)
    {
        cout<<data[i]<<" ";
    }
    cout<<"遍历成功!"<<endl;
}
//出队
int queue::queue_out(int *data)
{
    //判断逻辑
    if(nullptr==data||queue_empty(data))
    {
        cout<<"队列不合法"<<endl;
        return -1;
    }
    //出队逻辑
    //将队头所在的位置元素删除,先进先出
    int e = data[head];
    //队头后移
    head =(head+1)%20;
    cout<<"出队成功"<<endl;
    return 0;



}
//求队列大小
int queue::queue_size(int *data)
{
    //判断逻辑
    if(nullptr==data||queue_empty(data))
    {
        cout<<"队列不合法"<<endl;
        return -1;
    }
    return (tail-head+20)%20;

}
//清空队列
void queue::queue_clear(int *data)
{
    if(nullptr!=data)
    {
        delete [] data;
        data = nullptr;
        cout<<"释放成功!"<<endl;
        return ;
    }
    cout<<"队列不合法!"<<endl;

}

主函数

#include "queue.h"
int main()
{
    //实例化对象
    queue q1;
    int d[5];
    //入队
    q1.queue_in(1,d);
    q1.queue_in(2,d);
    q1.queue_in(3,d);
     q1.queue_show(d);


    q1.queue_in(4,d);
    q1.queue_in(10,d);
    q1.queue_in(13,d);
    q1.queue_show(d);


    q1.queue_in(16,d);
    //遍历
    q1.queue_show(d);
    //出队
    q1.queue_out(d);
     q1.queue_show(d);
    //求队列大小
    int len =q1.queue_size(d);
    cout<<"len = "<<len<<endl;

    return 0;
}

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

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

相关文章

el-table操作列动态自适应设置(根据操作项个数动态设置宽度)

一、目的 目的&#xff1a;表格操作列宽度&#xff0c;根据操作项多少&#xff0c;自动调节宽度背景&#xff1a;用el-table组件开发时&#xff0c;对于表格的操作列的自适应宽度是一个问题&#xff0c;如果不设置&#xff0c;操作按钮多时会有换行问题。如果设置最小宽度或宽…

Tomcat 的部署和优化

1、什么是Tomcat Tomcat&#xff1a;是一个免费的、开源的轻量级web应用服务器&#xff0c;普遍用于中小型系统和访问用户流量小的场合&#xff0c;由于是java语言所开发开发&#xff0c;所以要jdk环境 由 web容器、servlet容器、jsp容器构成 web容器&#xff1a;完成 Web 服…

个人主页网站动态星空背景源码(带后台版本)

动态星空背景个人主页网站源码是一种用于创建个人主页的开源项目。它具有一个令人印象深刻的动态星空背景&#xff0c;为用户提供了一个独特而吸引人的网页设计。此源码还包含一个后台版本&#xff0c;使用户能够轻松管理和更新他们的个人主页内容。 通过该源码&#xff0c;用…

stringBuffer.append(“字符串参数“);这个在字符串参数后添加空格怎么写

stringBuffer.append(“字符串参数”);这个在字符串参数后添加空格怎么写&#xff1f; 要在字符串参数后添加空格&#xff0c;可以直接在字符串参数的末尾使用空格字符&#xff0c;像这样&#xff1a; stringBuffer.append("字符串参数 ");这样就在字符串参数后添加…

试图替代 Python 的下一代AI编程语言:Mojo

文章目录 为什么叫 Mojo &#xff1f;Python 家族的一员&#xff0c;MojoPython 的好处&#xff1a;Python 兼容性Python 的问题移动和服务器部署&#xff1a;Python 子集和其他类似 Python 的语言&#xff1a; Mojo 是一种创新的编程语言&#xff0c;结合了 Python 的可用性和…

【Unity】 2D 游戏 库存模块实现

库存模块主要参考了 youtube 上的视频 BMo 的 Flexible INVENTORY SYSTEM in Unity with Events and Scriptable Objects 和 Simple Inventory UI in Unity With Grid Layouts 这两个视频是一个系列 还是一个视频也是 BMo的 How To INTERACT with Game Objects using UNITY E…

git:亲测体验rebase与merge

rebase与merge异同与最佳使用场景[1] 这个dev-cui分支从devlop分支切出后,一直都只有我一个人在开发&维护. 假如还有一位同事张三, 在devlop分支切出的分支dev-zhangsan上进行开发,他添加了一个glossary.md,而后进行了add & commit 此时项目开发完成,需要将两个分支合并…

【C++模拟实现】手撕AVL树

【C模拟实现】手撕AVL树 目录 【C模拟实现】手撕AVL树AVL树的介绍&#xff08;百度百科&#xff09;AVL树insert函数的实现代码验证是否为AVL树AVL树模拟实现的要点易忘点AVL树的旋转思路 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2023.9.10 前言&#xff1a;本篇博客将…

《自然语言处理(NLP)的最新进展:Transformers与GPT-4的浅析》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Stable Diffusion 免费升级 SDXL 1.0,哪些新特性值得关注?体验如何?5 分钟带你体验!

一、引言 7 月 26 日&#xff0c;Stability AI 发布了 SDXL 1.0&#xff0c;号称目前为止&#xff0c;最厉害的开放式图像生成大模型。 它到底有没有网上说的那么炸裂&#xff1f;真的已经实现了像 midjourney 一样 靠嘴出图 的功能吗&#xff1f;相对于之前的版本&#xff0c;…

【redis进阶】Redis String数据类型为什么不好用

保存1 亿张10字节图片标识&#xff0c;String结构用了 6.4GB 的内存&#xff0c;为什么&#xff1f;如何优化&#xff1f; 数据量多时&#xff0c;比较占空间 存储数量量较多的时候&#xff0c;可以使用list数据结构来替代String&#xff0c;以二级编码的方式将数据存入redis…

[杂谈]-电动汽车有哪些不同类型

电动汽车有哪些不同类型&#xff1f; 文章目录 电动汽车有哪些不同类型&#xff1f;1、概述2、纯电动汽车&#xff08;BEV&#xff09;3、燃料电池电动汽车&#xff08;FCEV&#xff09;4、插电式混合动力汽车 (PHEV&#xff09;5、混合动力电动汽车 (HEV)6、轻度混合动力HEV7、…

树形DP()

没有上司的舞会 Ural 大学有 N 名职员&#xff0c;编号为 1∼N。 他们的关系就像一棵以校长为根的树&#xff0c;父节点就是子节点的直接上司。 每个职员有一个快乐指数&#xff0c;用整数 Hi 给出&#xff0c;其中 1≤i≤N。 现在要召开一场周年庆宴会&#xff0c;不过&am…

非结构化数据之XPath学习

1、XPath语法 XPath 是一门在 XML 文档中查找信息的语言。 XPath 可用来在 XML 文档中对元素和属性进行遍历。 <?xml version"1.0" encoding"ISO-8859-1"?> <bookstore> <book><title lang"eng">Harry Potter</t…

实战教程:如何将自己的Python包发布到PyPI上

1. PyPi的用途 Python中我们经常会用到第三方的包&#xff0c;默认情况下&#xff0c;用到的第三方工具包基本都是从Pypi.org里面下载。 我们举个栗子: 如果你希望用Python实现一个金融量化分析工具&#xff0c;目前比较好用的金融数据来源是 Yahoo 和 Google。你可能需要读取…

13-RocketMQ主从同步(HA实现)源码原理

slave每次接收到master发过来的一批commitlog数据时&#xff0c;会看master传过来的这段commitlog的起始端&#xff0c;对应的全局物理偏移量&#xff0c;和slave本地存储的批commitlog数据的最大物理偏移量&#xff0c;是否相等 如果相等&#xff0c;也说明master端没有给sla…

TCP详解之三次握手和四次挥手

TCP详解之三次握手和四次挥手 1. TCP基本认识 1.1 什么是 TCP TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 1.2 TCP协议段格式 我们先来看看TCP首部协议的格式 我们先来介绍一些与本文关联比较大的字段&#xff0c;其他字段不做详细阐述。 序列号&#xff1a…

【javaweb课设源码】图书管理系统SSM Mysql 期末课设

文章目录 简介 简介 本系统使用Javaweb技术制作&#xff0c;数据库为mysql 附带论文报告文档 printf("需要源码&#xff0c;可以baidu学长敲代码")&#xff1b;

input子系统框架、外设驱动开发

一、input子系统基本框架 Linux内核为了两个目的&#xff1a; 简化纯输入类外设&#xff08;如&#xff1a;键盘、鼠标、游戏杆、轨迹球、触摸屏。。。等等&#xff09;的驱动开发统一输入类外设产生的数据格式&#xff08;struct input_event&#xff09;&#xff0c;更加方…

【LeetCode题目详解】第九章 动态规划part10 121. 买卖股票的最佳时机 122.买卖股票的最佳时机II (day49补)

本文章代码以c为例&#xff01; 股票问题是一个动态规划的系列问题 一、力扣第121题&#xff1a;买卖股票的最佳时机 题目&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#x…