C++用数组结构实现大小固定的栈

1. 思路

实现栈结构:栈结构是先进后出的,需要一个数组array、一个记录位置的变量index以及数组的大小size,当进来一个元素,size就++,出去一个元素size就–,然后弹出这个数据。

2. 代码

// 固定数组实现栈结构

#include <iostream>
#include <exception>

class ArrayIndexOutOfBoundsException : public std::exception {
 public:
    ArrayIndexOutOfBoundsException(const char* ptr) {
        this -> ptr = ptr;
    }
    virtual const char* what() {
        std::cout << this -> ptr << std::endl;
        return ptr;     // 返回ptr还是this -> ptr
    }
 private:
    const char* ptr;
};

class MyStack {
 public:
     MyStack(int mystack_size_); // 构造函数
     ~MyStack();    // 析构函数
     void myStackPush(int element); // 入栈
     int myStackPop();  // 出栈
     int myStackPeek(); // 获取栈顶元素
     void printMyStack();   // 打印栈
 private:
    int* mydata_;
    int mystack_size_;  // 栈的大小
    int mystack_index_; // 栈当前的索引
};

MyStack::MyStack(int mystack_size_) {
    this -> mystack_size_ = mystack_size_;
    mydata_ = new int[mystack_size_];
    mystack_index_ = 0;
}

MyStack::~MyStack() {
    delete [] mydata_;
}

void MyStack::myStackPush(int element) {
    if (mystack_index_ == mystack_size_) {  // 栈已经满了
        throw ArrayIndexOutOfBoundsException("stack is full");
    }   else {
        mydata_[mystack_index_++] = element;
    }
}

int MyStack::myStackPop() {
    if (mystack_index_ == 0) {
        throw ArrayIndexOutOfBoundsException("stack is empty");
    } else {
        return mydata_[--mystack_index_];
    }
}

int MyStack::myStackPeek() {
    if (mystack_index_ == 0) {
        return -1;  // 如果当前栈为空的话peek函数返回的是-1
    } else {
        return mydata_[mystack_index_ - 1]; // 这里只是获取当前栈顶的元素
    }
}

void MyStack::printMyStack() {
    for (int i = 0; i < mystack_size_; ++i) {
        std::cout << mydata_[i] << ',';
    }
    std::cout << "\n";
}
int main()
{
    MyStack myStack1(5);
    myStack1.myStackPush(1);
    myStack1.myStackPush(2);
    myStack1.myStackPush(3);
    myStack1.myStackPush(4);
    myStack1.myStackPush(5);
    myStack1.printMyStack();
    for (int i  = 0; i < 5; ++i) {
        std::cout << "pop=" << myStack1.myStackPop() << ",";
        std::cout << "peek=" << myStack1.myStackPeek() << ",";
        std::cout << std::endl;
    }
    myStack1.printMyStack();
    return 0;
}

在这里插入图片描述

3. 参考文章

  1. C++用数组实现一个固定大小的栈/队列
  2. 用数组结构实现大小固定的栈和队列
  3. C++ 异常处理
  4. C++ 类模板和模板类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值