c++ 栈的数组实现

来源:互联网 发布:linux cp mv 编辑:程序博客网 时间:2024/06/08 02:40
/*栈的数组实现*/#include<iostream>using namespace std;#define MAXSIZE 10;template<class T>class Stack{public://默认构造函数Stack();Stack(size_t maxElements);Stack(T data[],size_t maxElments);~Stack();//入栈void Push(T data);//出栈并返回T Pop();//返回栈顶元素T Top();//判断是否为空栈bool isEmpty();//栈是否已满bool isFull();//清空栈void Clear();//获得栈里元素的个数size_t GetSize();private://栈标指示器size_t top;//数组T *arrays;//栈的容量size_t maxSize;};template<class T>Stack<T>::Stack():maxSize(MAXSIZE),top(-1){arrays=new T[maxSize];if(arrays==NULL)cout<<"动态分配内存失败";}template<class T>Stack<T>::Stack(size_t maxElements):maxSize(maxElements),top(-1){arrays=new T[maxSize];//创建存储栈的数组}template<class T>Stack<T>::Stack(T data[],size_t maxElements):maxSize(maxElements),top(-1){arrays=new T[maxSize];//创建存储栈的数组for(size_t i=0;i<maxSize;i++){arrays[i]=data[i];}top+=maxSize;}template<class T>Stack<T>::~Stack(){delete[] arrays;}template<class T>void Stack<T>::Push(T data){if(isFull()){throw runtime_error("Full stack");}else{top++;//指向栈顶arrays[top]=data;}}template<class T>T Stack<T>::Pop() {if(isEmpty()){throw runtime_error("No elements in the stack");}else{T data=arrays[top];top--;return data;}}template<class T>T Stack<T>::Top(){if(isEmpty()){throw runtime_error("No elements in the stack");}else{return arrays[top];}}template<class T>bool Stack<T>::isEmpty(){return top==-1;}template<class T>bool Stack<T>::isFull(){return top==maxSize-1;}template<class T>void Stack<T>::Clear(){while (top!=-1){top--;}}template<class T>size_t Stack<T>::GetSize(){return top+1;}int main(){/*别忘了捕获异常*/try{/*测试*/int a[6]={2,4,3};Stack<int> s(a,6);s.Pop();s.Push(5);for(int i=0;i<6;i++)cout<<s.Pop()<<" ";}catch(exception e){cout<<e.what()<<endl;}cout<<endl;system("pause");return 0;}

0 0