C++(9.25)

stack:

cpp 复制代码
#include <iostream>
using namespace std;
class my_stack {
private:
    int* data;       // 动态数组,用于存储栈的元素
    int len;         // 当前栈中元素的个数
    int size;    // 栈的最大容量

public:
    // 默认构造函数,初始化容量为 10
    my_stack(int cap = 10) : len(0), size(cap) {
        data = new int[size];
    }

    // 析构函数,释放动态分配的内存
    ~my_stack() {
        delete[] data;
    }

    // 复制构造函数
    my_stack(const my_stack& other) : len(other.len), size(other.size) {
        data = new int[size];
        for (int i = 0; i < len; ++i) {
            data[i] = other.data[i];
        }
    }

    // 赋值运算符重载
    my_stack& operator=(const my_stack& other) {
        if (this != &other) {
            delete[] data;
            len = other.len;
            size = other.size;
            data = new int[size];
            for (int i = 0; i < len; ++i) {
                data[i] = other.data[i];
            }
        }
        return *this;
    }

    // 返回栈中元素的个数
    int size() const {
        return len;
    }

    // 判断栈是否为空
    bool empty() const {
        return len == 0;
    }

    // 返回栈顶元素
    int& top() {
        if (empty()) {
             return -1;
        }
        return data[len - 1];
    }

    // 向栈顶插入元素
    void push(int value) {
        if (len == size) {
            return -1;
        }
        data[len++] = value;
    }

    // 删除栈顶元素
    void pop() {
        if (empty()) {
           return -1;
        }
        len--;
    }

    // 交换两个栈的内容
    void swap(my_stack& other) {
        swap(data, other.data);
        swap(len, other.len);
        swap(size, other.size);
    }
};

int main() {
    my_stack s1(5);  // 初始化栈容量为 5
    s1.push(10);
    s1.push(20);
    s1.push(30);

    cout << "容量: " << s1.size() << endl;
    cout << "栈顶: " << s1.top() << endl;

    s1.pop();
    cout << "删除后,栈顶元素 " << s1.top() << endl;

    my_stack s2(5);
    s2.push(100);
    s2.push(200);

    cout << "交换后" << endl;
    s1.swap(s2);

    cout << "栈顶: " << s1.top() << endl;
   cout << "交换后: " << s2.top() << endl;

    return 0;
}

queue:

cpp 复制代码
#include <iostream>
#include <stdexcept>
using namespace std;
class my_queue {
private:
    int* data;      // 
    int len;        // 当前队列中的元素个数
    int size;       // 队列的最大容量
    int front;   // 队首元素的索引
    int back;    // 队尾元素的索引

public:
    // 初始化容量为 10
    my_queue(int cap = 10) : len(0), size(cap), front(0), back(-1) {
        data = new int[size];
    }

    // 析构函数,释放动态分配的内存
    ~my_queue() {
        delete[] data;
    }

    // 复制构造函数
    my_queue(const my_queue& other) : len(other.len), size(other.size), front(other.front), back(other.back) {
        data = new int[size];
        for (int i = 0; i < len; i++) {
            data[i] = other.data[(front + i) % size];
        }
    }

    // 赋值运算符重载
    my_queue& operator=(const my_queue& other) {
        if (this != &other) {
            delete[] data;
            len = other.len;
            size = other.size;
            front = other.front;
            back = other.back;
            data = new int[size];
            for (int i = 0; i < len; i++) {
                data[i] = other.data[(front + i) % size];
            }
        }
        return *this;
    }

    // 返回队列中元素的个数
    int the_size() const {
        return len;
    }

    // 判断队列是否为空
    bool empty() const {
        return len == 0;
    }

    // 返回队首元素
    int& front() {
        if (empty()) {
            throw out_of_range("queue is empty");
        }
        return data[front];
    }

    // 返回队尾元素
    int& back() {
        if (empty()) {
            throw out_of_range("queue is empty");
        }
        return data[back];
    }

    // 向队列尾部添加元素
    void push(int value) {
        if (len == size) {
            throw overflow_error("queue is full");
        }
        back = (back + 1) % size;
        data[back] = value;
        ++len;
    }

    // 从队列头部删除元素
    void pop() {
        if (empty()) {
            throw out_of_range("Queue is empty");
        }
        front = (front + 1) % size;
        len--;
    }

    // 交换两个队列的内容
    void swap(my_queue& other) {
        swap(data, other.data);
       swap(len, other.len);
        swap(size, other.size);
        swap(front, other.fron);
       swap(back, other.back);
    }
};

int main() {
    my_queue q1(5);  // 初始化队列容量为 5
    q1.push(10);
    q1.push(20);
    q1.push(30);

    cout << q1.the_size() << endl;
    cout  << q1.front() << endl;
    cout  << q1.back() << endl;

    q1.pop();
    cout q1.front() << endl;

    my_queue q2(5);
    q2.push(100);
    q2.push(200);

    cout  << endl;
    q1.swap(q2);

   cout << q1.front() << endl;
    cout << q2.front() << endl;

    return 0;
}
相关推荐
梦梦代码精4 小时前
《回收租赁系统技术选型避坑指南:业务闭环与二开自由度详解》
开发语言·低代码·docker·开源·代码规范
隔窗听雨眠4 小时前
记一次SQL Server数据库性能分析:从CPU100%到单配置修复的完整诊断
开发语言·数据库·php
David猪大卫4 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
charlie1145141914 小时前
现代Qt开发之图像处理进阶:像素操作与格式转换
开发语言·图像处理·qt
李永奉4 小时前
中科蓝讯SDK开发-BT893x 面条耳机连接vivo手机后连接APP端,最后手机端设置页面手动断开蓝牙连接,此时耳机端假断开
c语言·开发语言·嵌入式硬件·物联网·智能手机·电脑
2601_967760785 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
零衣贰5 小时前
The 2026 ICPC Asia East Continent Online Contest (I) 题解
c++·icpc
秦老师Q5 小时前
php零基础入门到实战,从语法到框架,一篇搞定
开发语言·php
不会就选b5 小时前
算法日常・每日刷题--<贪心>7
数据结构·算法·leetcode
驭渊的小故事6 小时前
多线程02
java·开发语言·jvm