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

前端之家收集整理的这篇文章主要介绍了【数据结构】实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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


在栈中操作的话,push和pop的时间复杂度就是O(1),所以我们只用实现Min(返回最小值的操作)的时间复杂度为O(1),

思想就是用两个栈,一个就是普通的存取数据的栈,另一个为当前未知的最小值,插入数据和删除数据两个栈都进行操作,返回最小值的话,直接对第二个栈操作。


代码如下:

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #include <stack>
  5.  
  6. template <class T>
  7. class retmin
  8. {
  9. public :
  10. void pushmin(const T& x)
  11. {
  12. _num.push (x);
  13. if(!_min.empty ())
  14. {
  15. T tmp = _min.top ();
  16. if( x < tmp)
  17. {
  18. _min.push (x);
  19. }
  20. else
  21. _min.push (tmp);
  22. }
  23. else
  24. _min.push (x);
  25. }
  26. void popmin()
  27. {
  28. _num.pop ();
  29. _min.pop ();
  30. }
  31.  
  32. T Retmin()
  33. {
  34. return _min.top ();
  35. }
  36. private :
  37. stack<T> _num;
  38. stack<T> _min;
  39. };
  40.  
  41.  
  42. void Test9()
  43. {
  44. retmin< int> r1;
  45. r1.pushmin (5);
  46. r1.pushmin (4);
  47. r1.pushmin (3);
  48. r1.pushmin (6);
  49. r1.pushmin (0);
  50. cout<<r1.Retmin ()<<endl;
  51. }
  52.  
  53. int main()
  54. {
  55. Test9();
  56. return 0;
  57. }

猜你在找的数据结构相关文章