本文共 1879 字,大约阅读时间需要 6 分钟。
1 思路:
自己实现一个栈,其中成员为标准库中的栈,一个存放全部的元素,一个存放最小元素,一个存放最大元素。
使用自己实现的栈来实现一个求最大值最小值的队列,其中包含两个成员,一个作为出队的栈,一个作为入队的栈。
2 C++实现代码:
#include#include #include using namespace std;template class minmaxStack{public: bool empty() { return st.empty(); } size_t size() { return st.size(); } void push(int x) { if(minStack.empty()||x maxStack.top()) maxStack.push(x); st.push(x); } void pop() { if(st.empty()) return; if(st.top()==minStack.top()) minStack.pop(); if(st.top()==maxStack.top()) maxStack.pop(); st.pop(); } int getMin() { if(st.empty()) return -1; return minStack.top(); } int getMax() { if(st.empty()) return -1; return maxStack.top(); } int top() { return st.top(); }private: stack st; stack minStack; stack maxStack;};template class myqueue{public: bool empty() { return in.empty()&&out.empty(); } size_t size() { return in.size()+out.size(); } int getMax() { if(in.empty()&&out.empty()) return -1; if(in.empty()) return out.getMax(); if(out.empty()) return in.getMax(); return max(in.getMax(),out.getMax()); } int getMin() { if(in.empty()&&out.empty()) return -1; if(in.empty()) return out.getMin(); if(out.empty()) return in.getMin(); return min(in.getMin(),out.getMin()); } void push(int x) { in.push(x); } void pop() { if(in.empty()&&out.empty()) return; if(out.empty()) { while(!in.empty()) { out.push(in.top()); in.pop(); } } out.pop(); }private: minmaxStack in; minmaxStack out;};int main(){ myqueue q; for (int i = 0; i < 15; i++) { int index=rand()%100; cout< <<' '; q.push(index); } cout< <
转载地址:http://kxqya.baihongyu.com/