作业0903

news2024/11/15 12:17:32

1.封装栈 

#include <iostream>

using namespace std;

class myStack
{
private:
     int size;  // 大小
     int capacity;
     int *ptr;
     int top;   // 栈顶下标
public:
    // 无参构造函数
    myStack():size(0), top(-1), capacity(10) {ptr = new int[capacity];}
    // 有参构造函数
    myStack(int c):size(0), top(-1), capacity(c) {ptr = new int[capacity];}
    // 析构函数
    ~myStack() {delete []ptr;}
    // 拷贝赋值函数
    myStack& operator=(myStack& other);
    // 判空
    bool empyt();
    // 判满
    bool full();
    // 访问栈顶元素
    int& get_top();
    // 返回容纳的元素数
    int get_size();
    // 向栈顶插入元素
    bool push(int e);
    // 删除栈顶元素
    bool pop();
};

// 拷贝赋值函数
myStack& myStack::operator=(myStack& other)
{
    delete []ptr;
    this->size = other.size;
    this->capacity = other.capacity;
    this->top = other.top;
    this->ptr = new int[capacity];
    memcpy(this->ptr, other.ptr, this->capacity);

    return *this;
}
// 判空
bool myStack::empyt()
{
    return top == -1;
}
// 判满
bool myStack::full()
{
    return top == capacity-1;
}
// 访问栈顶元素
int& myStack::get_top()
{
    return ptr[top];
}
// 返回容纳的元素数
int myStack::get_size()
{
    return size;
}
// 向栈顶插入元素
bool myStack::push(int e)
{
    if(full())
    {
        return false;
    }

    top++;
    ptr[top] = e;
    size++;

    return true;
}
// 删除栈顶元素
bool myStack::pop()
{
    if(empyt())
    {
        return false;
    }

    top--;
    size--;

    return true;
}

int main()
{
    myStack S1(5);
    for(int i=0; i<10; i++)
    {
        S1.push(i+1);
        cout << "size = " << S1.get_size() << endl;
        if(!S1.empyt())
        {
            cout << "S1[top] = " << S1.get_top() << endl;
        }
    }
    cout << "--------------------------" << endl;

    myStack S2 = S1;
    cout << "S2[top] = " << S2.get_top() << endl;
    for(int i=0; i<10; i++)
    {
        S2.pop();
        cout << "size = " << S2.get_size() << endl;
        if(!S2.empyt())
        {
            cout << "S2[top] = " << S2.get_top() << endl;
        }
    }
    cout << "--------------------------" << endl;

    return 0;
}

 

2.封装队列

#include <iostream>

using namespace std;

class myQueue
{
private:
    int front;  // 队首
    int back;   // 队尾
    int size;   // 大小
    int capacity;// 容量
    int *ptr;
public:
    // 无参构造
    myQueue():front(0), back(0), size(0), capacity(10) {ptr = new int[capacity];}
    // 有参构造
    myQueue(int c):front(0), back(0), size(0), capacity(c) {ptr = new int[capacity];}
    // 析构函数
    ~myQueue() {delete []ptr;}
    // 拷贝赋值函数
    myQueue& operator=(myQueue& other);
    // 判空
    bool empty();
    // 判满
    bool full();
    // 访问队首元素
    int& get_front();
    // 访问队尾元素
    int& get_back();
    // 返回容纳的元素数
    int get_size();
    // 向队尾插入元素
    bool push(int e);
    // 删除队首元素
    bool pop();
};

// 拷贝赋值函数
myQueue& myQueue::operator=(myQueue& other)
{
    delete []ptr;
    this->size = other.size;
    this->front = other.front;
    this->back = other.back;
    this->capacity = other.capacity;
    this->ptr = new int[this->capacity];
    memcpy(this->ptr, other.ptr, this->capacity);

    return *this;
}

// 判空
bool myQueue::empty()
{
    return front == back;
}

// 判满
bool myQueue::full()
{
    return (back+1)%capacity == front;
}

// 访问队首元素
int& myQueue::get_front()
{
    return ptr[front];
}

// 访问队尾元素
int& myQueue::get_back()
{
    return ptr[back-1];
}

// 返回容纳的元素数
int myQueue::get_size()
{
    return size;
}

// 向队尾插入元素
bool myQueue::push(int e)
{
    if(full())
    {
        return false;
    }

    ptr[back] = e;
    back = (back+1)%capacity;
    size++;

    return true;
}

// 删除队首元素
bool myQueue::pop()
{
    if(empty())
    {
        return false;
    }

    front = (front+1)%capacity;
    size--;

    return true;
}

int main()
{
    myQueue q1(5);
    cout << "size = " << q1.get_size() << endl;
    cout << "--------------------------" << endl;

    q1.push(666);
    cout << "q1[front] = " << q1.get_front() << endl;
    cout << "q1[back] = " << q1.get_back() << endl;
    cout << "size = " << q1.get_size() << endl;
    cout << "--------------------------" << endl;

    q1.push(777);
    q1.push(888);
    q1.push(999);
    q1.push(111);   // 入队失败
    cout << "q1[front] = " << q1.get_front() << endl;
    cout << "q1[back] = " << q1.get_back() << endl;
    cout << "size = " << q1.get_size() << endl;
    cout << "--------------------------" << endl;

    q1.pop();
    cout << "q1[front] = " << q1.get_front() << endl;
    cout << "q1[back] = " << q1.get_back() << endl;
    cout << "size = " << q1.get_size() << endl;
    cout << "--------------------------" << endl;

    myQueue q2 = q1;
    cout << "q2[front] = " << q2.get_front() << endl;
    cout << "q2[back] = " << q2.get_back() << endl;
    cout << "size = " << q2.get_size() << endl;
    cout << "--------------------------" << endl;

    return 0;
}

思维导图:

 

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

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

相关文章

【数据结构】你真的了解栈和队列吗?

文章目录 1. 栈1.1 概念与结构1.2 栈的实现 2. 队列2.1 概念与结构2.2 队列的实现 3. 栈和队列的算法题3.1 有效的括号3.2 用队列实现栈3.3用栈实现队列3.4 设计循环队列 4. 结语 1. 栈 1.1 概念与结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插…

.hackme靶机通关攻略

第一步查找ip 通过御剑扫描到IP进入尝试 成功找到靶场 步骤二来到这个靶场注册登录 进来点一下提交出来书名 只有一个框框那就来试试sql注入 1’ and 12 -- 然后查看数据库 -1 union select database(),2,3 # 查看数据库表名 -1 union select group_concat(table_name),2…

Java面试题精选:消息队列(三)

1、RabbitMQ中的vhost起什么作用&#xff1f; &#xff08;1&#xff09;vhost本质上就是一个mini版的mq服务器&#xff08;虚拟消息服务器&#xff09;。 有自己的队列、交换器和绑定&#xff0c;最重要的&#xff0c;拥有独立的权限机制&#xff0c;可以做到vhost范围的用户…

VoxEdit 比赛|创作农场灵感资产

为大家带来另一场 VoxEdit 迷你比赛&#xff01;在一周时间内创建可用资产&#xff01; 主题&#xff1a;踏入农场世界&#xff0c;使用 VoxEdit 创建农场主题资产。 从古朴的农舍到可爱的鸡舍&#xff0c;甚至是充满胡萝卜的农田。 你将专注于捕捉农场生活的精髓&#xf…

计算机毕业设计Spark+PyTorch知识图谱中药推荐系统 中药数据分析可视化大屏 中药爬虫 机器学习 中药预测系统 中药情感分析 大数据毕业设计

创新点&#xff1a;知识图谱、大数据虚拟机、可视化大屏、python爬虫、lstm深度学习情感分析、sparkhadoophive离线计算实时计算全部实现、前后台完整、支付宝沙箱支付、短信、AI识别、4-20种推荐算法、中药价格机器学习预测算法等上百种创新点 开发技术&#xff1a;spark hiv…

如何从 Bak 文件中恢复 SQL数据库?(3种方法)

如何从 .bak 文件恢复 SQL数据库&#xff1f; 在数据库管理和维护过程中&#xff0c;数据的安全性和完整性至关重要。备份文件&#xff08;.bak 文件&#xff09;是 SQL Server 中常用的数据库备份格式&#xff0c;它包含了数据库的完整副本&#xff0c;用于在数据丢失、系统故…

在线思维导图怎么快速绘制?5个软件帮助你绘制思维导图不求人

在线思维导图怎么快速绘制&#xff1f;5个软件帮助你绘制思维导图不求人 在线绘制思维导图是整理思路、计划项目、或者学习新知识的绝佳方式。通过使用专门的软件和工具&#xff0c;你可以快速、便捷地创建出清晰的思维导图。以下是五款在线思维导图工具&#xff0c;可以帮助你…

惠中科技PV-Wiper全自动光伏组件清洁系统:智能清洁赋能光伏产业

在全球绿色能源转型的浪潮中&#xff0c;光伏产业作为清洁能源的重要支柱&#xff0c;正以前所未有的速度发展。然而&#xff0c;光伏组件的清洁维护问题一直是制约其发电效率与使用寿命的关键因素。针对这一挑战&#xff0c;惠中科技凭借其深厚的行业积累和技术创新实力&#…

C++基础多态

目录 学习内容&#xff1a; 1. 多态 1.1 多态的实现 1.2 函数重写&#xff08;override&#xff09; 1.3 虚函数 1.4 使用多态实现的实例 1.5 虚函数的底层实现 1.6 重载&#xff08;voerload&#xff09;、重写&#xff08;override&#xff09;和隐藏&#xff08;h…

数据结构,单向链表

数据结构是计算机科学中的一个核心概念&#xff0c;它研究的是数据的组织、管理和存储方式&#xff0c;以及在这些数据上进行操作时的算法。数据结构为数据的高效访问和修改提供了基础。 数组&#xff08;Array&#xff09;&#xff1a;一种线性数据结构&#xff0c;可以存储固…

kubeadm方式安装k8s

⼀、安装环境 1. 安装说明 本次以⼆进制⽅式安装⾼可⽤ k8s 1.28.0 版本&#xff0c;但在⽣产环境中&#xff0c;建议使⽤⼩版本⼤于 5 的 Kubernetes 版本&#xff0c;⽐如 1.19.5 以后。 2. 系统环境 3. ⽹络及版本环境 注&#xff1a;宿主机⽹段、Pod ⽹段、Service ⽹段…

项目管理利器:2024五款精选项目管理软件深度解析

在项目管理这个纷繁复杂的领域中摸爬滚打二十年&#xff0c;我见证了无数项目从策划到实施&#xff0c;再到成功交付的全过程。在这个过程中&#xff0c;项目管理软件如同导航灯塔&#xff0c;为团队指明了方向&#xff0c;提高了效率&#xff0c;降低了风险。今天&#xff0c;…

Spring声明式事务使用详情(知识点+案例)

目录 1、声明式事务的概念 2、Spring事务管理器 3、基于注解的Spring事务 4、Spring事务属性 4.1只读&#xff08;Read-Only&#xff09; 4.2事务超时&#xff08;Timeout&#xff09; 4.3事务异常回滚&#xff08;rollbackFor&#xff09; 4.4事务隔离级别&#xff08…

如何用Java SpringBoot打造助农捐赠平台?2025年25届毕业生必看+最新设计实现攻略!

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【深度学习与NLP】——词嵌入Embedding技术

目录 1.词嵌入的作用 2.嵌入矩阵的计算 3.Embedding层的代码实验 词嵌入&#xff08;Embedding&#xff09;技术是一种将词汇映射到低维连续向量空间的方法。将离散的单词数据处理成连续且固定长度的向量&#xff0c;使模型可以学习和处理语义信息。 假设需要将["Are&…

终于有人把数据中台讲明白了

在大数据发展的黄金期&#xff0c;几乎所有的高科技企业都在思考一个问题&#xff1a;海量数据作为大多数企业发展不可避免的一个趋势之后&#xff0c;企业该怎么去应用这部分数据资产&#xff0c;会对其商业产生什么影响&#xff0c;如何使数据对企业产生正面的推动而不是成为…

【Oracle APEX开发小技巧 7】解决初始化数据在动态操作-变更中被识别跳出弹窗的问题

在开发时有一个场景——推送开关数据来自于初始化动态操作&#xff0c;理论上只有变更的时候才会有二次提示&#xff0c;但是因为初始化会触发变更&#xff0c;所以会有弹窗&#xff0c;这不是我们想要的结果&#xff0c;有什么办法在初次回显数据不跳出提示吗&#xff1f;​​…

day-48 分割回文串

思路 利用dfs算法&#xff0c;用ids表示当前所指向字符的位置&#xff0c;依次判断s.charAt(ids),s.charAt(ids)s.charAt(ids1)…是否为回文字符串&#xff0c;如果是则加入链表p,再递归调用dfs函数 解题过程 每次调用dfs函数后记得还原现场 Code class Solution {public St…

【STM32+HAL库】---- 基础定时器中断控制LED

硬件开发板&#xff1a;STM32G0B1RET6 软件平台&#xff1a;cubemaxkeilVScode1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置LED LED由PA5引脚控制&#xff0c;选择PA5引脚&#xff0c;选择GPIO_Output模式 1.3 定时时间的计算 T ( 预分频系数 1 ) ( 重装载值 1 ) 时…

RedisStack十部曲之二:Redis的核心概念

文章目录 键空间修改和查询键键过期遍历键空间 客户端缓存在计算机科学中有两个难题客户端缓存的Redis实现跟踪模式的工作机制统一的键命名空间 两种连接方式缓存策略Opt-in 模式Opt-out 模式广播模式NOLOOP选项避免竟态条件当与服务器失去连接怎么办什么值得缓存 流水线请求/响…