目录
题目
代码实现
输出
题目
定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。
要求函数min、push 以及pop 的时间复杂度都是O(1)。
代码实现
#include <iostream>
template<typename T>
class stack
{
public:
stack()
{
pdata = new T[max_size];
pmindata = new T[max_size];
}
~stack()
{
if(pdata)
{
delete[] pdata;
}
if(pmindata)
{
delete[] pmindata;
}
}
T min(void)
{
return pmindata[size - 1];
}
void push(T data)
{
*(pdata + size) = data;
if(size == 0)
{
pmindata[0] = data;
}
else
{
if(data < pmindata[size - 1])
{
pmindata[size] = data;
}
else
{
pmindata[size] = pmindata[size - 1];
}
}
size++;
}
T pop(void)
{
size--;
return *(pdata + size);
}
private:
const int max_size = 1000;
int size = 0;
T* pdata;
T* pmindata;
};
int main()
{
stack<int> m_stack;
m_stack.push(10);
m_stack.push(15);
m_stack.push(13);
m_stack.push(7);
m_stack.push(6);
std::cout << m_stack.min() << std::endl;
std::cout << m_stack.pop() << std::endl;
std::cout << m_stack.min() << std::endl;
std::cout << m_stack.pop() << std::endl;
std::cout << m_stack.min() << std::endl;
return 0;
}