C++(day3)

2023-11-05

思维导图:

 封装顺序栈:

stack.h

#ifndef STACK_H
#define STACK_H

#include <iostream>

using namespace std;

#define MAX 5
typedef int datatype;

class Stack{
public:
    //构造函数
    Stack();
    //析构函数
    ~Stack();
    //拷贝构造函数
    Stack(const Stack &other);
    //入栈
    int push(datatype e);
    //出栈
    int pop();
    //清空栈
    void clear();
    //判空
    bool empty();
    //判满
    bool full();
    //获取栈顶元素
    datatype topdata();
    //求栈的大小
    int size();
private:
    datatype *data;
    int top;
};

#endif // STACK_H

stack.cpp

#include"stack.h"

//构造函数
Stack::Stack():data(new datatype[MAX]),top(-1){
    cout<<"构造函数"<<endl;
}
//析构函数
Stack::~Stack(){
    delete []data;    //释放指针空间
    cout<<"析构函数"<<endl;
}
//拷贝构造函数
Stack::Stack(const Stack &other):data(new datatype[MAX]),top(other.top){
    std::copy(other.data,other.data+MAX,data);
    cout<<"拷贝函数"<<endl;
}
//入栈
int Stack::push(datatype e){
    if(Stack::full()){
        cout<<"栈满,无法入栈;"<<endl;
        return 0;
    }
    data[++top]=e;
    cout<<data[top]<<"已入栈"<<endl;
    return 1;
}
//出栈
int Stack::pop(){
    if(Stack::empty()){
        cout<<"栈空,无法出栈;"<<endl;
        return 0;
    }
    cout<<data[top--]<<"已出栈"<<endl;
    return 1;
}
//清空栈
void Stack::clear(){
    cout<<"****清空栈****"<<endl;
    while(!Stack::empty()){
        Stack::pop();
    }
}
//判空
bool Stack::empty(){
    return -1 == top;
}
//判满
bool Stack::full(){
    return MAX-1 == top;
}
//获取栈顶元素
datatype Stack::topdata(){
    cout<<"栈顶元素为:";
    return data[top];
}
//求栈的大小
int Stack::size(){
    cout<<this<<"栈的大小为:";
    return top+1;
}

main.cpp

#include"stack.h"

int main()
{
    Stack s;
    s.push(1);
    s.push(2);
    s.push(3);
    s.push(4);
    s.push(5);
    s.push(6);
    cout<<s.size()<<endl;
    Stack s2=s;
    cout<<s2.size()<<endl;
    Stack s3=s2;
    cout<<s3.size()<<endl;
    s3.pop();
    s3.pop();
    s3.pop();
    cout<<s3.topdata()<<endl;
    s3.clear();
    s3.pop();
    cout<<s3.size()<<endl;
    cout<<s.size()<<endl;
    return 0;
}

效果图

封装循环队列:

queue.h

#ifndef QUEUE_H
#define QUEUE_H

#include <iostream>
typedef int datatype;
#define MAX 5

using namespace std;

class Queue{
public:
    //构造函数
    Queue();
    //析构函数
    ~Queue();
    //拷贝构造函数
    Queue(const Queue &other);
    //入队
    int push(datatype e);
    //出队
    int pop();
    //清空队列
    void clear();
    //判空
    bool empty();
    //判满
    bool full();
    //求队列大小
    int size();

private:
    int front;
    int tail;
    datatype *data;
};

#endif // QUEUE_H

queue.cpp

#include"queue.h"

//构造函数
Queue::Queue():front(0),tail(0),data(new datatype[MAX])
{
    cout<<"构造函数"<<endl;
}
//析构函数
Queue::~Queue(){
    delete []data;
    cout<<"析构函数"<<endl;
}
//拷贝构造函数
Queue::Queue(const Queue &other):front(other.front),
    tail(other.tail),
    data(new datatype[MAX]){
    std::copy(other.data,other.data+MAX,data);
    cout<<"拷贝构造函数"<<endl;
}
//入队
int Queue::push(datatype e){
    if(Queue::full()){
        cout<<"队满,无法入队;"<<endl;
        return 0;
    }
    data[tail]=e;
    cout<<e<<"已入队"<<endl;
    tail=(tail+1)%MAX;

    return 1;
}
//出队
int Queue::pop(){
    if(Queue::empty()){
        cout<<"队空,无法出队;"<<endl;
        return 0;
    }
    cout<<data[front]<<"已出队"<<endl;
    front=(front+1)%MAX;
    return 1;
}
//清空队列
void Queue::clear(){
    cout<<"****清空队列****"<<endl;
    while(!Queue::empty()){
        Queue::pop();
    }
}
//判空
bool Queue::empty(){
    return front==tail;
}
//判满
bool Queue::full(){
    return (tail+1)%MAX==front;
}
//求队列大小
int Queue::size(){
    cout<<this<<"队列大小为:";
    return (tail-front+MAX)%MAX;
}

main.cpp

#include"queue.h"

int main()
{
    Queue q;
    q.push(1);
    q.push(2);
    q.push(3);
    q.push(4);
    q.push(5);
    cout<<q.size()<<endl;
    Queue q2=q;
    cout<<q2.size()<<endl;
    Queue q3=q2;
    cout<<q2.size()<<endl;
    q2.clear();
    q2.pop();
    cout<<q2.size()<<endl;
    cout<<q.size()<<endl;

    return 0;
}

效果图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++(day3) 的相关文章

随机推荐

  • Mybatis使用注解方式配置

    目录 1 介绍 2 初始化工程 2 1 导包 2 2 导配置 3 使用注解增删改查 3 1 环境准备 3 1 1 建库建表 3 1 2 创建Student实体类 3 1 3 创建StudentDao接口 3 1 4 配置映射关系 3 2 查
  • Python Matplotlib 实用小技巧!

    转自 网络 今天给大家介绍Matplotlib绘图实用的小技巧 1 添加标题 title matplotlib pyplot 对象中有个 title 可以设置表格的标题 import numpy as np import matplotli
  • django前端模板循环多个list

    这一部分主要涉及到后台View的设计 前端HTML页面的设计 后台设计View from django views generic import View class ForTrView View def get self request
  • PCL 区域生长分割(C++详细过程版)

    区域生长 一 概述 二 代码实现 三 结果展示 1 原始点云 2 聚类结果 四 相关链接 一 概述 区域生长分割是PCL里经典的点云聚类分割算法 具体算法原理和实现代码见 PCL 区域生长分割 为充分了解算法实现的每一个细节和有待改进的地方
  • display:none元素不可见,可通过JS方法把它修改为可见

    页面元素无论用什么xpath都无法定位 by id class name都试过了 可以去页面看看是否这个元素的display是none display none方法是设置元素不可见 所以解决办法就是首先通过JS方法把它修改为可见 js do
  • Kafka 创建 两个topic 一个用于发送信息 一个用于接收Flink处理之后的信息

    Kafka 创建 两个topic 一个用于发送信息 一个用于接收Flink处理之后的信息 Kafka生产者Java代码 package cn oneseek import cn oneseek util JsonData import or
  • 网络工程专业毕设题目选题大全

    文章目录 0 简介 1 如何选题 2 最新网络工程选题 2 1 Java web SSM 系统 2 2 大数据方向 2 3 人工智能方向 2 4 其他方向 4 最后 0 简介 学长搜集分享最新的网络工程专业毕设毕设选题 难度适中 适合作为毕
  • vue入门教程之-属性、事件和双向绑定

    vue入门教程之 属性 事件和双向绑定 欢迎关注博主公众号 java大师 专注于分享Java领域干货文章 关注回复 资源 免费领取全网最热的Java架构师学习PDF 转载请注明出处 https www javaman cn vue vue
  • 【JAVA

    package learn import java awt import javax swing import java awt event public class PinBall private Frame frame new Fram
  • 中国金融牌照全解读

    前言 金融牌照 即金融机构经营许可证 是批准金融机构开展业务的正式文件 目前金融许可证由银监会 证监会和保监会等部门分别颁发 金融监管根据时段划分为事前监管 事中监管 事后监管 市场准入制度是事前监管的核心 金融许可证则是市场准入制度的常态
  • ITERM2 自动登录跳板机脚本(多跳、带动态TOKEN)

    代码如下 设置方式是 iterm2 preference Profiles 新建一个profile 并设置Name为a Command为 Users XXX Desktop a sh 在sen text as start内传入4个参数 US
  • Android开发——菜单(Menu)-——选项菜单(OptionMenu)

    Menu 在Android3 0以前的menu显示 是用户点击手机下方操作按钮的菜单按钮时 会从界面底部向上弹出菜单 菜单内容出现在屏幕底部 可以包含六个及以上的菜单项 超出的部分则以 更多 来显示 在Android3 0以后的更高版本的系
  • git clone使用方法

    步骤是转载的该文章 后面有添加自己的要注意的地方 不完全一样 仅码住自用 使用Git clone项目 1 首先我们要确保我们的电脑上已经安装Git 桌面点击右键出现如下图所示的两个Git即Git已经安装 2 在电脑的任意一个磁盘里新建一个本
  • ARM公司发展史

    目录 1 前言 2 ARM公司发展史 3 ARM架构发展史 3 1ARMv1架构 3 2 ARMv2架构 3 3 ARMv3架构 3 4 ARMv4架构 3 5 ARMv5架构 3 6 ARMv6架构 3 7 ARMv7架构 3 8 ARM
  • 关于存储器按字节寻址和按字寻址的理解

    关于存储器按字节寻址和按字寻址的理解 近日在学习MOOC上学习哈工大刘宏伟老师的 计算机系统组成原理 课程 在4 1节提到主存的时候简单地提到一下关于按字节寻址和按字寻址的寻址空间问题 个人非常疑惑于是各处搜索查找资料 下面是本人就这个问题
  • 【机器学习】左逆、右逆、伪逆和广义逆的概念理解

    逆矩阵 对于矩阵 A A A 如果存在一个矩阵 B B B 使得 A B B
  • spring boot配置logback日志

    spring boot配置logback日志 第一次用 markdown编辑 哈哈 在上一篇spring boot入门里提过 Spring Boot默认的日志打印是logback 所以配置logback日志会很简单 但是也有注意的地方 本次
  • vue实时监听窗口宽度变化

    自适应 向来是前端工程师需要解决的一大问题 即便作为当今非常火热的vue框架 也无法摆脱 虽然elementui iview等开源UI组件库层出不穷 但官方库毕竟不可能满足全部需求 因此我们可以通过 监听窗口变化 达到想要的绝大部分自适应效
  • spring Cache的缓存记录

    使用Spring Cache需要我们做两方面的事 n 声明某些方法使用缓存 n 配置Spring对Cache的支持 和Spring对事务管理的支持一样 Spring对Cache的支持也有基于注解和基于XML配置两种方式 下面我们先来看看基于
  • C++(day3)

    思维导图 封装顺序栈 stack h ifndef STACK H define STACK H include