//公式化描述的堆栈类Stack
#include <iostream>
using namespace std;
template <class T>
class Stack{
public:
Stack(int MaxStackSize=10);
~Stack(){delete[]stack;}
bool IsEmpty()const{return top==-1;}
bool IsFull()const{return top==MaxTop;}
T Top()const;
Stack<T>& Add(const T& x);
Stack<T>& Delete(T& x);
void Show()const;
private:
int top; //栈顶
int MaxTop; //最大栈顶值
T *stack; //堆栈元素数组
};
class OutOfBounds{
public:
OutOfBounds(){
cout<<"Out Of Bounds!"<<endl;
}
};
template<class T>
void Stack<T>::Show()const{
for(int i = 0;i<=top;i++){
cout<<stack[i]<<endl;
}
}
//内存不足的异常类
class NoMem{
public:
NoMem(){
cout<<"No Memory!"<<endl;
}
};
template <class T>
Stack<T>::Stack(int MaxStackSize){
MaxTop = MaxStackSize -1;
stack = new T[MaxStackSize];
top = -1;
};
//返回栈顶元素
template<class T>
T Stack<T>::Top()const{
if(IsEmpty)
throw OutOfBounds();
else return stack[top];
}
//添加元素
template<class T>
Stack<T>& Stack<T>::Add(const T& x){
if(IsFull()){
throw
NoMem();
}
stack[++top]=x;
return *this;
}
//删除元素
template<class T>
Stack<T>& Stack<T>::Delete(T& x){
if(IsEmpty()){
throw
OutOfBounds();
}
x=stack[top--];
return *this;
}
int main(){
Stack<int>myStack;
myStack.Add(1);
myStack.Add(2);
myStack.Add(3);
myStack.Add(4);
myStack.Show();
return 0;
}
[C++]数据结构:公式化描述的堆栈Stack的简单创建与使用
最新推荐文章于 2022-07-06 17:21:55 发布