现有一个元素均为整数的栈,使用另一个临时栈对其进行非递减排序。
seqStack类:
#include <stack>
using namespace std;
template<class elemType>
class seqStack
{
private:
elemType*array;
int Top;
int maxSize;
void doubleSpace();
public:
seqStack(int initSize=100);
int isEmpty()
{
return (Top==-1);
};
int isFull()
{
return(Top==maxSize-1);
}
elemType top();
void push(const elemType&e);
void pop();
void sort();
~seqStack()
{
delete[]array;
};
};
seqStack类函数:
template<class elemType>//初始化顺序栈
seqStack<elemType>::seqStack(int initSize)
{
array=new elemType[initSize];
if(!array) throw "illegalSize()";
Top=-1;
maxSize=initSize;
}
template<class elemType>
void seqStack<elemType>::doubleSpace()
{
elemType*tmp;
int i;
tmp=new elemType[maxSize*2];
if(!tmp) throw "illegalSize()";
for(i=0; i<=Top; i++) tmp[i]=array[i];//逐个复制节点
delete[]array;
array=tmp;
maxSize=2*maxSize;
}
template<class elemType>
elemType seqStack<elemType>::top()//返回栈顶元素的值
{
if(isEmpty()) throw "outOfBound()";
return array[Top];
}
template<class elemType>
void seqStack<elemType>::push(const elemType&e)//将元素e压入栈顶,使其成为新的栈顶元素
{
if(isFull()) doubleSpace();
array[++Top]=e;
}
template <class elemType>
void seqStack<elemType>::pop()//将栈顶元素弹栈
{
if (Top==-1) throw "outOfBound()";
Top--;
}
template <class elemType>
void seqStack<elemType>::sort()
{
seqStack tmp;
for (int k=Top; k>-1; k--)
{
int K = top();
pop();
if (tmp.isEmpty())
{
tmp.push(K);
}
else
{
while(!tmp.isEmpty())
{
if(K<=tmp.top())
{
push(tmp.top());
tmp.pop();
}
else
break;
}
tmp.push(K);
int q=Top;
while(q>=k)
{
tmp.push(top());
pop();
q--;
}
}
}
while (!tmp.isEmpty())
{
push(tmp.top());
tmp.pop();
}
}