线性栈的基础操作
环境及程序说明
线性栈类的定义以及函数声明
template <class T>
class Astack{
private:
int size;
T* stackArray;
int top;
public:
Astack(int MasStackSize);
~Astack();
bool Pop(T& item);
bool Push(const T& item);
bool Peek(T& item);
bool Isfull();
bool Isempty();
void Clear();
};
函数
template <class T>
Astack<T>::Astack(int MaxStackSize)
{
size = MaxStackSize;
stackArray = new T[size];
top = -1;
}
template <class T>
Astack<T>::~Astack()
{
delete [] stackArray;
}
template <class T>
bool Astack<T>::Pop(T &item)
{
if(top == -1)
{
cout<<"栈空无法弹出"<<endl;
return false;
}
item = stackArray[top];
top--;
return true;
}
template <class T>
bool Astack<T>::Push(const T &item)
{
if(top == size - 1)
{
cout<<"栈满无法压入"<<endl;
return false;
}
top++;
stackArray[top] = item;
return true;
}
template <class T>
bool Astack<T>::Peek(T& item)
{
if(top == -1)
{
cout<<"栈空"<<endl;
return false;
}
item = stackArray[top];
return true;
}
template <class T>
bool Astack<T>::Isfull()
{
return top == size-1;
}
template <class T>
bool Astack<T>::Isempty()
{
return top == -1;
}
template <class T>
void Astack<T>::Clear()
{
top = -1;
}
主函数
int main(int argc,char **argv)
{
int item,choose;
bool flag;
Astack <int> A(4);
while(1)
{
cout<<"请输入数字"<<endl<<"(0 压栈 1 弹栈 2 显示栈顶元素 3 栈满? 4 栈空? 5 清空栈内容)\n";
cin>>choose;
if(choose == -1)
break;
switch(choose)
{
case 0:
{
flag = false;
cout<<"请输入压栈元素";
cin>>item;
flag = A.Push(item);
cout<<"\n";
if(flag)
cout<<"压栈成功"<<endl;
break;
}
case 1:
{
flag = false;
flag = A.Pop(item);
if(flag)
cout<<"弹栈成功,弹出元素为:"<<item<<endl;
break;
}
case 2:
{
flag = false;
flag = A.Peek(item);
if(flag)
cout<<"栈顶元素为:"<<item<<endl;
break;
}
case 3:
{
if(A.Isfull())
cout<<"栈满"<<endl;
else
cout<<"栈未满"<<endl;
break;
}
case 4:
{
if(A.Isempty())
cout<<"栈空"<<endl;
else
cout<<"栈未空"<<endl;
break;
}
case 5:
{
A.Clear();
cout<<"栈已清空"<<endl;
break;
}
default:
{
cout<<"输入错误"<<endl;
break;
}
}
}
return 0;
}