2024.9.4 作业

news2024/11/15 13:34:50

自己实现栈和队列的全类型

代码:

/*******************************************/

文件名:sq.h

/*******************************************/

#ifndef SQ_H
#define SQ_H
#include <iostream>
#include <stdexcept>
using namespace std;

template <typename T>

class Mystack
{
private:
    T *data;
    size_t size;
    size_t capacity;
    void resize()
    {
        size_t newcapacity = 2*capacity;
        T *temp=new T[newcapacity];
        for(size_t i=0;i<size;i++)
        {
            temp[i]=data[i];
        }
        delete[]data;
        data=temp;
        capacity=newcapacity;
    }
public:
    Mystack():size(0),capacity(1){data=new T[capacity];}
    ~Mystack()
    {
        delete[]data;
    }
    Mystack &operator=(const Mystack &other) {
        if (this != &other) {
            delete[] data;
            size = other.size;
            capacity = other.capacity;
            data = new T[capacity];
            for (size_t i = 0; i < size; ++i) {
                data[i] = other.data[i];
            }
        }
        return *this;
    }
    bool empty()const
    {
        return size==0;
    }
    size_t getsize()const
    {
        return size;
    }
    T &top()
    {
        if (empty()) {
            throw std::out_of_range("Stack<>::top(): empty stack");
        }
        return data[size - 1];
    }
    void push(const T &value)
    {
        if(size==capacity)
        {
            resize();
        }
        data[size++]=value;
    }
    void pop()
    {
        if(empty())
        {
            throw std::out_of_range("Stack<>::pop(): empty stack");
        }
        size--;
    }
    void show()
    {
        for(size_t i=0;i<size;i++)
        {
            cout<<data[i]<<" ";
        }
        cout<<endl;
    }
};

template <typename T>

class Myqueue
{
private:
    T *data;
    int frontindex;
    int rearindex;
    size_t size;
    size_t capacity;
    void resize()
    {
        size_t newCapacity = 2 * capacity;
        T *temp = new T[newCapacity];
        for (size_t i = 0; i < size; i++) {
            temp[i] = data[(frontindex + i) % capacity];
        }
        delete[] data;
        data = temp;
        frontindex = 0;
        rearindex = size;
        capacity = newCapacity;
    }
public:
    Myqueue():frontindex(0),rearindex(0),size(0),capacity(1){data=new T[capacity];}
    ~Myqueue()
    {
        delete[]data;
    }
    bool empty()const
    {
        return size==0;
    }
    size_t getsize()const
    {
        return size;
    }
    T &front()
    {
        if (empty()) {
            throw std::out_of_range("Queue is empty");
        }
        return data[frontindex];
    }
    T &back()
    {
        if (empty()) {
            throw std::out_of_range("Queue is empty");
        }
        return data[(rearindex - 1 + capacity) % capacity];
    }
    void push(const T &value)
    {
        if (size == capacity) {
            resize();
        }
        data[rearindex] = value;
        rearindex = (rearindex + 1) % capacity;
        size++;
    }
    void pop()
    {
        if (empty()) {
            throw std::out_of_range("Queue<>::pop(): empty queue");
        }
        frontindex = (frontindex + 1) % capacity;
        size--;
    }
    void show()
    {
        for(size_t i=0;i<size;i++)
        {
            cout<< data[(frontindex + i) % capacity]<<" ";
        }
        cout<<endl;
    }
};

#endif // SQ_H

/*******************************************/

文件名:main.cpp

/*******************************************/

#include"sq.h"

int main()
{
    Mystack<int> s1;
    Mystack<double> s2;
    Mystack<char> s3;
    Myqueue<int> q1;
    Myqueue<double> q2;
    Myqueue<char> q3;
    s3.push('a');
    s3.push('b');
    s3.push('c');
    cout<<"s3=";
    s3.show();
    cout<<"s3.size="<<s3.getsize()<<endl;
    cout<<s3.top()<<endl;
    Mystack<char> s4;
    s4=s3;
    cout<<"s4=";
    s4.show();
    s4.pop();
    cout<<"s4=";
    s4.show();
    s1.push(1);
    s1.push(2);
    s1.push(3);
    cout<<"s1=";
    s1.show();
    cout<<"s1.size="<<s1.getsize()<<endl;
    cout<<s1.top()<<endl;
    Mystack<int> s5;
    s5=s1;
    cout<<"s5=";
    s5.show();
    s5.pop();
    cout<<"s5=";
    s5.show();
    s2.push(1.1);
    s2.push(2.2);
    s2.push(3.3);
    cout<<"s2=";
    s2.show();
    cout<<s2.getsize()<<endl;
    cout<<s2.top()<<endl;
    Mystack<double> s6;
    s6=s2;
    cout<<"s6=";
    s6.show();
    s6.pop();
    cout<<"s6=";
    s6.show();
    q1.push(4);
    q1.push(5);
    q1.push(6);
    q2.push(4.4);
    q2.push(5.5);
    q2.push(6.6);
    q3.push('d');
    q3.push('e');
    q3.push('f');
    cout<<"q1=";
    q1.show();
    cout<<"q2=";
    q2.show();
    cout<<"q3=";
    q3.show();
    cout<<"q1.size="<<q1.getsize()<<endl;
    cout<<"q2.size="<<q2.getsize()<<endl;
    cout<<"q3.size="<<q3.getsize()<<endl;
    cout<<q1.back()<<endl;
    cout<<q1.front()<<endl;
    cout<<q2.back()<<endl;
    cout<<q2.front()<<endl;
    cout<<q3.back()<<endl;
    cout<<q3.front()<<endl;
    Myqueue<int> q4;
    Myqueue<double> q5;
    Myqueue<char> q6;
    q4=q1;
    q5=q2;
    q6=q3;
    cout<<"q4=";
    q4.show();
    cout<<"q5=";
    q5.show();
    cout<<"q6=";
    q6.show();
    q4.pop();
    q5.pop();
    q6.pop();
    cout<<"q4=";
    q4.show();
    cout<<"q5=";
    q5.show();
    cout<<"q6=";
    q6.show();
    return 0;
}

结果:

思维导图:

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

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

相关文章

文档一键生成组织架构图,这款在线AI工具让你事半功倍!

在呈现公司组织架构或部门层级时&#xff0c;经常会用到组织架构图&#xff0c;组织架构图是一种直观的可视化工具&#xff0c;用于展示一个组织内部的层级结构和各部门之间的关系。 在制作组织架构图时&#xff0c;如果拿到的是清晰的人员关系&#xff0c;绘制起来还比较简单…

LeetCode 热题100-64 搜索二维矩阵

搜索二维矩阵 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c…

访问Swagger:java.lang.NumberFormatException: For input string: ““

你们好&#xff0c;我是金金金。 场景 启动项目&#xff0c;接着访问Swagger 依赖版本如下&#xff1a;1.5.20 查看控制台输出&#xff1a;报错如下 排查 首先看报错&#xff1a;For input string: “”&#xff1a;这个错误表明程序尝试将一个空字符串&#xff08;“”&#x…

JavaWeb JavaScript 9.正则表达式

生命的价值在于你能够镇静而又激动的欣赏这过程的美丽与悲壮 —— 24.8.31 一、正则表达式简介 正则表达式是描述字符模式的对象。正则表达式用简单的API对字符串模式匹配及检索替换&#xff0c;是对字符串执行模式匹配的强大工具。 1.语法 var pattnew RegExp(pattern,modi…

【qt踩坑】路径含中文导致的报错,以及 OpenGL的链接报错

​ 背景 本来是准备采用VSQt插件的方式来开发Qt的&#xff0c;但是学习过程中发现&#xff0c;这种模式还是没有直接用Qt Creator 开发来的方便&#xff0c;插件这种模式坑多&#xff0c;功能不完善。 不过在直接使用Qt Creator的时候也踩坑了&#xff1a; (最后发现&#x…

【达梦】“6103无效的时间类型值”解决办法

场景 使用DM数据迁移工具将excel文件里的数据导入到达梦数据库里。提示“无效的时间类型值”。 尝试 一看就是createTime等跟时间相关的字段出问题了。createTime在库里的数据类型为timeStamp。 尝试1&#xff1a;修改excel里此字段的类型&#xff0c;依旧报错。此方案失败。…

单向链表与双向链表

当使用单向链表查看链表中某个节点的数据&#xff0c;可以使用快慢指针法 快慢指针&#xff1a; 快慢指针是一种在链表和数组中常用的算法技巧&#xff0c;主要用于解决链表或数组中的问题&#xff0c;如检测环 存在、找到环的入口、计算链表的中点等。快慢指针的核心思想是…

【数学建模备赛】Ep07:灰色预测模型

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、&#xff1a;灰色预测模型☀️☀️☀️1. 灰色系统引入2. 方法3. 步骤① 累加法产生新序列② 利用部分和序列相邻两项的加权平均产生序列z③ 建立关于原始数据与序列z的灰微分方程④ 利用最小二乘法确定灰微分方程…

Orcad封装怎么添加

1 点击文件&#xff0c;添加库 2 添加封装 3 画二极管封装 1.先设置网格。 2..Library-->>olb文件 右键New Part 3.文件名建议规范命名。 4.place ployline 同时按shift画任意形状的封装 5 图形填充

18.求三数之和

题目 链接&#xff1a;leetcode链接 思路分析&#xff08;双指针&#xff09; 这道题目与上一道题&#xff0c;求有效三角形的个数&#xff0c;十分类似&#xff0c;都是使用双指针算法来解决问题。 先进行排序&#xff0c;然后利用单调性进行调整&#xff0c;逐步逼近正确…

25届计算机毕业设计,如何打造Java SpringBoot+Vue博客系统,一步一脚印,开发心得分享

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

Proteus 仿真设计:开启电子工程创新之门

摘要&#xff1a; 本文详细介绍了 Proteus 仿真软件在电子工程领域的广泛应用。从 Proteus 的功能特点、安装与使用方法入手&#xff0c;深入探讨了其在电路设计、单片机系统仿真、PCB 设计等方面的强大优势。通过具体的案例分析&#xff0c;展示了如何利用 Proteus 进行高效的…

JVM垃圾回收算法:标记-清除算法 、复制算法、 标记-整理算法、 分代收集算法、可达性分析算法

文章目录 引言I 标记回收算法(Mark-Sweep)算法思路不足II 复制算法(Copying)算法的思路缺点案例III 标记整理算法(Mark-Compact)思路IV 分代收集(以上三种算法的集合体)分代收集算法思想新生代算法:Minor GC使用复制算法老年代 GC算法:(Major GC / Full GC)使用标记…

【内网渗透】最保姆级的春秋云镜Certify打靶笔记

目录 flag1 flag2 flag3 flag4 flag1 fscan扫外网 访问8983端口&#xff0c;发现配置项有log4j 【vulhub】Log4j2&#xff1a;CVE-2021-44228漏洞复现_vulhub cve-2021-44228-CSDN博客 /solr/admin/collections?action${jndi:ldap://z5o5w8.dnslog.cn} dnslog测出可…

【数据结构】详解二叉搜索树及其实现

前言&#xff1a; 二叉搜索树是红黑树等的前身&#xff0c;掌握其操作和性质很重要。总结自用and分享。 目录 一、基本概念 二、其常见操作及其实现 1.定义节点 2.查找元素 3.插入元素 4.删除元素【难点】 三、性质分析 一、基本概念 如下所示&#xff1a;对于所有节点都…

小阿轩yx-Kubernetes高级调度

小阿轩yx-Kubernetes高级调度 前言 前面 Kubernetes 的调度基础实现了见表格自己的服务器部署到 Kubernetes在生产环境中&#xff0c;调度远比想象的要复杂 比如 某些程序只能部署在固定的几台机器上某些机器只能部署指定的 Pod节点挂了怎么快速修复节点挂了如何让影响最小…

DDS基本原理--FPGA学习笔记

DDS信号发生器原理&#xff1a; timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2024/09/04 15:20:30 // Design Name: hilary // Module Name: DDS_Module //module DDS_Module(Clk,Reset_n,Fword,Pword,Data);input Clk;input Reset_n;input [31:0]…

OpenBLAS QR decompose example

1. 安装 OpenBLAS release 版本&#xff1a; Makefile&#xff1a; all:wget https://github.com/OpenMathLib/OpenBLAS/archive/refs/tags/v0.3.27.tar.gztar zxf v0.3.27.tar.gz make -C OpenBLAS-0.3.27 FCgfortran -jinstall:make -C OpenBLAS-0.3.27 install PREFIX../lo…

字节跳动一面

字节跳动一面【C后端开发】 base &#xff1a; 深圳 岗位&#xff1a;C后端开发 时间&#xff1a; 2024/8/30 文章目录 基本介绍C语言1. 堆栈内存是否连续&#xff0c;为什么&#xff1f;2. int i0; i ; 两个线程同时执行10000次&#xff0c;i最终的数值是多少&#xff1f;3.…

【Java基础】代理

文章目录 代理代理模式的优点代理模式类型基于JDK的静态代理基于JDK的动态代理 代理 一种设计模式&#xff0c;不允许用户直接访问核心功能&#xff0c;而是通过代理来访问核心类的核心功能 举个例子&#xff0c;如果我们现在需要一个银行转账系统&#xff0c;我们需要在一个Ja…