您的位置:首页 > 编程语言 > C语言/C++

c++ 栈的数组实现

2015-04-18 21:39 176 查看
/*
栈的数组实现
*/

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 数组