#include<iostream>
#include<cstdlib> // #include<stdlib.h>
using namespace std;
class MyStack
{
private:
enum { STACK_INIT_SIZE = 10, STACK_INC_SIEZ = 2 };
int* _data;
int _size; //容量
int _top; // 栈顶指针
void Expand()//增容函数
{
int new_size = _size * STACK_INC_SIEZ; // 计算新的容量
int* new_data = new(nothrow) int[new_size]; // 分配新的内存空间
if (nullptr == new_data)
{
exit(EXIT_FAILURE);
}
// 将原栈中的元素复制到新的内存空间中
for (int i = 0; i <= _top; ++i)
{
new_data[i] = _data[i];
}
// 释放原栈中的内存空间
delete[]_data;
// 更新成员变量
_data = new_data;
_size = new_size;
}
public:
MyStack() :_data(nullptr), _size(STACK_INIT_SIZE), _top(-1) //
{
_data = new(nothrow) int[_size]; //C++ throw std::bad_alloc
if (nullptr == _data)
{
exit(EXIT_FAILURE);
}
}
MyStack(int sz)
:_data(nullptr),
_size(sz > STACK_INIT_SIZE ? sz : STACK_INIT_SIZE),
_top(-1) //
{
_data = new(nothrow) int[_size]; //C++ throw std::bad_alloc
if (nullptr == _data)
{
exit(EXIT_FAILURE);
}
}
~MyStack()
{
if (nullptr != _data)
{
delete[]_data;
}
_data = nullptr;
_size = 0;
_top = -1;
}
//int Size(const MyStack * const this)
int Size() const { return _top + 1; }
bool Empty() const { return Size() == 0; }
int Capt() const { return _size; }
bool Full() const { return Capt() == Size(); }
bool Push(int val)//入栈
{
if (Full())
{
Expand();
}
_data[++_top] = val;
return true;
}
bool Top(int& val) const // 取栈顶元素,元素不出栈
{
if (Empty()) return false;
val = _data[_top];
return true;
}
bool Pop() // 只是出栈
{
if (Empty()) return false;
_top -= 1;
return true;
}
bool GetPop(int &val) // 取栈顶元素和出栈
{
if (Empty()) return false;
val = _data[_top];
_top = _top - 1;
return true;
}
};
int main() {
MyStack s;
for (int i = 0; i < 17; i++) {
s.Push(i);
}
int val = 0;
while (s.GetPop(val)) {
cout <<val<< endl;
}
return 0;
}
28.C++ 整型栈
最新推荐文章于 2024-10-16 22:34:48 发布