1.包含min函数的栈
class Stack
{
public:
stack<int>stack_data,stack_min;
void push(int val)
{
stack_data.push(val);
if(stack_min.empty()||stack_min.top()>val)
stack_min.push(val);
else
stack_min.push(stack_min.top());
}
void pop()
{
stack_data.pop();
stack_min.pop();
}
int top()
{
return stack_data.top();
}
int min()
{
return stack_min.top();
}
};
2.两个栈实现一个队列
两个注意点:
StackPush要往StackPop中倒入数据,必须要把StackPush中的数据一次性倒完
如果StackPop中有数据,则不能发生倒数据行为
class Stack_queue{
public:
void push(int val)
{
stack1.push(val);
}
int pop()
{
while(!stack1.empty())
{
int temp;
temp=stack1.top();
stack1.pop();
stack2.push(temp);
}
a=stack2.top();
stack2.pop();
}
private:
stack <int> stack1,stack2;
};
3.只用一个辅助栈,实现栈顶向栈底由大到小排序
void stack_sort(stack<int> &stack1)
{
stack<int> stack2;
int temp,temp1;
while(!stack1.empty())
{
temp=stack1.top();
stack1.pop();
while(!stack2.empty() && temp>stack2.top())
{
temp1=stack2.top();
stack2.pop();
stack1.push(temp1);
}
stack2.push(temp);
}
while(!stack2.empty())
{
temp=stack2.top();
stack2.pop();
stack1.push(temp);
}
}
int main( )
{
stack<int> stack1;
int temp;
while(cin>>temp)
{
stack1.push(temp);
}
stack_sort(stack1);
while(!stack1.empty())
{
cout<<stack1.top()<<endl;
stack1.pop();
}
system("pause");
return 0;
}
4.实现一个栈的逆序,只能用递归函数和栈本身来操作
5.滑动窗口,找到窗口中的最大值,返回最大值的数组
vector<int> deque_max(vector<int> arr,int w)
{
deque<int> deque1;
vector<int> res;
deque1.push_back(0);
for(int i=1;i<arr.size();i++)
{
while( (deque1.size()!=0) && arr[deque1.back()]<=arr[i] )
{
deque1.pop_back();
}
deque1.push_back(i);
while((i-deque1.front())>=w)
{
deque1.pop_front();
}
if(i>=w-1)
res.push_back(arr[deque1.front()]);
}
return res;
}
int main( )
{
vector<int> vec,res;
int temp;
while(cin>>temp)
{
vec.push_back(temp);
}
res=deque_max(vec,3);
for(int i=0;i<res.size();i++)
{
cout<<res[i]<<endl;
}
system("pause");
return 0;
}
6.数组的max_tree函数