您的位置:首页 > 其它

栈的应用——对栈排序、用栈实现队列的功能

2014-11-12 15:24 302 查看
一:写一个算法将栈里的元素升序排列。栈的实现未知,算法只能借助栈完成,可使用的函数有push、pop、top、empty等。

思路:可借助另外一个栈来完成排序。

1、从原始栈里依次弹出元素放入辅助栈;

2、每当将要压入的元素是得辅助栈不是升序排列,就将辅助栈里面的元素重新压入原始栈中;

3、直到辅助栈里面的元素都小于当前要压入的元素;

4、压入当前的元素。

代码如下:

#include <iostream>
#include <string>
#include <stack>
#include <stdlib.h>
#include <time.h>

using namespace std;

template <typename T>
class MQueue
{
public:
MQueue() { }

int size()const;

bool empty()const
{ return size() == 0;}

void push( const T &);
const T front();
void pop();
private:
stack<T> t1; //实现进“队”功能
stack<T> t2; //实现出“队”功能
};

template <typename T>
int MQueue<T>::size()const
{
return t1.size() + t2.size();
}
template <typename T>
void MQueue<T>::push( const T &data)
{
t1.push(data);
}

template <typename T>
const T MQueue<T>::front()
{
if( t2.empty())//如果t2为空,则将t1中的元素压入t2中
{
while(!t1.empty())
{
t2.push( t1.top());
t1.pop();
}
}

return t2.top();;
}

template <typename T>
void MQueue<T>::pop()
{
if( t2.empty())//如果t2为空,则将t1中的元素压入t2中
{
while(!t1.empty())
{
t2.push( t1.top());
t1.pop();
}
}
t2.pop();
}

int main(int argc, char const *argv[])
{
MQueue<int> myq;

for (int i = 0; i < 10; ++i)
{
myq.push(rand()%100);
}
cout << "Init size: " << myq.size() << endl;

while( !myq.empty())
{
cout << myq.front()<< " ";
myq.pop();
}
cout << endl;
cout << "End size: " << myq.size() << endl;
return 0;
}


View Code
完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: