L o a d i n g . . .
主打一个C++
文章详情

C++模拟栈操作类

Posted on 2022-10-01 13:17:14 by 主打一个C++

C++模拟栈操作类,遵循先进后出原则

扩展:元素反转、允许压入任意类型数据

//头文件封装

#include <iostream>
#include <algorithm> // 用于std::reverse

template<typename T>
class Stack {
public:
    // 构造函数
    Stack() : top(-1), capacity(10) {
        array = new T[capacity];
    }

    // 析构函数
    ~Stack() {
        delete[] array;
    }

    // 弹出栈顶元素
    T pop() {
        if (top < 0) {
            std::cerr << "Stack is empty!" << std::endl;
            return T(); // 返回默认值
        }
        return array[top--];
    }

    // 压入元素到栈顶
    void push(T value) {
        if (top == capacity - 1) {
            resize();
        }
        array[++top] = value;
    }

    // 反转栈中的元素
    void invert() {
        std::reverse(array, array + top + 1);
    }

    int size() const {
        return top + 1;
    }

private:
    T* array; // 存储栈元素的数组
    int top; // 栈顶索引
    int capacity; // 数组容量

    // 扩容数组
    void resize() {
        capacity *= 2;
        T* newArray = new T[capacity];
        for (int i = 0; i <= top; ++i) {
            newArray[i] = array[i];
        }
        delete[] array;
        array = newArray;
    }
};

//调用测试

int main() {
    Stack<char> stack; // 创建字符类型的栈
    stack.push('a');
    stack.push('b');
    stack.push('c');
    stack.push('d');
    stack.push('e');

    // 扩展反转
    //stack.invert();

    std::cout << "Stack size: " << stack.size() << std::endl;

    while (stack.size() > 0) {
        std::cout << "Popped: " << stack.pop() << std::endl;
    }

    return 0;
}


*转载请注明出处:原文链接:https://cpp.vin/page/44.html

作者近期文章
  • 随手笔记
  • 主打一个C++   2025-01-11 20:02:01
  • 都2000000025年了。还有不能随意访问guthub的,仔细看。在国内其实是可以正常访问的,gfw并没屏蔽。这里给出其中一个简单直接的方法稳定访问。1. 随便百度一个”dn
提示
×
确定
数据库执行: 8次 总耗时: 0.01s
页面加载耗时: 



wechat +447752296473
wechat cpp-blog