Stack.hpp
#include<iostream>
using namespace std;
class Stack{
public:
Stack(int* array,int size = 3)
:_array(nullptr)
,_size(0)
,_capacity(size){
_array = new int[_capacity];
for(int i = 0; i < size; ++i){
_array[i] = array[i];
}
_size = size;
}
void CheckCapacity(){
if(_size == _capacity){
int NewCapacity = _capacity*2;
int* tmp = new int[NewCapacity];
for(int i = 0; i < _size; ++i){
tmp[i] = _array[i];
}
delete _array;
_array= tmp;
_capacity = NewCapacity;
}else
return;
}
//栈的入栈操作
void StackPush(const int data){
CheckCapacity();
_array[_size] = data;
_size+=1;
}
//栈的出栈操作
void StackPop(){
if(!StackEmpty()){
_size -= 1;
}else
return;
}
//获取栈顶元素
int StackTop(){
return _array[_size-1];
}
//获取栈总元素个数
int StackSize(){
return _size;
}
//判断栈是否为空
int StackEmpty(){
return _size == 0;
}
//打印栈的元素
void StackPrint(){
for(int i = 0; i < _size; ++i){
cout<<_array[i]<<" ";
}
cout<<endl;
}
~Stack(){
if(_array){
delete[] _array;
_array = nullptr;
_capacity = 0;
_size = 0;
}
}
private:
int* _array;
int _size;
int _capacity;
};
Stack.cpp
#include"Stack.hpp"
int main(){
Test();
return 0;
}
测试部分
void Test(){
int array[] = {1,2,3};
int size = sizeof(array)/sizeof(array[0]);
Stack s(array,size);
s.StackPush(4);
s.StackPush(5);
s.StackPush(6);
s.StackPrint();
s.StackPop();
s.StackPop();
s.StackPrint();
}