坐牢第三十四天(c++)

news2024/11/13 23:58:09

一.作业

1.栈的手写

#include <iostream>
using namespace std;
// 封装一个栈
class stcak
{
private:
    int *data;    //
    int max_size; // 最大容量
    int top;      // 下标
public:
    // 无参构造函数
    stcak();
    // 有参构造函数
    stcak(int size);
    // 拷贝构造函数
    stcak(const stcak &other);
    // 析构函数
    ~stcak();
    // 判空函数
    bool empty();
    // 判满函数
    bool full();
    // 扩容函数
    void resize(int new_size);
    // 返回元素个数函数
    int size();
    // 向栈顶插入元素函数
    void push(int value);
    // 删除栈顶元素函数
    int pop();
    // 访问栈顶元素函数
    int get_top();
    // 赋值重载函数
    stcak &operator=(const stcak &other);
    // 遍历栈里元素函数
    void show();
};
// 无参构造函数
stcak::stcak() : max_size(10)
{
    data = new int[10];
    max_size = 10;
    top = -1;
    cout << "无参构造" << endl;
}
// 有参构造函数
stcak::stcak(int size)
{
    data = new int[size];
    max_size = size;
    top = -1;
    cout << "有参构造" << endl;
}
// 拷贝构造函数
stcak::stcak(const stcak &other)
{
    max_size = other.max_size;
    top = other.top;
    data = new int[max_size];
    for (int i = 0; i <= top; i++)
    {
        data[i] = other.data[i];
    }
    cout << "拷贝构造" << endl;
}
// 析构函数
stcak::~stcak()
{
    delete[] data;
    cout << "析构函数" << endl;
}
// 判空函数
bool stcak::empty()
{
    return top == -1;
}
// 判满函数
bool stcak::full()
{
    return top == max_size - 1;
}
// 扩容函数
void stcak::resize(int new_size)
{
    int *new_data = new int[new_size];
    for (int i = 0; i <= top; i++)
    {
        new_data[i] = data[i];
    }
    delete[] data;
    data = new_data;
    max_size = new_size;
}
// 返回元素个数函数
int stcak::size()
{
    return top + 1;
}
// 向栈顶插入元素函数
void stcak::push(int value)
{
    if (full())
    {
        // 调用扩容函数
        resize(max_size * 2);
    }
    data[++top] = value;
}
// 删除栈顶元素函数
int stcak::pop()
{
    if (empty())
    {
        cout << "栈是空的";
        return -1;
    }
    return data[top--]; // 出栈
}
// 访问栈顶元素函数
int stcak::get_top()
{
    if (empty())
    {
        cout << "栈是空的";
        return -1;
    }
    return data[top]; // 出栈
}
// 赋值重载函数
stcak &stcak::operator=(const stcak &other)
{
    if (this == &other)
    {
        return *this;
    }
    delete[] data;
    max_size = other.max_size;
    top = other.top;
    data = new int[max_size];
    for (int i = 0; i <= top; i++)
    {
        data[i] = other.data[i];
    }
    return *this;
}
// 遍历栈里元素函数
void stcak::show()
{
    if (empty())
    {
        cout << "栈是空的";
        return;
    }
    cout << "栈里元素有:"<<endl;
    for (int i = 0; i <= top; i++)
    {
        cout<< data[i] <<'\t'; 
    }
    cout <<endl;
}
/******************主函数*********************/ 
int main()
{
    stcak s1(20);
    cout << s1.size() << endl;
    s1.push(1);
    s1.push(2);
    s1.show();
    cout << s1.size() << endl;
    stcak s2 = s1;
    return 0;
}

 效果图:

2.队列的手写

#include <iostream>
using namespace std;
class queue
{
private:
    int *data;    // 容器
    int max_size; // 最大容量
    int front;    // 头下标
    int tail;     // 尾下标
public:
    // 无参构造函数
    queue();
    // 有参构造函数
    queue(int size);
    // 拷贝构造函数
    queue(const queue &other);
    // 析构函数
    ~queue();
    // 判空函数
    bool empty();
    // 判满函数
    bool full();
    // 扩容函数
    void resize(int new_size);
    // 元素个数函数
    int size();
    // 向队列尾部插入元素函数
    void push(int value);
    // 删除首个元素函数 出队
    int pop();
    // 遍历队列元素
    void show();
    // 赋值重载函数
    queue &operator=(const queue &other);
};
// 无参构造函数
queue::queue() : max_size(10)
{
    data = new int[10];
    max_size = 10;
    front = tail = -1;
    cout << "无参构造" << endl;
}
// 有参构造函数
queue::queue(int size)
{
    data = new int[size];
    max_size = size;
    front = tail = 0;
    cout << "有参构造" << endl;
}
// 拷贝构造函数
queue::queue(const queue &other)
{
    max_size=other.max_size;
    front=other.front;
    tail=other.tail;
    data=new int[max_size];
    for (int i = front; i != tail; i = (i + 1) % max_size)
    {
        data[i]=other.data[i];
    }   
    cout << "拷贝构造" << endl;
}
// 析构函数
queue::~queue()
{
    delete[] data;
    cout << "析构函数" << endl;
}
// 判空函数
bool queue::empty()
{
    return front == tail;
}
// 判满函数
bool queue::full()
{
    return (tail + 1) % max_size == front;
}
// 元素个数函数
int queue::size()
{
    return (tail - front + max_size) % max_size;
}
// 扩容函数
void queue::resize(int new_size)
{
    int *new_data = new int[new_size];
    for (int i = front; i <= tail; i++)
    {
        new_data[i] = data[i];
    }
    data = new_data;
    max_size = new_size;
}
// 向队列尾部插入元素函数
void queue::push(int value)
{
    if (full())
    {
        // 调用扩容函数
        resize(max_size * 2);
    }
    data[tail] = value;
    tail = (tail + 1) % max_size;
}
// 删除首个元素函数 出队
int queue::pop()
{
    if (empty())
    {
        cout << "队列为空" << endl;
        return -1;
    }
    cout << data[front] << "出队" << endl;
    front = (front + 1) % max_size;
    return 0;
}
// 遍历队列元素
void queue::show()
{
    if (empty())
    {
        cout << "队列为空" << endl;
        return;
    }
    cout << "队列元素:" << endl;
    for (int i = front; i != tail; i = (i + 1) % max_size)
    {
        cout << data[i] << '\t';
    }
    cout << endl;
}
// 赋值重载函数
queue &queue::operator=(const queue &other)
{
    if (this == &other)
    {
        return *this;
    }
    delete []data;
    max_size=other.max_size;
    front=other.front;
    tail=other.tail;
    data=new int[max_size];
    for (int i = front; i != tail; i = (i + 1) % max_size)
    {
        data[i]=other.data[i];
    }
    cout << "拷贝赋值函数" <<endl;  
    return *this; 
}
/******************主函数*********************/
int main()
{
    queue s1(20);
    s1.push(1);
    s1.push(2);
    s1.show();
    // s1.pop();
    // s1.pop();
    // s1.show();
    queue s2=s1;
    queue s3;
    s3=s2;
    return 0;
}

 效果图:

二.思维导图

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

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

相关文章

Linux调试器-gdb的使用

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 1.前置知识 程序的发布方式一般有两种&#xff0c;deb…

sql-labs51-55通关攻略

第51关 一.查询数据库 1and updatexml(1,concat(0x7e,(select database()),0x7e),1)-- 二.查表 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemadatabase() ),0x7e),1) -- 三.查列 and updatexml(1,concat…

都2024年了你还缺客源?十分钟教你如何获取!

你是否还在为如何找到精准的客源而烦恼&#xff1f;别担心&#xff0c;今天我们就来分享一些客源采集方法&#xff0c;让你十分钟内掌握技巧&#xff0c;轻松获取全国各地各行各业的客源。 精准采集客源 1. 拓客工具 专业的拓客工具可以帮助你精准地采集到全国各地的客源信息。…

【SPSS】基于因子分析法对葡萄酒数据进行分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

使用合同比对工具时,有哪些常见问题和解决方案?

在使用合同比对工具的过程中&#xff0c;企业可能会面临一系列挑战&#xff0c;这些问题可能会影响工具的效率和效果。以下是一些常见的问题&#xff1a; 1.兼容性问题&#xff1a;在不同的工作环境中&#xff0c;合同文档可能以不同的格式存在&#xff0c;如PDF、Word、Excel…

手撕Python之散列类型

1.字典 思考&#xff1a;如果有多个数据&#xff0c;例如&#xff1a;“凯子”&#xff0c;“男”&#xff0c;19&#xff0c;如何快速存储这些数据 多数我们是通过列表进行存储的 li[凯子,男,19] 在定义完这个列表之后我们如何来找到数据凯子呢&#xff1f; 我们可以通过…

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存&#xff08;存储&#xff09; 1.2、研究目的 如何存储数据&#xff08;变量&#xff0c;数组....)程序数据结构算法 1.3、常见保存数据的方法 数组&#xff1a;保存自己的数据指针&#xff1a;是间接访问已经存在的…

【笔试练习】深信服校园招聘c/c 软件开发H卷

题目链接 一、填空题 如图所示&#xff0c;平面上有两条平行的线段&#xff0c;上面的线段有A0~A3 4个点&#xff0c;下面的线段有B0到B5 6个点&#xff0c;现在需要把所有的点都连接起来&#xff0c;有如下约束&#xff1a; 每个端点&#xff0c;都至少有一条到另一平行线上端…

仿微信聊天系统开发功能架构分析

仿微信聊天系统是一种旨在模仿微信核心聊天功能的应用或软件&#xff0c;它允许用户通过即时通讯进行交流。该系统通常由客户端、服务器端和数据库组成&#xff0c;以支持用户间的实时消息传送。以下是对仿微信聊天系统的一个概述&#xff1a; 一、系统架构 客户端 用户界面&…

【面试05】PID控制算法

一、 PID算法简介 PID&#xff08;Proportional-Integral-Derivative&#xff09;控制算法是一种经典的反馈控制方法&#xff0c;广泛应用于自动控制系统&#xff0c;例如温度控制、速度控制、位置控制等。 PID控制算法的核心包含三个部分&#xff1a;比例项&#xff08;P&…

一键掌控园区运营,数字化管理平台如何实现?

在当今数字化时代&#xff0c;高效的管理是企业成功的关键。对于各类园区而言&#xff0c;如何实现一键掌控园区运营&#xff0c;成为了提升竞争力的重要课题。幸运的是&#xff0c;数字化管理平台的出现如同一把智慧钥匙&#xff0c;为实现园区运营提供了完美的解决方案。 数字…

<Rust>egui学习之小部件(九):如何在窗口中添加下拉列表combobox部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析&#xff0c;主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统&#xff1a;windows 平台&#xff1a;visual studio code 语言&#xff1a;rust 库&#xff1a;egui、eframe 概述 本文是本专栏的第九篇博…

系统编程-数据库

数据库 目录 数据库 引入 1、先安装数据库 2、数据库设置密码 3、数据库的进入和退出(前提 你的密码更改过了) 数据库的基本操作 1、显示所有的数据库 2、创建数据库 3、删除数据库 4、选择数据库 在数据库中对表进行操作 1、查看当前数据库中的表 2、在数据库中…

Spring框架——springweb(一篇包会)

目录 一、Springweb概述 1.SpringWeb特点 2.SpringWeb组件 3.SpringWeb运行流程 二、搭建Springweb 1.导入框架所需的包 2.配置 DispatcherServlet 3.开启SpringWeb注解 4.处理器类搭建 5.请求处理 &#xff08;1&#xff09;接收请求RequestMapping &#xff08;2&…

大疆上云API基于源码部署

文章目录 大疆上云API基于源码部署1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Redis的安装…

Visual Studio Code大大提升工作效率小技巧~~~

Visual Studio Code &#xff08; VS Code &#xff09;是一个知名且评价很高的代码编辑器&#xff0c;具有大量功能和扩展以增强开发体验。使用 VS Code 的主要好处之一是它的灵活性&#xff0c;允许开发人员根据他们的特定需求对其进行自定义。 此外&#xff0c;VS Code 轻巧…

(十五)SpringCloudAlibaba-Sentinel持久化到Nacos

前言 在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中; 传送门(Sentinel数据持久化到文件)https://blog.csdn.net/weixin_45876411/article/details/140742963 默认情况下 Sentinel 只能接收到 Nacos 推送的消息&#xff0c;但…

JNPF低代码:可视化如何赋能企业的转型之路

在数字化转型的浪潮中&#xff0c;企业面临着前所未有的挑战与机遇。传统的软件开发方式往往耗时长、成本高&#xff0c;且难以快速适应市场变化。低代码开发平台的出现&#xff0c;为企业的数字化转型提供了新的思路和工具。其中&#xff0c;JNPF低代码平台以其独特的可视化特…

LDR6023:革新手机转接器体验,快充与OTG并存的科技杰作

在智能设备日益普及的今天&#xff0c;手机已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着功能的不断增加&#xff0c;手机对于电力和数据传输的需求也日益提升。为了应对这一挑战&#xff0c;深圳市乐得瑞科技有限公司凭借其深厚的科技积累和创新精神&#xf…

嵌入式系统------ARM

目录 一.c语言回顾 1.特殊符号 &#xff08;1&#xff09;const &#xff08;2&#xff09;static &#xff08;3&#xff09;extern 2.内存的结构 &#xff08;1&#xff09;kernel&#xff1a;内核 &#xff08;2&#xff09;栈区 &#xff08;3&#xff09;堆区 &#xff08…