栈的实现其实没有特别复杂的地方,因为栈最主要的操作就是 push 和 pop,那么基于动态数组(可见我上一篇博客),就可以实现栈。
代码如下,如有错误请指正。
#include<iostream>
using namespace std;
#define CAPACITY 5
template<class T>
class Stack
{
private:
T* data;
int size;
int capacity;
void resize(int cab)
{
T* newdata = new T[cab];
for (int i = 0; i < size; i++)
{
newdata[i] = data[i];
}
data = newdata;
capacity = cab;
newdata = nullptr;
}
public:
Stack()
{
data = new T[CAPACITY];
size = 0;
capacity = CAPACITY;
}
Stack(int cab)
{
data = new T[cab];
size = 0;
capacity = cab;
}
void push(T item)
{
if (size == capacity) resize(2 * capacity);
data[size++] = item;
}
bool isempty()
{
return size == 0;
}
T top()
{
assert(!isempty());
return data[size - 1];
}
T pop()
{
assert(!isempty());
return data[--size];
}
int get_size()
{
return size;
}
int get_capacity()
{
return capacity;
}
};