您的位置:首页 > 其它

栈的实现

2015-08-05 16:43 330 查看
/****************************************************************
*     栈的数据成员:大小,元素个数,栈顶
*     栈的成员方法:初始化,出栈,入栈,获取栈顶元素,是否为空,是否满
****************************************************************/
#include<iostream>
using namespace std;
//栈的实现
template<class T>
class Stack_{
private:
int MaxSize;
int top;
T*data;
public:
Stack_()
{
MaxSize=100;
top=-1;
data=new T[MaxSize];
}
~Stack_()
{
if(data!=NULL)
{
delete []data;
cout<<"释放栈!"<<endl;
}
}
bool Empty()
{
if(top==-1)
{
return true;
}else{
return false;
}
}
bool Full()
{
if(top==MaxSize-1)
{
return true;
}else{
return false;
}
}
T GetTop()
{
try
{
if(Empty()) throw 0;
return data[top];
}catch(int e){
if(e==0)
{
cout<<"栈空!"<<endl;
}
exit(0);
}
}
bool Push(T m_data)
{
if(Full())return false;
else{
top++;
data[top]=m_data;
return true;
}
}
bool Pop()
{
if(Empty())return false;
else{
top--;
return true;
}
}
int GetSize()
{
return top+1;
}
};
int main()
{
int a[4]={1,4,3,2};
Stack_<int>m_stack;
if(m_stack.Empty())cout<<"空栈!"<<endl;
else cout<<"非空栈!"<<endl;
cout<<endl;
if(m_stack.Full())cout<<"满栈!"<<endl;
else cout<<"非满栈!"<<endl;
cout<<endl;

m_stack.Push(a[0]);
m_stack.Push(a[1]);
m_stack.Push(a[2]);
m_stack.Push(a[3]);

cout<<"获取栈中元素个数: "<<m_stack.GetSize()<<endl;
cout<<"获取栈顶元素: "<<m_stack.GetTop()<<endl;
cout<<endl;
//出栈
if(m_stack.Pop())cout<<"出栈成功!"<<endl;
else cout<<"出栈失败!"<<endl;
cout<<endl;

cout<<"获取栈中元素个数: "<<m_stack.GetSize()<<endl;
cout<<"获取栈顶元素: "<<m_stack.GetTop()<<endl;
cout<<endl;

m_stack.Push(9);
cout<<"获取栈中元素个数: "<<m_stack.GetSize()<<endl;
cout<<"获取栈顶元素: "<<m_stack.GetTop()<<endl;
cout<<endl;

for(int i=0;i<3;i++)
{
if(m_stack.Pop())cout<<"出栈成功!"<<endl;
else cout<<"出栈失败!"<<endl;
cout<<endl;
}
cout<<"获取栈中元素个数: "<<m_stack.GetSize()<<endl;
cout<<"获取栈顶元素: "<<m_stack.GetTop()<<endl;
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: