您的位置:首页 > 运维架构

实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)

2016-06-11 18:53 316 查看
实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/7F/0C/wKiom1cQtfGSb_beAAA7jeynyU0867.png" title="无标题.png" alt="wKiom1cQtfGSb_beAAA7jeynyU0867.png" />
具体实现如下:
【干货小知识】自主实现一个栈,具体实现如下:
template<class T>
class Stack
{
public:
Stack()
:_arr(NULL)
, _size(0)
, _capacity(0)
{}
Stack(const Stack<T>& s)
:_arr(new T[s._size])
, _size(s._size)
, _capacity(s._size)
{
for (size_t i = 0; i < _size; i++)
{
_arr[i] = s._arr[i];
}
}
Stack<T>& operator=(const Stack<T>& s)
{
if (this != &s)
{
T* tmp = new T[s._size];
delete[] _arr;
for (size_t i = 0; i < s._size; i++)
{
tmp[i] = s._arr[i];
}
_arr = tmp;
_size = s._size;
_capacity = s._capacity;
}
return *this;
}
~Stack()
{
if (_arr)
{
delete[] _arr;
}
}
public:
void _CheckCapacity(size_t size)
{
if (size > _capacity)
{
_capacity += _capacity * 2 + 3;
}
T* tmp = new T[_capacity];
if (_arr)
{
for (size_t i = 0; i < _size; i++)
{
tmp[i] = _arr[i];
}
}
delete[] _arr;
_arr = tmp;
}
void Push(const T& x)
{
_CheckCapacity(_size + 1);
_arr[_size++] = x;
}
void Pop()
{
assert(_size > 0);
--_size;
}
bool Empty()
{
return _size == 0;
}
size_t Size()
{
return _size;
}
T& Top()
{
return _arr[_size - 1];
}
void PrintStack()
{
if (_size == 0)
{
cout << "Stack is empty!";
}
else
{
for (size_t i = 0; i < _size; i++)
{
cout << _arr[i] << " ";
}
cout << endl;
}
}
private:
T* _arr;
size_t _size;
size_t _capacity;
};
本文出自 “Scen” 博客,请务必保留此出处http://10741357.blog.51cto.com/10731357/1764250
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: